对比研究:微服务流量网关 vs 企业服务总线ESB
在《服务网格:从Sidecar到Cluster》[1]一文中,介绍了基于网关集群的服务网格方案。
有读者反馈:在传统企业架构中有一个东西叫ESB(企业服务总线),也是集中式的,被大家诟病。基于Cluster的服务网格方案中所使用的微服务流量网关也是集中式的,会不会和ESB有类似的问题?
本文将说明,微服务流量网关在设计理念上和ESB存在本质的差异,并不存在ESB的复杂性高、可扩展性差、升级难度高等问题。
1. 什么是ESB
在《什么是ESB(企业服务总线)》[2]中,关于ESB做了非常好的说明:
企业服务总线(ESB)是一种软件架构模式,支持不同应用程序之间的实时数据交换。大型组织有多个应用程序,这些应用程序使用不同的数据模型、协议和安全限制来执行各种功能。ESB 通过执行数据转换、协议转换、消息路由等操作,简化了应用程序集成。应用程序将相关数据传递给 ESB,然后 ESB 将数据转换并转发给需要它的其他应用程序。
ESB曾经在金融机构得到普遍的使用。ESB具有以下优势[2]:
改善了应用程序集成
ESB 为企业应用程序集成提供了一个中央平台。组织可以无缝集成所有类型的系统和应用程序,无论其底层技术或协议如何。这使组织可以更轻松地维护、管理和扩展其应用程序。
提高了开发人员效率
开发人员使用 ESB 提供的预构建通信服务更快地构建应用程序。团队为总使用量分担基础设施成本并预置服务器。它们降低了管理费用和运营成本,同时提高了整体效率。ESB 还可以缩短上市时间并降低开发成本。
提高了可见性和控制力
借助 ESB,组织可以监控不同应用程序之间的数据和服务流,并快速识别和解决可能出现的任何问题。这有助于组织确保其应用程序可用、可靠和安全。
2. ESB有什么问题
对于主流的金融机构来说,已经在逐步放弃使用ESB。ESB局限性体现在以下几方面[2][3]:
复杂性高
实施和维护 ESB 需要专业的技术知识,因此复杂且昂贵。供应商锁定使得切换到其他 ESB 解决方案变得困难,并限制了数据集成的选项。由于只有 ESB 的中央管理团队可以集成新的企业应用程序,因此团队会经历漫长的等待时间。
可扩展性差
由于 ESB 软件增加了抽象和处理层,因此会在通信中引入额外的延迟。随着端点和通信服务映射数量的增加,ESB 将成为瓶颈并影响性能。为 ESB 服务器实现高可用性和灾难恢复的成本也随之增加。
升级难度高
对 ESB 集成进行增强可能会导致其他连接组件不稳定,并且需要在更新之前进行大量测试。为 ESB 项目升级提供资金需要跨团队协作,这可能具有挑战性。
3. 对ESB设计的反思
ESB的设计优点
和服务网格类似,ESB也实现了业务和底层通信机制的解耦。开发人员只需要关心业务逻辑,这明显提升了业务的研发效率。
ESB的设计失误
ESB的失败,来源于3个明显的设计失误:
(1) 通信协议支持过于复杂
在ESB中,对于各种协议都要支持。而且ESB还要支持各种协议之间的转换。
(2) 功能过于复杂
所有业务所需要的通信功能都要集成到ESB。
(3)维护大量状态
ESB支持持久性状态、异步通信和事件机制,这些能力的支持需要在ESB中维护大量状态。
以上3个设计失误是造成ESB复杂性高、可扩展性差、升级难度高的根本原因。
4. 微服务流量网关和业务网关的分离

图1 基于Cluster的服务网格:流量网关和业务网关分离
在《服务网格:从Sidecar到Cluster》[1]一文中,介绍了基于Cluster(网关集群)的服务网格方案。如上图所示,流量网关和内网DNS共同构成了微服务流量转发的基础设施。
在具体实践中,一个非常重要的原则是:一定要将流量网关和业务网关分离。
-
流量网关支持所有业务,负责全局性的流量转发。流量网关只支持通用的功能(包括路由转发、安全、可观测等)。
-
业务网关是针对某个具体业务的,只支持业务特有的定制功能。多个业务之间,业务网关独立实现、独立部署。如果业务没有特殊的需要,也可以不使用业务网关,只使用流量网关。
这种由流量网关和业务网关所形成的两层架构,对于保证系统的可维护性非常重要。在这个架构中,既具备流量网关支持通用流量管理功能的统一集中管理,又具备业务网关支持各业务定制流量管理功能的灵活实施。
2024年曾经有观点提出应该将流量网关和业务网关统一起来,构建全能型网关[4]。从我们的实践经验来看,将两种网关统一的思路是错误的,会造成流量网关的功能过于复杂,从而造成流量网关出现和ESB类似的可扩展性差和升级难度高的问题。
5. 微服务流量网关和ESB的对比

表1 微服务流量网关和ESB对比
上表将微服务流量网关和ESB的设计理念和系统效果进行了对比。
针对在第3部分中所提到的ESB设计失误,微服务流量网关的设计理念如下:
(1) 在协议支持方面:仅支持HTTP协议,并且不支持各种协议间的转换
(2)在功能支持方面:仅支持通用功能,各业务定制的功能由业务网关支持(见第4部分中的说明)
(3)在系统状态方面:流量网关为无状态设计
基于以上3个基础的设计理念,微服务流量网关获得了复杂度低、可扩展性好、升级难度低的效果。这些优势在长期大规模的使用中得到了验证[5]。
6. 总结
本文对于企业服务总线ESB的设计思想进行了反思,并在此基础上对微服务流量网关和ESB的设计理念进行了对比。虽然表面上看微服务流量网关和ESB类似,也是集中式的基础设施,但在设计理念上微服务流量网关和ESB存在根本的差异。微服务流量网关仅支持HTTP协议、仅支持通用功能、无状态的设计理念,使微服务流量网关获得了复杂度低、可扩展性好、升级难度低的效果。
参考文献
[1] 服务网格:从Sidecar到Cluster
,https://mp.weixin.qq.com/s/AXv-VqpRO3BUthTigL7h3w
[2] 什么是ESB(企业服务总线), https://aws.amazon.com/cn/what-is/enterprise-service-bus/
[3] The fate of the ESB,https://developer.ibm.com/articles/cl-lightweight-integration-1/
[4] 多层网关统一成趋势,如何构建全能型网关,https://higress.cn/blog/higress-gvr7dx_awbbpb_dxp91huk34ts4nik/
[5] 借助BFE,招商银行提高了应用可用性和运营效率,https://mp.weixin.qq.com/s/4JFouMqu2e9fDDyGWsieCQ
作者简介
章淼,博士,1994年进入清华大学计算机科学与技术系学习,2004年获得博士学位,2004年至2006年在清华大学留校任教,在清华期间曾参与中国第一代核心路由器的研制工作。2012年起在百度工作超过十年,聚焦云网络基础架构的研发工作,是BFE开源项目的发起人。在百度期间积极推动软件工程能力提升,曾担任百度代码规范委员会主席,2021年10月被授予百度代码规范委员会荣誉主席。2022年出版《代码的艺术:用工程思维驱动软件开发》。2023年4月起担任瑛菲网络CEO,聚焦研发面向云和大模型场景的现代化流量管理平台。
更多推荐
所有评论(0)