Alert System Architecture

9

Vorrei creare un sistema che gestisca i messaggi di avviso di vari programmi e possa elaborare tali avvisi per i consumatori down-wind via e-mail. Tutto ciò sarebbe contenuto su una rete interna.

Penso di volere che l'architettura di base assomigli a questa:

La principale preoccupazione che ho attualmente è il bit "Message Handler", che è quello che sarà il mio "sort-of-API". Voglio che tutti i componenti di questo sistema inviino dati all'API, che gestisce tutte le scritture sul database. Penso che questo approccio sia più semplice perché semplifica la sicurezza e mi consente di contenere molte delle query DB più complesse in un singolo programma.

La preoccupazione è che io voglia che questo sia indipendente dal linguaggio - il che significa che qualsiasi codice dovrebbe essere in grado di inviare messaggi al mio gestore - che li interpreterà. Spero di farlo tramite file flat JSON - o tramite chiamate REST al programma (dando flessibilità alle applicazioni down-stream).

La mia domanda è -

Dovrei preoccuparmi del gestore dei messaggi - o aggiungerebbe semplicemente la semplicità per consentire l'accesso diretto al database alle applicazioni down-stream, così come gli altri due componenti (Management Console e Alert Manager)?

In questo modo, possono inserire qualsiasi avviso che vorrebbero, a condizione che l'INSERT nella / e tabella / i DB sia valido.

Non sono un designer di software per mestiere quindi scusami - voglio solo un progetto da fare nel mio tempo libero.

    
posta Christopher 30.03.2018 - 16:52
fonte

2 risposte

4

Hai esaminato il protocollo AMQP (Advanced Message Queuing Protocol: link )?

RabbitMQ è uno strumento fantastico per qualcosa di simile, penso (ce ne sono anche altri, MSMQ, servizi Azure / AWS, ecc.). Non solo ottieni un gestore di messaggi indipendenti da una lingua (semplice "invia il messaggio al server dei messaggi con dati json"), scollega l'elaborazione dei messaggi a valle e la rendi ben isolata. Esegui un servizio messaggi che elabora i messaggi in arrivo dalla / e coda / e di cui hai bisogno e sputa le notifiche.

Uno dei motivi per cui mi piace davvero usare AMQP è che inizi come adesso con qualche soluzione casalinga, ma renditi conto che dopo il tempo devi gestire i messaggi in modo leggermente diverso a seconda del tipo, a chi deve andare , ecc., quindi finisci essenzialmente per creare la tua implementazione AMQP.

Che cosa fai se un messaggio deve essere inviato a 5 destinatari diversi? Che cosa succede se si dispone di un messaggio che deve essere ruotato in un certo numero di processori (pensare a lunghi task in esecuzione e con il numero X di processori simultanei, dove è possibile arrotondare i messaggi di un tipo specifico). Cosa succede se il messaggio dovrebbe andare a una persona, ma se non sono disponibili / online, dovrebbe andare in un'altra? L'AMQP gestisce già tutto questo (abbastanza bene!), Con categorizzazione, code, canali, persistenza duratura, caratteristiche di ogni tipo.

Ecco una panoramica di base degli scenari che può gestire (nota che non è specifico per RabbitMQ: è una cosa AMQP, ma RabbitMQ capita di spiegarlo bene) - link

    
risposta data 30.03.2018 - 21:03
fonte
3

Domanda molto ben inquadrata!

Quindi tutte le decisioni architettoniche implicano compromessi. Se sei curioso di discutere dei compromessi, modifica la tua domanda in quella direzione. Invece, dato che la domanda richiede solo una posizione, prenderò la parte di discutere a favore di MessageHandler. Farò un ulteriore passo avanti per suggerire di NON includere un database, almeno non un database SQL, almeno per non iniziare. Basta che MessageHandler salvi JSON nel file system, ad esempio un avviso di directory per ora di ricevimento (a seconda del volume, ovviamente) e l'API quando interrogato da Alert Manager attraversa solo le ultime 2 directory di avvisi per decidere quali email inviare (in base alla priorità, ovviamente).

Ci sono un sacco di cose buone da masticare in questo problema, e mantenere un database fuori dall'immagine nelle fasi iniziali rimuoverà un sacco di rumore accidentale e problemi inutili. Certo, forse hai un amore nascosto nella creazione di modelli di dati relazionali e sogni di scrivere SQL. In tal caso, questa risposta è totalmente sbagliata. Ma in generale anche i database più agili sono piattaforme applicative terribili e vengono inclusi nei sistemi solo perché sono specialisti in termini di durata e query indicizzate.

Buona fortuna!

    
risposta data 30.03.2018 - 17:26
fonte

Leggi altre domande sui tag