最近由于需要在接触一堆概念,从SOA、ESB到EDA、CEP、事件流、规则引擎流程引擎等,有些混乱也有些似懂非懂。自我梳理之。
SOA
先引用一段百度百科的解释:“是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互。”
依靠的基础就是web service,提供一种方式将不同的功能单元结合起来。需要强调的就是SOA仅仅是一种架构思想,一种松耦合的思想,所有符合这种思想的实现都可称为SOA系统。
ESB
ESB则是目前SOA SCA原则的主要实现架构。bus的概念由broker发展而来,可以理解为将broker集中控制一切功能分割开来,交给bus中的不同组件(如,服务注册、服务查找、服务管理等)。
EDA
事件驱动的架构,大概可以概述为这样一个过程,事件产生者产生事件并发送到事件队列,感兴趣的事件消费者识别出事件后即为进行处理。这更符合现实世界中的发生,更适合实时的变化处理。是不是听起来有点熟悉?消息系统中的topic,pub/sub模式。有几天在纠结这所谓的架构和消息系统有什么差别,钻了牛角尖,其实这和SOA有点类似,这只是一种思想,至于具体实现则是不限制的。
EDA+SOA=EDSOA
具体实现常是将EDA与ESB结合。可以理解为,在ESB中扩展了一种消息传送方式,在request-response的基础上增加pub/sub topic模式。
CEP
有了事件的概念,就要逐步发展了。simple event processing --> event stream processing --> complex event processing。不同事件流中的简单事件可能就构成了复杂事件,对识别监测提出了更高的要求。实时的反应速度也是另一特点。
主要应用与金融和电信行业,或监控中。
这也是现有CEP engine的主要特征:实时,灵活,能处理复杂模式。
事件流引擎Esper, 其中EPL语言可以使用SQL-like的形式来定义并查询事件,依赖于内嵌规则引擎,依赖于规则实现部分优化并执行。
BPM & BAM
BPM一直是个抽象的存在,可以看做是一系列用于设计、定制、分析以及控制可操作业务流程的方法论、工具和技术的总和。如何与SOA系统相结合呢?BPM主要是介于SOA系统之上,通过组合SOA系统上挂载的服务来形成业务流程,比ESB更高一个层次。而BAM就是对BPM的监控,业务流程执行到哪一步,每一步的执行结果又是怎样。
现有BAM也应用到了事件流或CEP的思想。
BPM的主要实现依赖于流程引擎。
举例来说,
mule ESB作为一个企业服务总线,可以挂载不同的服务。它所需要的监控应该是针对不同的服务自身的运行状况,不涉及高层次被调用流程中的情况。
BPM工具则可在流程定义中调用mule中挂载的服务,它所需要的监控应该是针对流程实际运行的。
那么监控事件的相关性在未串联的状况能体现出来?还是必须依赖BPM流程的多次执行?
又困惑了。