web-dev-qa-db-fra.com

Architecture du système d'alerte

Je souhaite créer un système qui gère des messages alertant de divers programmes et peut traiter ces alertes pour réduire les consommateurs de vent par courrier électronique. Cela seraient tous contenus sur un réseau interne.

Je pense que je veux que l'architecture de base regarde quelque chose comme ceci: -enter image description here

La principale préoccupation que j'ai actuellement est le "gestionnaire de messages", qui sera ce qui sera mon "type-d'API". Je souhaite que tous les composants de ce système envoient des données à l'API, qui gère tous les écrit à la base de données. Je pense que cette approche est plus facile, car elle simplifie la sécurité et me permet de contenir de nombreuses requêtes de DB plus compliquées dans un seul programme.

La préoccupation est que je veux que cela soit linguistique agnostique - ce qui signifie que tout code devrait être en mesure d'envoyer des messages à mon gestionnaire - qui les interpréteront. J'espère faire ceci via des fichiers plats JSON - ou via REST Appels vers le programme (donnant une flexibilité aux applications Down Stream).

Ma question est-

Devrais-je m'embêter avec le gestionnaire de messages - ou ajouterait-il une simplicité pour simplement permettre l'accès direct de la base de données aux applications de bas de course, ainsi que les deux autres composants (console de gestion et gestionnaire d'alerte)?

De cette façon, ils peuvent insérer toute alerte qu'ils souhaiteraient - tant que l'insertion dans la table/s de DB est valide.

Je ne suis pas un concepteur de logiciel par échange alors excusez-moi - je veux juste qu'un projet fasse dans mon temps libre.

10
Christopher

Avez-vous examiné AMQP (Protocole avancé Message Queuing: https://www.rabbitmq.com/protocol.html )?

Rabbitmq est un outil impressionnant pour quelque chose comme ça, je pense (il y a aussi d'autres aussi, MSMQ, Azure/AWS Services, etc.). Non seulement vous obtenez un gestionnaire de messages langage agnostique (simple "Envoyer le message au serveur de messages W/JSON Data"), vous détachez le traitement du message en aval et le rendez bien isolé. Exécutez un service de messagerie qui traite des messages entrants de la ou des file d'attente dont vous avez besoin et de cracher vos notifications.

L'une des raisons pour lesquelles j'aime vraiment utiliser AMQP est que vous commencez comme si vous vous trouvez maintenant avec une solution à la maison, mais vous réalisez une fois que vous devez gérer des messages légèrement différemment en fonction du type, qui doit aller à, etc. Donc, vous finissez de manière essentiellement à construire votre propre implémentation AMQP quand même.

Que faites-vous si un message doit aller à 5 destinataires différents? Et si vous avez un message qui doit être tourné dans un certain nombre de processeurs (pensez à des tâches longues et ayant un nombre x nombre de processeurs simultanés, où vous pouvez rond-point des messages Robin d'un type spécifique). Et si le message devrait aller à une seule personne, mais s'ils ne sont pas disponibles/en ligne, cela devrait aller à un autre? L'AMQP gère tout cela (assez joliment!) Déjà, avec une très belle catégorisation, files d'attente, canaux, persistance durable, toutes sortes de fonctionnalités.

Voici un aperçu de base des scénarios qu'il peut gérer (noter que cela n'est pas spécifique à la rabbbitmq: c'est une chose AMQP, mais la Rabbitmq arrive à l'expliquer bien) https://www.rabbitmq.com/getstarted.html

4
jleach

Question très bien encadrée!

Donc, toutes les décisions architecturales impliquent des compromis. Si vous êtes curieux pour une discussion sur les compromis, modifiez peut-être votre question dans cette direction. Au lieu de cela, puisque la question demande simplement une position, je prendrai le côté de discuter en faveur du MessageHandler. Je vais aller plus loin pour suggérer qu'il n'incluait pas une base de données - au moins pas une base de données SQL, du moins de ne pas commencer. Ayez juste le message Messagehandler Enregistrer JSON au système de fichiers, dites d'alertes de répertoire-par heure (selon le volume, bien sûr), et demandez à l'API lorsque vous interrogez par le responsable de l'alerte, il suffit de traverser les 2 derniers répertoires de Alertes pour décider des courriels à livrer (en fonction de la priorité, bien sûr).

Il y a une tonne de bonnes choses à mâcher dans ce problème et à garder une base de données hors de la photo à ses débuts éliminera beaucoup de bruit accidentel et de résolution inutile de problèmes. Bien sûr, vous avez peut-être un amour caché de créer des modèles de données relationnels et de rêver d'écrire SQL. Dans ce cas, cette réponse est totalement fausse. Mais de manière générale, même les bases de données les plus agiles sont des plates-formes d'application terribles et elles ne sont incluses que dans les systèmes, car ils sont des spécialistes de la durabilité et de la requête indexée.

Bonne chance!

3
Jonah Benton