首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复杂通知系统

复杂通知系统
EN

Software Engineering用户
提问于 2017-09-29 18:21:55
回答 2查看 773关注 0票数 2

我们正在构建一个web应用程序来监控工业设施,我们需要添加一个模块,当系统中发生某些事情时,我们需要向用户发出通知。

我们从设备机器获得数据(大量数据)为10分钟数据序列(每10分钟a值,如机器的组件温度、输出性能、功耗等),并将数据存储在cassandra DB中。所使用的框架是Django。

这些是我们需要通知的事情(当事件发生时,我们需要发出通知,所以没有批处理):

  • 当一台机器的理论性能低于其理论性能的90%,连续60分钟(即6行10分钟的数据)时,如果机器已被手动停止,则不是这样。
  • 当整个设备在95%以下时,理论性能连续两个小时。
  • 当机器被手动停止时。
  • 当月产量达到预期的50%时。
  • 等等

通知的细节(百分比、时间跨度等)应该是每个用户可配置的。

我们正在寻找一个通用的可定位的设计,因为未来可用通知的列表将会增加。有人处理过类似的问题吗?你是怎么处理的?

我只是在寻找关于如何设计这个的一般提示,这就是为什么我没有给出太多的细节。

更新

我在寻求关于如何设计通用系统的帮助。问题是如何定义每个通知的规则,因为我必须关注数据的演变(通知不是定义为“发生了什么事情”,而是定义为“某件事情连续发生了X次”)。

主要问题是:

  • 我应该如何存储通知的规则?
  • 如何检查是否必须向用户发送新通知?每次插入数据时查询数据库,还是有更优雅的方法?我应该保持每一种可能的状态,直到它成为一个实际的通知,或这是一个过头?

请不要关注用户设置,或者如果事件应该通过电子邮件通知或推送到移动应用程序,这并不重要:-)

EN

回答 2

Software Engineering用户

发布于 2017-09-29 21:00:57

所以,我要说的是,在没有进行足够的研究的情况下,你似乎已经走上了“让我们从头开始”的道路。你想要的那种系统存在于很多地方,其中许多地方甚至不需要你付费。

对于这种问题,我最喜欢的工具是弹性堆。它具有高度的灵活性和高度的可伸缩性,可以接收大量具有低延迟的事件,解析它们并对它们进行索引。有各种类型的输出可以配置为包括通知。

甚至还有一个他们发布了关于根据复杂事件执行警报和通知的特定文章。

票数 1
EN

Software Engineering用户

发布于 2017-09-29 21:53:07

我要做以下几点:

  • 为规则创建一种语言。这并不意味着您必须使用解析器创建基于文本的语言。这意味着您需要考虑组成规则所需的操作符(它们是复合对象),以及终端(表达式的叶节点),并创建包含语言每个组件的对象的库。现在你可以写规则了。
  • 规则需要一个计算或执行方法,该方法遍历对象树并确定通知是否正确。最简单的方法是返回布尔值的方法。
  • 规则需要使用您喜欢的技术持久化。我会使用二进制持久化,但您可以使用您喜欢的任何东西。
  • 我会将规则保存在服务器进程的内存中。我也会尽可能地将较小的输入数据(通过上下文对象提供给规则评估器的数据)保存在内存中。
  • 如果你有很多实时数据,我想你已经考虑过性能了。如果不是,请考虑文件系统中的简单二进制流;无论您做什么,都不要在数据库中的每一个增量数据中执行相当于一行的操作。
  • 传入的数据可能是只读的,这样您就可以创建每块数据的新文件,并定期使用垃圾收集器清除它们。
  • 如果您担心每次获得新数据时计算所有规则的开销,则可以在规则的根节点保留每个规则使用的输入数据列表,在规则创建后计算一次。使用它来确定哪些规则受影响。

当然,有很多优化策略,在优化任何东西之前都要测量。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/358345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档