事件驱动架构EDA中的组件


最简单技术架构是面向批处理和集中式单体系统;金融等行业,尤其​​是贸易和证券交易所等这些细分市场需要由实时信息驱动,EDA由此诞生,然后是物联网 (IoT)、社交、开源、PaaS/devops 和大数据等领域扩大了对EDA需求。

EDA概念
EDA 有时被称为消息系统。消息只是一个事件,反之亦然,事件成为消息。事件驱动系统的概念是它应该使所有感兴趣的事物都收到这些事件的通知,这些事件可以从了解它中受益。因此,最早的实时事件驱动系统提出了发布/订阅的概念。

发布/订阅是描述面向事件的消息传递的另一种方式。在发布/订阅范式中,有发布者和订阅者。这些是所有发布/订阅系统的共同特征。

  • 匿名性--发布者不需要知道他们所发布的信息的订阅者的任何情况,只需要知道他们有权接收该信息。同样,订阅者也不需要知道关于发布者的任何情况,只需要知道他们被认证为合法发布者。
  • 信息对所有订阅者都是相同的。发布/订阅系统的力量部分来自于这样一个事实,即每个订阅者都得到相同的消息。如果消息必须为每个订阅者定制,那就会给发布者带来很大的负担,并且当新的订阅者出现时需要进行修改。
  • 发现--发布/订阅系统应该支持一种机制,让发布者发现新的订阅者,而订阅者应该能够在信息的发布者出现时立即找到他们。
  • 自我描述的有效载荷(JSON或XML)。
  • 保证交付--作为订阅者,你需要知道,如果需要的话,你可以保证按照发布者发生的时间顺序收到所有信息(可靠性和安全性作为pub/sub的QoS)。
  • 低延迟/同步性--所有订阅者应尽可能在同一时间得到事件的通知。
  • 主题--你应该能够根据所需内容的助记词描述(队列或主题)来订阅和过滤信息。

这些概念被设计到第一批pub/sub系统中。这个范式的关键概念是消息和主题的单位,或者今天所说的主题或队列。

一旦消息在系统中飞舞,人们很快就发现,对其他应用程序来说,重用该事件是很有价值的。在股票交易大厅,一旦关于证券价格的信息被使用pub/sub广播,许多新的应用程序发现使用该信息是有用的,所以新的信息订阅者不断涌现出来。连环驱动系统的一个重要特点是,发布者或订阅者的负担不应该因为只有一个或一百万个而增加。

有时,新的订阅者需要经过润色的信息,比原始信息包含的信息更多,或者是相关信息的摘要。例如,消息可能是某人买了100美元的东西。然而,新的应用程序可能想知道今天所有购买的总和。一段时间后,我们发现了企业中各种应用所需的行为模式。

EIP、ESB、BPS和BAM
这些被称为企业集成模式(EIPs),所有基于消息的系统都开始采用调解技术来规范这些EIPs。
企业服务总线(ESB)由此诞生。

ESB是路由转发那些生命周期很短的消息,也就是命令和事件,这些都不是需要长期运行的,事件响应都是立即运行。

同时,人们意识到他们可以使用一个消息来触发一个长期运行的处理某些事件的业务流程。
我们建立了业务流程服务器(BPS)来整合事件和其他业务流程。

企业希望通过计算统计数据来监控其业务的健康状况,并通过查看消息流量来寻找问题的指标。
这些被称为业务活动监视器(BAM)。

随着时间的推移,许多这些工具的标准被开发出来,它们成为EDA中的标准组件。

消息代理(MB)
MB是一个提供pub/sub通信和事务性语义的组件。所描述的大多数组件不必支持真正的事务性语义,因为我们经常使用MB来提供这种功能。在一个典型的架构中,被认为是关键业务的消息被发送到一个MB,该MB存储消息并以可靠的、有保障的方式将其分配给相应的听众。如果一个组件在处理消息之前发生故障,MB将在组件重新启动后重新获取消息,或者将其传递给另一个可以处理它的类似服务器。

MB处理两种模式的消息流;这两种模式被称为主题和队列。

  1. 主题是为了传递给许多订阅者。订阅者表达他们对一个主题流的兴趣,然后按照适当的顺序发送独立的消息流。
  2. 队列只被发送到能够处理事务的若干处理者中的一个。在基于主题的协议中的所有订阅者都得到消息之前,消息不能被释放。在其中一个处理者确认处理该消息之前,消息不能被释放。

企业服务总线(ESB)
ESB是消息架构中的一个重要组成部分。ESB实现众所周知的企业集成模式:这些包括向多个接收者发送消息,用来自其他服务的额外信息增强消息,以及检测需要不同处理的特殊条件。
例如,低于一定数额的订单可能由一种类型的流程处理,而大于该数额的订单则由另一种类型的流程处理。
ESB应该非常善于可靠地处理大量的消息:每天数十亿的消息应该可以由一个服务器集群轻松处理。

一个ESB应该能够处理来自许多不同来源的数据事件,包括数据库、文件系统和传统的通信协议。因此,ESB是集成工作中的一个重要组成部分。

在物联网世界中,ESB可以指定基本逻辑,并为设备实现该逻辑。它不太适合复杂的事件序列,但对于简单的事件及其反应,ESB是一个理想的地方,可以把所有设备的逻辑放在一起。
ESB有一个适合非程序员的图形编辑器,可以很容易地把逻辑、设备和动作拖到一起。

业务流程服务器(BPS)
BPS组件提供了一个图形编辑器,用于设计和测试刺激事件的业务流程。这使得不是程序员的人也能设计业务流程并实施它们。它允许快速改变业务流程和跟踪业务流程。BPS服务器被设计用来处理回滚和改变业务流程,而交易是在一个流程的中间。BPS服务器应该能够同时处理数千甚至数百万个待完成的长期运行的有状态进程。

规则引擎
规则引擎是一种工具,可以处理分层的重叠规则集,以计算出业务问题的正确答案。规则引擎对于指定复杂的定价方案或复杂的PaaS扩展规则,以及基于复杂标准的权利决定非常有用,在这种情况下,通常你可能会说以一种方式做事,但背景可能会改变所做的选择。由于规则引擎通常用于需要快速决定如何处理交易的情况,它们需要快速。它们还需要有一个直观和简单的用户界面,以便业务人员能够构建规则,并在规则实施之前看到交易将如何处理,以防规则的组合产生意外的结果。

一个规则引擎可以帮助指定围绕物联网设备可能存在的复杂规则。例如,你可能想把你的家正常加热到72度,除非今天晚些时候会很热,或者现在能源处于需求高峰期,或者你在度假。

数据服务服务器(DSS)
DSS用于围绕数据库或其他持久性(静态数据)数据存储机制创建服务,如无SQL数据库或甚至各种类型的文件系统。在一个多层架构中,应用程序不直接与数据库表对话。相反,我们定义了具有直接业务相关性的表或表的更高层次的抽象。DSS提供了一个抽象化底层数据的服务。DSS可以提供与数据源或底层数据存储机制架构变化的隔离。

综合应用

  • 长时间运行的流程使用 BPS:通过可视化流程管理器改变处理消息的方式,包括人工审批流程。
  • 较短的流程最好在 MB 中处理
  • 在 ESB 中处理无状态事务
  • 在DSS数据服务中处理有状态事务。
  • 快速变化的数据在规则引擎中处理:规则引擎可以让在线商店根据折扣代码、客户体验、总价、数量或任何因素组合等一系列复杂因素轻松对商品进行定价,并在不经通知的情况下立即更改这些规则重新编码。
  • 实时事件在大数据处理数据工程 技术中处理。

​​​​​​​互联业务、互联消费者、移动性和物联网不断变化的市场推动了 EDA 架构的重要性比以往任何时候都更高。因此,EDA 演变为整合 API 管理、物联网和移动性也将推动下一代 SOA。EDA 提供了与未来应用程序集成的高度敏捷性和可扩展性,同时在事件发生时提供实时分析和监控,确保今天的解决方案也能满足长期需求。