SOA之基于服务总线的设计

上文中,主要介绍了SOA的概念,什么叫做“服务”,“服务”应该具备哪些特性。本篇中,我将介绍SOA的一种很常见的设计实践--基于服务总线的设计。

基于服务总线的设计

基于总线的设计,借鉴了计算机内部硬件组成的设计思想(通过总线传输数据)。在分布式系统中,不同子系统之间需要实现相互通信和远程调用,比较直接的方式就是“点对点”的通信方式,但是这样会暴露出一些很明显的问题:系统之间紧密耦合、配置和引用混乱、服务调用关系错综复杂、难以统一管理、异构系统之间存在不兼容等。而基于总线的设计,正是为了解决上述问题。总线则作为中枢系统,提供统一的服务入口,并实现了服务统一管理、服务路由、协议转换、数据格式转换等功能。这样能够将不同系统有效地连接起来,并大大降低了连接数(每个子系统只需要和总线建立连接)和系统间连接拓扑的复杂度。如图所示:

 

基于服务总线的设计,往往需要ESB(Enterprise Service Bus,企业服务总线)产品来充当基础设施。ESB采用了“总线”这样一种模式来管理和简化应用之间的集成拓扑结构,以广为接受的开放标准为基础来支持应用之间在消息、事件和服务的级别上动态的互连互通。 ESB是一种在松散耦合的服务和应用之间标准的集成方式。

在其内部设计和实现中,通常会应用到一些经典的架构模式,例如:Broker模式、消息总线模式、管道过滤器模式、发布订阅模式等。这里,我们将重点介绍这几种核心的架构模式。

Broker模式

Broker可以看作是服务总线中的一部分,通常应用于同步调用的场景(调用服务后阻塞,等待远程服务响应完成后再返回结果)。Broker可以看作是代理、分发,意味着对服务的调用,可以直接通过Broker来完成。在软件架构设计中,向已经存在(引用或者调用)关系的两者中间加入“第三者”是一种常见的解耦方式,显然,Broker也不例外。如下图所示:

 

为了进一步加深读者对Broker模式的理解,这里通过举例来说明:

在现实生活中,我们需要租房子(可以看作是一种服务调用),可以通过几种途径来完成。第一,我们可以先在网上了解,然后跑到目标小区去询问和看房,最后再找房东签合同等;第二,也可以直接找附近的地产中介,说出我们的要求和预算,请中介直接帮我们搞定一切。很明显,第一种方式,需要自己对目标有足够的了解而且还要亲自去找房东签合同(依赖具体,可以看作是紧密耦合),而第二种方式,仅仅需要告知中介需要什么即可完成租房,甚至都不需要知道哪个小区有房子、房东到底是谁等这些信息(依赖抽象,并通过第三者来实现解耦)。当然,找中介虽然省事,也会产生额外的经济开销。同理,通过Broker来调用服务也可能会产生一定的开销。

 

消息总线模式

 

SOA系统有三种基础组件:消息总线、信息转换/处理引擎和存储库。一般来说,这些组件会集成到ESB中,而在这些基础组件中,消息总线是最重要的。消息总线主要应用于异步通信场景(投递消息后立刻返回结果,而不用等待远程系统返回执行成功),可以大大提升响应速度和系统吞吐量。当然,消息总线也同时支持同步通信模式。基于消息总线模式的设计中,消息中间件屏蔽了系统间底层通信的细节,是比较典型的(异步)松耦合的架构。

在企业中,随着业务的逐渐发展,各大系统之间的调用交互变得非常频繁,关系错综复杂。

想象如果有几十或者上百个系统(在保险、金融领域很常见),将变得难以维护。通过引入消息中间件,便能有效的解决这些问题。不同系统之间,只需要连接到消息总线,能保证成功投递/接收消息即可。对于消息投递者(生产者)而言,根本不用关心消息的接收者(消费者)到底有哪些,也不用关心消费者接收到消息之后该如何处理。对于接收者(消费者)而言,只需要关注与自己有关的消息,接收到消息后并做出相应的处理即可。如下图所示:

比较典型的应用场景:张三在CRM系统中录入了一条客户签约订单的信息并审核通过后,CRM系统会向消息总线投递一条消息(消息中包含必要信息,例如员工ID,订单编号,产品编号和交易金额等,而CRM系统不用关心有哪些系统会接受到该消息)。员工绩效奖金管理系统订阅了该消息主题,收到消息通知后开始处理(给张三执行加奖金操作),同时,进销存系统收到消息通知后也会即时地更新商品库存的数量。这样,便实现异构系统之间的松耦合、异步通信。当然,真实场景可能比这里更复杂,但是实现思路上都大同小异。

 

在理解了上述实例之后,有必要了解下Java EE中被广泛应用和实现的JMS(Java消息服务)。

JMS是一种关于消息的规范,业界流行的ActiveMQ则是实现了JMS规范的开源消息总线。

JMS支持两种模式:发布/订阅模式和队列模式(点对点模式)。其中,发布/订阅模式借鉴了现实生活中的出版社(发布图书)和读者(订阅图书),消息的消费者(读者)只需要订阅自己感兴趣的消息(图书)即可,消息生产者(出版社)生产(出版)了消费者(读者)感兴趣的新消息(新书)后,会通知消费者(读者)接受处理。在JMS发布/订阅模式中,通常以Topic(主题)来标识消息,是一对多的模式,意味着同一个主题可以同时被多个消费者来订阅和消费。而在JMS 队列模型中,通常以Queue name来标识消息,是一对一的模型,意味着同一条消息只能被一个消费者接收并消费(且只能被消费一次)。在生产者和消费者都是集群的环境中,通常需要将这两种模式结合起来使用,情况会复杂很多,而且需要考虑容错性、负载均衡、消息一致性、消息优先级等复杂的问题。

业界主流的消息总线(消息中间件)产品,普遍支持消息过滤、自动重试、分布式事务、持久化、消息优先级、消息回溯、(生产者/消费者/中间件自身)集群、故障转移等高级特性。

 

 

总结

 

基于总线架构的主要优势在于:

l  可扩展性

使用消息架构,可以在不影响现有应用的情况下增加或移除应用。

l  低复杂度

每个应用只需要和总线通信,只有1个连接点,降低了应用程序集成的复杂度。

l  灵活性

对于构成复杂处理的应用程序通信组来说,只需要改变配置和控制路由参数就能满足业务逻辑或者需求变更,而不需要更改服务本身。

l  松耦合

应用程序直接和消息总线通信,不依赖其它应用程序,因此可以替换和修改。

l  可扩展性

可以把多个应用程序附加到总线上,进行并发处理,达到负载均衡的目的。

 

基于总线的模型,可以面向同构和异构系统(跨平台)。当前主要应用于传统企业应用的整合与系统集成中(例如:电信、保险、金融等行业)。由于基于总线的模型是一种集中式的架构,总线自身容易形成性能瓶颈,而且在实现高可用和容错性方面的复杂度和成本相对较高。所以,该模式并不是很适合于高并发、高性能、高吞吐量的互联网应用。

 

注:关于消息总线(消息中间件)的知识点很多,在实际应用中还有很多更加深入和复杂的细节问题。由于篇幅问题,笔者就不做过多的细节介绍和展开,感兴趣的读者,可以自行去查阅相关资料或者参考开源产品,做深入的学习和研究。

ESB产品主要包括:开源Mule ESB、ServiceMix、JBoss ESB,商业的Oracle ESB、BEA AquaLogic ServiceBus,.NET领域的NService Bus、MassTransit等。

MQ产品主要包括:ActiveMQ、RabbiteMQ、ZeroMQ、RocketMQ、Kafka、MSMQ等。

时间: 2024-10-26 20:49:26

SOA之基于服务总线的设计的相关文章

企业服务总线ESB的概念及应用

 ESB全称为Enterprise Service Bus,即企业服务总线.它是传统中间件技术与XML.Web服务等技术结合的产物.ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素.ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信和整合.从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的

重磅!中移动牵头提出基于服务的架构 成为5G网络统一基础架构

在近期杭州结束的国际移动通信标准组织3GPP专业会议上,3GPP正式确认5G核心网采用中国移动牵头并联合26家公司提出的SBA架构(Service-based architecture基于服务的网络架构)作为统一基础架构,意味着5G网络真正走向开放化.服务化.软件化方向,有利于实现5G与垂直行业融合发展.5G网络采用SBA新型架构还是传统网络"点到点"的架构,是近半年来标准化讨论的热点.3GPP将SBA确定为5G网络唯一基础架构,是5G系统架构标准化立项以来的重要进展.基于服务的网络架

基于服务的企业集成模式轻松入门,第4部分:企业服务总线

引言 Web服务旨在处理大型企业中遇到的一些应用程序异构性问题.不过,Web服务本身并不能提供解决异构性问题的完整解决方案.特别是,它们不是为了处理服务使用者和服务提供者应用程序使用的传输协议之间不匹配的情形.与此不匹配情况相关的问题是接口不匹配的问题.此类不匹配情况通常是由于合并和收购的结果造成的.一种可能的解决方案是根据新的 Web服务重写这些应用程序,以消除这些不匹配的情况.但往往是没有足够的开发人员资源或者没有足够的时间来执行如此大量的任务. 在这种情况下,企业服务总线 (ESB) 为解

基于云计算的电子邮件安全服务系统的设计与实现

基于云计算的电子邮件安全服务系统的设计与实现 戴瑾  刘波  卞皓宇 目前电子邮件安全扫描软件正在被广泛使用,随着用户数量和系统流量的激增,传统的紧耦合同步处理IMHS系统整体效能.健壮性.可维护性.可扩充性上都存在着难以克服的问题.针对海量用户压力之下存在的系统瓶颈,确立了以"松耦合.异步.无状态"为设计原则,通过融合云计算及面向服务体系结构(SOA)技术,设计并实现了一个基于P2P协同的对等化电子邮件安全云服务系统.该系统支持服务过程动态协同,有效提高了资源使用效率和系统可伸缩性.

soa-公司打算使用企业服务总线SOA,现在有哪个比较好又容易上手的中间件?

问题描述 公司打算使用企业服务总线SOA,现在有哪个比较好又容易上手的中间件? 公司打算使用企业服务总线,现在有哪个比较好又容易上手的中间件? 解决方案 在另外一个贴中回答你了.如果你为了soa而soa,项目的结局必然悲惨. 曾经我们接手的一个案例,客户原来的开发商是i开头的某国际大公司,前后投入1000多万,完全炒作什么soa之类的概念,结果连最基本的功能都做不了,中间变更过合同.最后不了了之. 所以你一定要想好,你的需求是什么,脱离实际一切都是扯淡.

Internet 服务总线

  作者:Donald F. Ferguson.Dennis Pilarinos.John Shewchuk   摘要:Web应用程序是非常常见的应用程序模型,它们将变得越来越普遍.几乎所有大中型企业的应用程序都提供Web用户界面.在本文中,我们将使用术语"企业"表示大中型企业.软件供应商和集成商.桌面和客户端/服务器应用程序越来越多地使用浏览器作为UI引擎,并通过Web协议调用数据和服务. 软件.应用程序模型以及Web本身都在进行革命性变革.这场变革对计算机世界的影响与客户端/服务器

智能客户端-使用 NHibernate 和 Rhino 服务总线构建分布式应用程序

有很长一段时间,我的工作内容几乎都是 Web 应用程序.当我要构建一个智能客户端应用 程序时,起初我觉得非常困惑,不知该如何构建这样的应用程序.怎么处理数据访问?智能客 户端应用程序与服务器之间如何通信? 而且,我那时已经投入很多,拥有一些能够显著减少开发时间和成本的工具,而我真的希望 可以继续使用这些工具.我花了一段时间来深入考虑各种细节问题,在这期间,我一直在想如 何让 Web 应用程序更简单些呢,当然我需要先知道如何处理这样的应用程序. 智能客户端应用程序有利有弊.从有利的一面看,智能客户

构建SOA组合业务服务专题

从 2007 年年初开始,我们陆续地向您推出了"构建 SOA 组合业务服务"系 列文章.它通过一个银行业的例子十分全面地向您介绍了如何构建 SOA 组合业务服务以及相 关方方面面的知识.同时还涉及了很多 IBM 相关的产品,比如Websphere Process Server, WebSphere Integration Developer,WebSphere Portlet,Rational Application Developer 和 DB2 Universal Database

构建SOA组合业务服务,第7部分: 为组合业务服务提供多分租支持

引言 本系列之前的文章介绍了组合业务服务 (CBS) 的概念,并讨论了其需要的部 署环境的一些核心元素.本文将介绍多分租(即从共享的公共承载环境中为多个组织(客户 )提供服务的能力).另外还将介绍软件作为服务(Software-as-a-Service,SaaS)的网络 交付方法及可能会利用 SaaS 多分租的不同用户类型.我们将介绍在 SaaS 承载环境中支持 多分租的原则和技术实现.本文提供了使用 WebSphere Process Server 和 WebSphere Portal.虚拟门