知识卡片
SOA是企业级架构理念而非单系统架构,及ESB的复杂性代价
内容
[[SOA的诞生背景,及三个关键概念:服务、ESB与松耦合]]是一种比较高层级的架构设计理念,通常说的是”某个企业采用SOA架构来构建IT系统”,而不会说”某个独立系统采用SOA架构”——比如某企业用SOA把系统拆成人力资源管理服务、考勤服务、财务服务,但人力资源管理服务本身通常不会再按SOA的思路继续往下拆更多服务、也不会再单独部署一套ESB,因为这些系统很多本身就是外部采购的,如果要把采购来的人力资源系统再重构成多个子服务、额外部署一套独立ESB,成本很高但收益有限。SOA确实解决了传统企业IT系统重复建设、协作效率低的问题,但它自己也引入了不小的复杂性,最受诟病的就是ESB——ESB要负责在各种异构系统间做协议转换(比如把JSON转成Java对象、把REST协议转成RMI和AMQP两种不同协议)、数据转换、透明动态路由等工作。现实中协议种类繁多(JMS、WS、HTTP、RPC等),数据格式也是五花八门(XML、JSON、二进制、HTML等),ESB要撑起这么多协议和格式之间的互相转换,本身工作量和实现复杂度都很大,而且这种转换要消耗大量计算资源,一旦ESB承载的消息量过大,它自身就会变成整个系统的性能瓶颈。不过ESB这种设计其实是无奈之举——回想SOA的诞生背景就能理解,企业在引入SOA时,各种异构IT系统往往已经运行了很多年,彻底重写或者按统一标准改造这些老系统的成本极其高昂,只能依靠ESB这层适配来兼容已经存在的各种异构系统,而不是从根本上消除异构性。
参考来源
- 位置:《从零开始学架构》第33讲《传统的可扩展架构模式:分层架构和SOA》"SOA"(源文件:_epub-src/OEBPS/text00003.html)
- 结论依据:原文说明"SOA 架构是比较高层级的架构设计理念,一般情况下我们可以说某个企业采用了 SOA 的架构来构建 IT 系统,但不会说某个独立的系统采用了 SOA 架构",并指出"SOA 最广为人诟病的就是 ESB……当 ESB 承载的消息太多时,ESB 本身会成为整个系统的性能瓶颈……SOA 的 ESB 设计也是无奈之举……只能通过 ESB 方式去适配已经存在的各种异构系统",直接支撑本卡片结论。
- 原始内容:SOA 架构是比较高层级的架构设计理念……SOA 最广为人诟病的就是 ESB……当 ESB 承载的消息太多时,ESB 本身会成为整个系统的性能瓶颈……只能通过 ESB 方式去适配已经存在的各种异构系统。