SOA的背景
SOA 提出的背景是企业内部的 IT 系统重复建设且效率低下, 主要体现在:
- 企业各部门有独立的 IT 系统,比如人力资源系统、财务系统、销售系统 ,这些系统可能都涉及人员管理,各 IT 系统都需要重复开发人员管理的功能
- 随着业务的发展,复杂度越来越高,更多的流程和业务需要多个IT系统合作完成
- 各个独立的 IT 系统可能采购于不同的供应商,实现技术不同,企业自己也不太可能基于这些系统进行重构
SOA详解
为了应对传统 IT 系统存在的问题, SOA 提出了 三个关键概念
- 服务:所有业务功能都是一项服务,服务就意味着要对外提供开放的能力,当其他系统需要使用这项功能时,无须定制化开发,服务可大可小,可简单也可复杂
例如,人力资源管理可以是一项服务,包括人员基本 信息管理、请假管理、组织结构管理等功能;而人员基本信息管理也可以作为一项独立 的服务,组织结构管理也可以作为一项独立的服务 。 到底是划分为粗粒度的服务,还是 划分为细粒度的服务,需要根据企业的实际情况进行判断 - ESB:Enterprise Service Bus,中文翻译为“企业服务总线”。从名字就可以看出,ESB 参考了计算机总线的概念 。计算机中的总线将各个不同的设备连接在一起,ESB 将企业中各个不同的服务连接在一起。因为各个独立的服务是异构的,如果没有统一的标准,则各个异构系统对外提供的接口是各式各样的 。SOA使用ESB来屏蔽异构系统对外提供各种不同的接口方式,以此来达到服务间高效的互联互通
- 松糯合:松辑合的目的是减少各个服务间的依赖和互相影响 。因为采用SOA架构后,各个服务是相互独立运行的,甚至都不清楚某个服务到底有多少对其他服务的依赖。如果做不到松祸合,某个服务一升级,依赖它的其他服务全部故障,这样肯定是无法满足业务需求的,但实际上真正做到松辅合并没有那么容易,要做到完全后向兼容,是一项复杂的任务
典型的SOA架构
SOA 架构是比较高层级的架构设计理念,一般情况下我们可以说某个企业采用了 SOA 的 架构来构建 IT 系统,但不会说某个独立的系统采用了 SOA 架构
例如,某企业采用 SOA 架构, 将系统分为“人力资源管理服务”“考勤服务”“财务服务”,但人力资源管理服务本身不会再使 用 SOA 进行设计,也不会再重新使用独立的一套 ESB
SOA解决了传统IT系统重复建设和扩展效率低的问题,但其本身也引入了更多的复杂性,SOA 最广为人垢病的就是 ESB, ESB 需要实现与各种系统间的协议转换、数据转换、透明的动态路由等功能 。例如,下图中ESB将JSON转换为Java
下图中 ESB 将阻ST 协议转换为 RMI 和 AMQP 两个不同的协议
ESB虽然功能强大,但现实中的协议有很多种,如JMS、WS、HTTP、RPC 等,数据格式 也有很多种,如 XML、JSON 、二进制、HTML等 。ESB要完成这么多协议和数据格式的互相转换,工作量和复杂度都很大,而且这种转换是需要耗费大量计算性能的,当ESB承载的消息太多时,ESB本身会成为整个系统的性能瓶颈