要知道,我们对 SOA 概念的理解其实是在不断的变化。
SOA(Service Oriented Architecture,服务导向架构)
从最初的 SOA 概念来说,SOA 主要为了解决一个大系统中不同子系统的相互操作性(interopearability),即为了实现这个大系统,我们希望能够复用已经存在或者说已经开发好的小系统(它们可能基于不同的编程语言,甚至运行在不同的操作系统下)。因此,这也可以描述为系统的集成(integration)问题。
因此,在那时候,我们有了 ESB (Enterprise Service Bus,企业服务总线)、WSDL、BPEL 和 SOAP 等等这些概念。它们都是为了解决系统的集成问题而诞生的。
企业服务总线(Enterprise Service Bus,ESB)
**企业服务总线(Enterprise Service Bus,ESB)**的概念是从服务导向架构(Service Oriented Architecture, SOA)发展而来。SOA描述了一种IT基础设施的应用集成模型;其中的软构件集是以一种定义清晰的层次化结构来相互耦合。一个ESB是一个预先组装的SOA实现,它包含了实现SOA分层目标所必需的基础功能部件。
在企业计算领域,企业服务总线是指由中间件基础设施产品技术实现的、 通过事件驱动和基于XML消息引擎,为更复杂的面向服务的架构提供的软件架构的构造物。企业服务总线通常在企业消息系统上提供一个抽象层,使得集成架构师能够不用编码而是利用消息的价值完成集成工作。
需要明确的是,企业服务总线本质上解决的是一个大系统的集成问题,或者说这个大系统中不同子系统之间相互依赖的问题。
场景
Background
假设一下你通过银行前端的应用登入银行,会发生什么呢?
- 会显示你的名字
- 会显示你的账号余额
- 会展示你的信用卡和借记卡
- 会列出你的共同基金
- 会列出一些你可能感兴趣的,预先被计算好的,有吸引力收益的借贷产品
现在,很可能所有这些模块都来自于不同的系统和应用,通过各种接口把数据展示出来
- 是来自在linux和Oracle的CRM系统
- 是来自z/OS大型机的COBOL系统
- 据说是来自大型机,但是他们的嘴巴很紧,不肯告诉你任何事情,只提供CSV文件。
- 来自跑在Windows的混合着PHP和Ruby
- 来自Postgresql,Python和Java,跑在Linux和Solaris的
在下图,每条不同宽度或者样式的线表示了app之间的调用
如果你觉得上面这种情况你还可以勉强维护,那下面这种情况呢?
你可以处理400个吗?2000个怎么样?每个应用都有自己独特的生态系统,都需要用10个物理服务器或者设备跑在上面。所以,就好比有2万个移动的群体散落在大陆上,并且有着各自的技术的或者文化的边界。 所有这些群体彼此之间需要不断的,持续的交换信息,聊天,一刻也停不下来。
对这种情况,有个很好的名字,叫一团糟。
...