警报系统架构


10

我想创建一个系统,处理来自各种程序的警报消息,并可以通过电子邮件将这些警报处理给顺风顺水的消费者。所有这些都将包含在一个内部网络中。

我想我希望基本架构看起来像这样:在此处输入图片说明

我目前主要关心的是“消息处理程序”位,这就是我的“ API排序”。我希望该系统的所有组件将数据发送到API,该API处理所有对数据库的写入。我认为这种方法比较容易,因为它简化了安全性,并允许我将许多更复杂的数据库查询包含在一个程序中。

令人担心的是,我希望这与语言无关,这意味着任何代码都应能够将消息发送到我的处理程序,由它来解释它们。我希望通过JSON平面文件-或通过对该程序的REST调用(为下游应用程序提供灵活性)来做到这一点。

我的问题是

我应该烦恼消息处理程序吗?或者它会增加简单性,使其仅允许直接数据库访问下游应用程序以及其他两个组件(管理控制台和警报管理器)?

这样,他们就可以插入想要的任何警报-只要将INSERT插入数据库表中即可。

我不是专业的软件设计师,所以请原谅-我只想在业余时间做一个项目。

Answers:


4

您是否研究过AMQP(高级消息队列协议:https//www.rabbitmq.com/protocol.html)?

我认为,RabbitMQ是用于处理此类问题的出色工具(还有其他工具,MSMQ,Azure / AWS服务等)。您不仅可以获得一种与语言无关的消息处理程序(简单的“将消息发送到带有json数据的消息服务器”),而且还分离了下游消息处理并使其完全隔离。运行消息服务,该消息服务处理来自所需队列的传入消息并吐出通知。

我非常喜欢使用AMQP的原因之一是,您开始时就像现在有了一些自制解决方案一样,但是意识到一段时间之后,您需要根据类型,需要处理的对象等来稍有不同地处理消息。 ,因此您最终还是要构建自己的AMQP实现。

如果一封邮件需要发送给5个不同的收件人,该怎么办?如果您有一条消息应该在多个处理器之间轮换该怎么办(请考虑长时间运行的任务,并具有X个并发处理器,您可以在其中循环处理特定类型的消息)。如果该消息应该发给一个人,但如果该消息不可用/在线,则应该发给另一个人怎么办?AMQP已经很好地处理了所有这些问题(很好!),它具有很好的分类,队列,通道,持久的持久性以及各种功能。

这是它能够处理的情形的基本概况(注意,这是不特定于RabbitMQ的:它是一个AMQP的事情,但发生的RabbitMQ解释得很好) - https://www.rabbitmq.com/getstarted.html


我以前见过为其他软件实现过RabbitMQ-似乎总是很有趣(即使不太复杂)。我来看看吧!我想我一开始就回避了这一点,因为我想为数据发送者提供很大的灵活性。因此,如果很难在现有的Powershell或Javascript上实现REST调用,或者天堂禁止使用VB6应用程序,则通常可以很容易地将它们输出到平面文件。但是,能够替换很多消息处理功能肯定会节省时间和精力!
Christopher

2
刚开始使用RabbitMQ时,我有点吓到了我,但是经过一个周末的学习,这真是太好了,这真的非常非常好,现在我了解了我要看的东西,这真的很简单
jleach

我喜欢AMQP的想法,但是RabbitMQ处理每种语言的客户端API的方式无法达到使用与语言无关的协议的全部目的。如果我的客户运行的语言没有编写支持的API,该怎么办?其中一些功能确实很不错...但是当我需要做的只是从A点到B点收到1条消息而中间没有任何内容时,矫kill过正。
Christopher

我当时想在上面放一个快速休息的API,该API可以解决您的不可知论的问题,但是我同意,如果您永远不需要AMQP提供的任何功能,那就太过分了(如果我狂野地道歉,鹅追上它...)
jleach'Apr

是的-一个覆盖它的快速REST API可以使用..但是我最好还是自己制作一个REST API。无需道歉-这是一项伟大的技术,学习对于进步至关重要:)(如果不是现在的话)-我相信它将来会派上用场。
Christopher

3

框架很好的问题!

因此,所有架构决策都需要权衡。如果您对折衷的讨论感到好奇,则可以朝这个方向编辑您的问题。取而代之的是,由于该问题仅要求提供职位,因此我将支持MessageHandler来进行争论。我将进一步建议不要包括数据库-至少不包括SQL数据库,至少不要启动。只需让MessageHandler将JSON保存到文件系统,说一个每小时接收目录的警报(当然,取决于音量),并让Alert Manager查询时的API遍历该目录的最后两个目录即可。发出警报以决定要发送的电子邮件(当然取决于优先级)。

在这个问题上有很多东西需要解决,而在早期阶段将数据库保留在图片之外会消除很多附带的噪音和不必要的问题解决方法。当然,也许您对创建关系数据模型有浓厚的兴趣,并且梦想编写SQL。在这种情况下,这个答案是完全错误的。但是总的来说,即使是最敏捷的数据库也是可怕的应用程序平台,它们只被包含在系统中,因为它们是持久性和索引查询方面的专家。

祝好运!


1
我喜欢能够控制电子邮件组,成员以及使用关系数据库的各种其他功能的能力。数据库设计确实是我在项目中开始的工作,因此我什至从未想到要删除它。谢谢您的投入和观点!!
Christopher

我就知道!:)了解您真正想要摆脱的事物是最重要的。干杯!
乔纳·本顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.