2

我一直在研究实现 BAM 应用程序的工具和框架。基本要求将是:

  1. 与不同的应用程序接口以获取业务状态/活动。初始提要是 JMS 提供者、Web 服务、FTP 和 JMX。
  2. 将尽可能接近实时。
  3. 每天需要以 2000 条/秒的速度处理 20+ 百万条消息(通过 JMS 提供程序(如 activeMQ 或 WebsphereMQ)以 XML 形式发送的消息)。
  4. 违反 KPI 时生成警报(警告和关键级别)

其他要考虑的事情是我们的小公司有一个 Mulesoft EE 许可证,一个公司应用程序堆栈(osgi 与 Tomcat、ActiveMQ、Drools 等捆绑在一起)。

因此,在尝试 POC 之前,我仅从研究中考虑的初步草案方法类似于:

使用 Mule 作为 ESB 与各种应用程序集成,然后使用其 SEDA 服务处理事件并将其暂存到 Drools 引擎以处理与这些事件相关的规则。

我不太确定这个过程是否是这些工具被设计用来使用的方式,或者是否有更好更雄辩的方式来处理这个问题。还有一些其他悬而未决的问题:

  • 如何向用户显示事件和状态(警告、kpi 违规等)的聚合。GWT 集成?是否应该将事件放入内存数据库中进行查询和显示?
  • 就物理架构而言,我正在考虑在两台服务器上的集群 tomcat 实例中运行 mule,并且在同一台服务器上使用 drools 引擎?数据库(用于历史存储)在自己的服务器上。
  • 我不限于上面的工具,我也在看 Esper,Apache Camel
  • 这种方法是否矫枉过正?可以将更简单直接的 webapp 与 RDBMS 管理状态一起使用吗?我认为实时和事件数量要求会阻止这种情况。

任何帮助将不胜感激,以帮助我完成这里的初始策略,或者是否有人已经实施了具有类似要求的解决方案并愿意分享。谢谢!

4

1 回答 1

0

您可能需要考虑使用 NoSQL 数据库来存储事件数据,因为

  1. 大量数据
  2. 每秒写入事件所需的速度
  3. 您需要灵活的模型来捕获特定于 KPI 定义的事件数据中的不同属性,因为 KPI 基于您的应用程序数据模型。

如果您选择走这条路,那么我建议您使用像 Mongo DB 这样的面向文档的数据存储,因为

  1. 需要高效读取来计算已定义 KPI 的值。
  2. 需要非常丰富的数据表示,主要是用于捕获事件数据的分层表示。
  3. 您可以使用像 lucene 这样的二级索引机制来提高 DB 提供的开箱即用的读取性能。这些索引可以特定于基于 App 的数据模型定义的 KPI。

是的,您需要像 MQ 这样的异步事件处理机制。

我已经看到 IBM Websphere BAM 服务器使用 XML 表示其事件数据,并将它们存储在像 DB2 这样的关系数据库中。但我认为 NoSQL 会是更好的选择。

于 2012-03-23T03:31:19.410 回答