知识卡片

微服务基础设施是把ESB的复杂度转移而非消除,及搭建的四层优先级

结构图卡

内容

大部分人关注微服务的”small”和”lightweight”,但真正决定微服务能否落地成功的,恰恰是最容易被忽视的”automated”——如果服务粒度划分不合理,团队遇到问题后自然会想办法拆服务或合服务来纠正;但如果”automated”相关的基础设施不健全,微服务就会变成一个焦油坑,让研发、测试、运维都陷进[[微服务陷阱四:缺乏自动化与服务治理时,”轻量级”最终演变成新的ESB]]描述的各种困境。完整的微服务基础设施体系看起来阵仗很大,很容易让人怀疑:”这么多基础设施,还好意思说自己’轻量级’?”——确实如此,微服务并没有真正减少复杂度,只是把原本集中在ESB里的复杂度转移分散到了这一整套基础设施里:”服务发现”“服务路由”这些能力本质上就是ESB原本承担的功能,只是在微服务架构里被剥离出来,各自变成了独立的基础系统。不过团队规模小、公司体量不大也不必因此对微服务望而却步,原因有两点:一是已经有成熟的开源微服务基础设施全家桶可以直接用(比如Spring Cloud,涵盖服务发现、服务路由、网关、配置中心等能力);二是微服务数量不多的情况下,并非每一层基础设施都是刚需,可以按优先级分阶段搭建。建议的优先级是:第一层,服务发现、服务路由、服务容错——这是最基本、无论如何都需要的微服务基础设施;第二层,接口框架、API网关——主要是为了提升开发效率,接口框架提升内部服务间的开发效率,API网关提升和外部系统对接的效率;第三层,自动化部署、自动化测试、配置中心——主要是为了提升测试和运维效率;第四层,服务监控、服务跟踪、服务安全——主要是为了进一步提升运维效率。第三层和第四层的重要性会随微服务节点数量增加而水涨船高,但在节点数量还不多的阶段,靠人工方式支撑虽然效率不高,也基本能顶住,不必一开始就追求把四层基础设施全部一次性建齐。

结构图

flowchart TB
  A["微服务基础设施的真相:<br/>把ESB的复杂度转移而非消除"]
  A --> A1["服务发现/服务路由等<br/>本质就是ESB功能的独立化拆分"]
  A1 --> B["搭建优先级(可按需分阶段)"]
  B --> C["第一层(必须):服务发现/服务路由/服务容错"]
  B --> D["第二层:接口框架(内部效率)/API网关(外部对接效率)"]
  B --> E["第三层:自动化部署/自动化测试/配置中心(测试运维效率)"]
  B --> F["第四层:服务监控/服务跟踪/服务安全(进一步提升运维效率)"]
  E --> G["第三/四层重要性随节点数增加而上升<br/>节点少时可先靠人工支撑"]
  F --> G
  A1 --> H["缓解方案:可直接采用成熟开源全家桶<br/>如Spring Cloud"]

参考来源

- 位置:《从零开始学架构》第35讲《微服务架构最佳实践 - 方法篇》"基础设施"(源文件:_epub-src/OEBPS/text00003.html) - 结论依据:原文说明"微服务并没有减少复杂度,而只是将复杂度从 ESB 转移到了基础设施……'服务发现''服务路由'等其实都是 ESB 的功能,只是在微服务中剥离出来成了独立的基础系统",并给出四层搭建优先级"服务发现、服务路由、服务容错……接口框架、API 网关……自动化部署、自动化测试、配置中心……服务监控、服务跟踪、服务安全",直接支撑本卡片结论与结构图。 - 原始内容:微服务并没有减少复杂度,而只是将复杂度从 ESB 转移到了基础设施……我建议按照下面优先级来搭建基础设施:服务发现、服务路由、服务容错……接口框架、API 网关……自动化部署、自动化测试、配置中心……服务监控、服务跟踪、服务安全。