内容目录
模式思考
事件驱动架构是一个实现起来相对复杂的模式,主要是由于它的异步分布式特性。当你实现这个模式时,你必须面对多种分布式架构问题,例如:远程调过程的可用性,缺乏响应性,和当事件失败时的重试逻辑。
首当其冲需要考虑的问题是当选择这种架构时,对于一个完整业务的事务原子性问题。因为事件处理器组件是高度解耦和分布式的,维护他们的业务事务单元是非常困难的。基于这个原因,当你的应用程序需要使用这个架构时,你必须持续思考那些事件可以独立执行,哪些事件不能独立执行以规划你的事件处理器。如果你发现你需要使用多个事件处理器来处理一个不应被分割的事务-可能你现在的应用业务不适合这个架构模式。
或许在事件驱动架构模式中,最困难的问题之一是怎么来创建,维护和管理事件处理器组件之间的联系。每个事件通常都和事件处理器关联(例如:传递到事件的数据的值和数据的格式)。使用这个模式最重要的是设定一个标准的数据格式(如:XML,JSON,Java Object等等),并且在刚开始的时候就需要建立版本策略。
模式分析
下表是该模式的一些分析
-
敏捷性
高
事件处理器特性是业务单一性,与其他事件处理器完全就,独立修改 -
易于开发
高
架构异步特性导致开发难度增加,而且需要更多的错误处理。 -
易测试性
低
测试该架构模式可能需要专门的测试客户端,或者生成事件的工具,另外架构异步特性也会导致测试的复杂性。 -
性能
高
执行解耦,与异步并发执行 -
可扩展性
高
事件驱动架构模式天生具有可扩展性:通过高度独立和解耦的事件处理器。每一个可以事件处理器独立扩展。 -
易部署性
高
由于事件处理器的解耦特性,所以易于部署,代理者拓扑比调度者拓扑更易于部署,主要是因为调度者组件与事件处理器松耦合关系,:对一个事件处理器的修改可能也需要对事件调度者进行修改,两者同时发布。