SOA----面向服务架构,实际上强调的是软件的一种架构,一种支撑软件运行的相对稳定的结构,表面含义如此,其实SOA是一种通过服务整合来解决系统集成的一种思想。不是具体的技术,本质上是一种策略、思想。
ESB----企业服务总线,像一根“聪明”的管道,用来连接各个“愚笨”的节点。为了集成不同系统,不同协议的服务,ESB做了消息的转换解释与路由等工作,让不同的服务互联互通。

SOA主要是基于request、response的消息通讯机制的。它的设计适合同步通讯,但是并不大适合异步的通信。 所以我们还需要EDA。

EDA使用的是publsih/subscibe的消息通讯模式,它适合异步的消息发布和消息订阅。它与SOA注重的是不同的方面。所以SOA和EDA是互补的关系。而不是取代的关系。
那么对于一个企业,它同时需要SOA的同步机制,也需要EDA的异步机制,应该如何做呢? 
这个时候我们就需要ESB了。
ESB是enterprise service bus,它通过服务总线的方式来提供上面说的SOA和EDA的同步和异步的功能。

ESB可以完成一些事情定义好的消息格式转换,消息protocol的转换等等。 
可以看为一个比较智能的总线,它专注于企业内部不同的应用程序的通讯。能把使用不同protocol和不同data 
format进行自动转换。它能提供request/response的同步消息通信机制,也能够提供publish/subscribe的异步消息通讯
模式。

一个事件驱动系统典型地由事件消费者和事件产生者组成。事件消费者向事件管理器订阅事件,事件产生者向事件管理器发布事件。当事件管理器从事件产生者那接收到一个事件时,事件管理把这个事件转送给相应的事件消费者。EDA事件驱动架构具有如下特点:

  • 并发执行
  • 事件触发/数据触发/时间规则触发
  • 实时/增量响应
  • 分布式事件系统处理

这里首先可以看到EDA的重点是事件驱动,是实时/增量的响应。而对于SOA本身服务的同步机制就可以实现服务的实时响应,为何还要引入EDA事件驱动架构的概念?这是必须要搞清楚的问题。对于SOA中的同步服务一般是关于到两个系统间,即A->ESB->B;但是很多时候实际的业务场景比这个复杂,即到达B还没有结束,B还需要去分发和通知消息和数据。即A->ESB->B->ESB->(C,D,E,F),在这种业务场景下如果简单的谈SOA的同步服务是无法解决该问题的。

因此EDA的实际应用场景是源系统->事件产生者->事件消费者,三者之间可能是多对1,然后1对多的机制。而对于1对多的处理正好和我们说的发布/订阅模式是类似的。即EDA仍然是一种异步模式,但是却可以实现实时响应和并发执行,这就是EDA最大的一个特点。

这里先再举一个了发布订阅的例子:

张三开了一个书报亭,卖《时事快递》这个杂志,这个杂志不是定期发行而是根据实际的时事和焦点发行。现在甲,乙,丙三人都喜欢看这个月刊,原来的方式可能是隔断时间(定期轮询机制)就去报刊亭看下,看是否有最新的杂志可以购买,所以很多时候都空跑。

而新的方式是三人都给张三留下联系地址,告诉老板只有有新的杂志你就安排人给我送过来(订阅),三人唯一要求就是要第一时间获取到该杂志,否则过期杂志无意义(实时性要求)。这个时候张三还得跟杂志社谈,他告诉杂志社出新期刊后一定要第一时间送到报刊亭(杂志社自己来说是很清楚是否产生了新期刊的)。

订阅过程完成后,杂志社将最新期刊送到报刊亭后返回(短周期事务,送到报刊亭事务结束)。报刊亭一看有三个人订阅了这个期刊(MQ消息队列),然后安排一个人逐个开始送期刊给甲,乙,丙三个人。这个时候三人收到期刊的时间有差异,但是基本可以保证期刊的实时性。或者老板安排了三个人同时送货(并行执行),保证三个人更快的收到杂志。

在送货的过程中,可能乙没有在家,这个时候报刊亭要暂时代存这本杂志,然后第二天接着送。(存储功能和异常重试功能)。杂志社只管送到报刊亭,而能否送到最终用户手里面是报刊亭的责任。

通过上面的例子,可以看到不同的场景和角色如下:

  • 杂志社:产生数据源的系统,往往是业务处理系统,如采购管理系统,合同管理系统。
  • 报刊亭:ESB总线,必须具备消息队列和临时性的数据存储,以支持逐个处理事件和支持重试。
  • 甲乙丙:事件的消费者。首先是订阅事件,然后等待新事件推送给自己。

上面这个例子是我们常见的EDA的实现机制,即通过Pub/Sub实现增量和实时的响应。在这个例子里面可以看到ESB必须要有消息队列,支持数据的临时存储。对于订阅信息也需要在ESB上面存储,而不应该放在源系统和目标系统。通过这种方式可以看到,源系统将新增数据推送到ESB即返回,不用等待 ESB事件发布完,因此大大缩短了事务周期,实现较好的解耦。通过ESB本身有消息队列,支持异常下的重试,保证不会丢失数据。

从这个例子可以看到SOA服务和EDA的集成,对于订阅可以直接封装为服务,通过调研服务进行订阅。为了保证订阅数据能够进入目标系统,目标系统还需要做数据的导入服务,由ESB调用导入服务完成数据的推送。ESB本身也需要一个导入服务,保证源系统的数据能够导入到ESB总线做临时存储。

通过上面的分析,我们再来理解下CEP复杂事件处理。

还是按上面的例子,甲乙丙希望他们的杂志报刊亭能够进行不同风格包装后再送,或者各人还需要搭配其它东西一起送(业务规则)。在这个基础上即转变到CEP。因此对于CEP的技术理解可以是EDA+规则引擎,即CEP完成三个重要的动作,首先是接收事件和实时检测变化(多种方式,可以被动也可以主动监听),然后是通过业务规则引擎对事件涉及的数据进行处理,最后是发布事件和处理的结果给消费者。

从这里可以看到业务规则和约束模型是CEP解决方案的核心,TIBCO BusinessEvents 采用类似于 Rapide 事件语言的模式。Rapide 语言是一种采用“事件-条件-行为”(ECA) 形式的、功能全面的事件和规则语言。ECA 规则是独立的单元,它由引擎根据状态变化进行正向推理

SOA, EDA, 和 ESB的更多相关文章

  1. 企业 SOA 设计(1)–ESB 设计

    最近为公司完成了一个 ESB 的设计.下面简要说明一下具体的设计方案.   企业 SOA 整体方案 在前一篇<SOA.ESB.NServiceBus.云计算 总结>中说到,SOA 是面向服 ...

  2. SOA 架构中的ESB是更好的应用于异构系统集成整合还是用于统一服务调用/基础服务实施

    一.讨论主题与观点 写一篇文章.发现一次自觉得有意思的SOA架构方面的讨论,源于昨天AgileEAS.NET SOA 平台群(113723486)里几个群友的一次关于ESB的一次讨论. 大家的讨论观点 ...

  3. 十一 SOA 与 ESB

    一 SOA 1. 定义: a) 一种充分利用开放标准,将软件资产展现为服务的结构. b) 提供软件资产标准的展现和交互途径 c) 在开发其他应用的时候,可以将独立的软件资产封装为一个一个的“积木”. ...

  4. ESB与SOA的关系

    ESB与SOA的关系 一.SOA和ESB一直是没有明确概念的两个缩略词 SOA----面向服务架构,实际上强调的是软件的一种架构,一种支撑软件运行的相对稳定的结构,表面含义如此,其实SOA是一种通过服 ...

  5. 微服务理论之六:ESB与SOA的关系

    一.SOA和ESB一直是没有明确概念的两个缩略词 SOA----面向服务架构,实际上强调的是软件的一种架构,一种支撑软件运行的相对稳定的结构,表面含义如此,其实SOA是一种通过服务整合来解决系统集成的 ...

  6. 企业 SOA 设计(2)–组件化产品开发平台

    上一篇<企业 SOA 设计(1)–ESB 设计>中,写到我们的 SOA 设计分为两个层面来进行:一个是系统间的 SOA 设计,主要通过 ESB 来完成:另一方面则是单个应用系统内部的 SO ...

  7. 几种ESB(企业服务总线)介绍

    ESB(Enterprise Service Bus,即企业服务总线)是传统中间件技术与XML.Web服务等技术结合的产物.ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素. 企业服务 ...

  8. SOA是什么

    一.SOA是什么   SOA的全称是Service-Oriented Architecture,面向服务架构.是一种架构,不是一种具体的开发技术.   要真正理解什么是SOA需要从软件开发的技术发展史 ...

  9. 朱晔的互联网架构实践心得S2E4:小议微服务的各种玩法(古典、SOA、传统、K8S、ServiceMesh)

    十几年前就有一些公司开始践行服务拆分以及SOA,六年前有了微服务的概念,于是大家开始思考SOA和微服务的关系和区别.最近三年Spring Cloud的大火把微服务的实践推到了高潮,而近两年K8S在容器 ...

随机推荐

  1. Zookeeper Java API调用

    引入zookeeper-3.4.11.jar public class ZooKeeperTest implements Watcher{ //public final static String z ...

  2. 菜鸟如何使用hanlp做分词的过程记录

    菜鸟如何使用hanlp做分词的过程记录 最近在学习hanlp的内容,准备在节后看看有没有时间整理一波hanlp分享下,应该还是会像之前分享DKHadoop一样的方式吧.把整个学习的过程中截图在配文字的 ...

  3. WINSCP传输文件自动赋予777权限

    WinSCP WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间安全的复制文件. 为了复制到Linux的文件具有777 ...

  4. Tomcat里面的APR配置问题研究

    这里,之所以研究这个问题,是因为我们的生产系统Linux环境下的tomcat日志里面,启动信息的地方有这么一个WARNING. INFO: The APR based Apache Tomcat Na ...

  5. ML: 降维算法-LDA

    判别分析(discriminant analysis)是一种分类技术.它通过一个已知类别的“训练样本”来建立判别准则,并通过预测变量来为未知类别的数据进行分类.判别分析的方法大体上有三类,即Fishe ...

  6. C# 调用Sql server 执行存储过程总是返回-1

    调用存储过程代码如下: 今天在写存储过程调用时遇到如下问题: int value = cmd.ExecuteNonQuery();//执行总是返回-1:且存储过程在sql 可视化执行窗口可正常执行-- ...

  7. Python 简说 list,tuple,dict,set

    python 是按缩进来识别代码块的 . 缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误. list  有序集合  访问不 ...

  8. 黄聪:多个wordpress网站(不同域名)共享用户数据的方法

    WordPress可以自定义用户数据表,这样多个wordpress网站就可以共享用户数据了,有时候这是非常方便的,这些Wordpress站点应该安装在同一个数据库下,数据表前缀各不相同.由于Wordp ...

  9. “国家重点实验室”完全名单_洹水泛舟_新浪博客 - Google Chrome

    “国家重点实验室”完全名单 单位名称(序号)   国家重点实验室名称  建设单位 中国科学院(73) 1   半导体超晶格国家重点实验室  中国科学院半导体研究所 2   应用光学国家重点实验室  中 ...

  10. Sqoop-1.4.6安装部署及详细使用介绍

    之所以选择Sqoop1是因为Sqoop2目前问题太多.无法正常使用,综合比较后选择Sqoop1. Sqoop1安装配置比较简单 一.安装部署 (1).下载安装包 下载地址:http://archive ...