引用说明:原文来自于 http://www.ibm.com/developerworks/cn/webservices/1010_wanghq_eda/1010_wanghq_eda.html ,为了方便本人阅读,文本格式略有调整。
EDA/SOA/ESB 的实践摘要
事件驱动架构 (Event-Driven Architecture,EDA)
面向服务架构 (Service-Oriented Architecture, SOA) 是一种 IT 架构策略,其基于面向服务的概念之上
企业服务总线(Enterprise Service Bus, ESB)
消息中间件(Message Oriented Middleware, MOM)
下图是一个证券公司股票交易系统的简图:
图 1. 证券公司股票交易系统概略图
从上图我们可以看出,整个应用被分为很多子系统,各个子系统之间存在着大量的信息交互。而且大部分应用输入都需要经历一个比较长的生命周 期,比如说一个客户订单输入到系统后,会先后经历前台系统 (Front Office),中台系统 (Middle Office) 以及后台系统 (Back Office),而且每个系统内部又包括很多服务组件。除了系统层面的跨度外, 这个生命周期也体现在时间长度上。而且,如今所有的金融系统都追求 STP (Straight Through Processing) 的能力,主张尽可能少的人工干预,这样所有的服务组件都需要具备自触发的能力。
我们需要一步步考虑整个架构的实现途径。首先面临的就是一些基础架构的选择。
基础架构的选择
在这里我们需要回答一系列的问题:自己开发还是购买?开源的还是商业的?选择什么 Web Service 的基础平台?选择什么样的消息中间件(Message Oriented Middleware, MOM)?是否采用企业服务总线(Enterprise Service Bus, ESB)?这其中讨论的最多的就是是否以及如何使用 ESB。个人观点,ESB 是有价值的,仅当系统确实需要 ESB 的功能时。Accenture 首席技术官 Don Rippert 在他的一次早期访谈中提到发挥 SOA 的全部潜力大致需要以下 4 个步骤:
- 开始采用 SOA 架构,使用 XML 等标准的方式来使用应用程序接口
- 捕获一些业务过程,并将它们转化为 Web 服务
- 引入并全面使用企业服务总线
- 将业务过程执行语言(Business Process Execution Language, BPEL)集成进来,利用业务过程建模工具和 BPEL 可以创建不同的应用行为,而无需修改软件
为什么将 ESB 的使用放在第三个步骤呢,那我们需要从 ESB 的定义入手,来了解 ESB 究竟带给我们些什么。ESB 应该被理解为模式而不是产品,它应该至少具备以下这些功能:
- 服务的虚拟化,支持虚拟化通讯参与方之间的服务交互并对其进行管理。意思就是服务只需要关注完成自己的功能,不需要关心哪个服务调用它以及它需要调用哪个服务。
- 服务的转化、包装以及桥接
- 消息的传递、过滤以及路由
- 服务编制(Orchestration)
基础组件
在确定了系统的架构后,我们需要着手来实现它。经过这么多年的实践,人们也总结出一些基础的组件,这些组件对于事件驱动的面向服务架构来说是必不可少的,或者说经常被使用到的。
- Web 服务基础架构 (XML,SOAP,WSDL,UDDI 和 Quality of services)
- 企业服务总线(针对复杂应用)
- 消息中间件
- 监控体系
- 异常处理的讨论
- 配置和规则引擎
其中第一、二项大家讨论得最多,第三项也经常被提及。作为消息运转的基础,消息中间件(Message-Oriented Middleware,MOM)必须做到安全、可靠和快捷。市面上有很多很成熟的产品,比如 WebSphere MQ,Apache ActiveMQ 等。而且还有些针对特定行业的特色化产品,比如 WebSphere MQ Low Latency Messaging 是一款专门针对金融行业的中间件,用来满足高吞吐量、低延迟的业务需求。
成功部署SOA的七个步骤
第1步:尽职调查,做好你自己的功课
第2步:成立一个团队
第3步:制定现实的目标
第4步:有效地管理你的数据
第5步:自己创建还是购买SOA
第6步:循序渐进
第7步:保持跟踪