知识卡片

可演进系统的淘汰机制:从达尔文进化论到依赖流反转

结构图卡

内容

可演进(涵盖可扩展、可维护、可移植)的系统和自然界生态系统一样,最基本的目标都是长久生存;达尔文”物竞天择、适者生存”这条规则对个体而言残酷,但对整个生态系统而言极为有效——正是不断淘汰不适应环境的个体,才让整个体系长期保持活力。把这条”淘汰机制”套到软件架构上,能直接解释单体架构与微服务架构在可演进性上的差距:单体架构里所有模块代码混在一起、一起运行、技术栈必须统一,模块之间缺乏适度隔离,一旦某个模块需要变更或者技术栈需要升级,很容易引发整个系统的连锁崩溃;微服务架构下每个服务可以独立选择最适合自己的技术、独立变更部署,即便某个微服务被彻底淘汰,影响范围也只限于这个微服务本身,不会波及整个系统——这正是”能以较低成本淘汰局部”这件事,反而促成了系统整体的长期稳健。淘汰机制能否真正发挥作用,还取决于依赖流的方向:如果上游应用依赖下游应用(依赖流方向与调用流方向相同),下游一旦变更就会直接传导影响到上游,可扩展性变差;理想情况下应该让依赖流方向与调用流方向相反——这样下游的变更可以独立进行,不会牵连上游,系统的可演进性明显更好。用[[架构编排的内核公式:架构元素+架构规则|“架构元素+架构规则”]]去归纳可演进系统的通用规则,可以从四个维度总结:元素间关系上,既有连接关系也有空间拓扑关系,种类比[[都江堰治水类比高并发系统:倒三角结构下的分流与限流|高并发]]和[[自然界的三种高可用机制,及其在软件架构中的映射|高可用]]场景更复杂;空间位置上,上游元素依赖下游元素时,应确保下游元素的更换不会波及上游;空间层次上,扩展时应把系统整体层次控制在最小范围内(同层元素限制彼此交互、只允许相邻两层单向交互、不允许跨层交互),同时要留意层与层之间可能产生连锁反应,有时需要同时扩展多个层次;个体策略上,规模较大、可扩展性要求高时,应尽量让每个元素个体的功能范围变小、且不同个体之间保持多样性,这样任意一个个体被淘汰时对系统整体的冲击最小。

结构图

flowchart TB
  D["达尔文:物竞天择<br/>淘汰个体→维持生态系统长期活力"]
  D --> M["单体架构:模块混合,技术栈统一<br/>变更易引发整体性崩溃"]
  D --> S["微服务架构:独立技术选型/独立部署<br/>单个服务淘汰不波及全局"]
  R["依赖流应与调用流方向相反<br/>→下游变更不影响上游"]
  Q["可演进系统的四条架构规则"]
  Q --> Q1["元素关系:连接+拓扑关系并存,更复杂"]
  Q --> Q2["空间位置:下游更换不应波及上游"]
  Q --> Q3["空间层次:控制层次范围,只允许相邻层单向交互"]
  Q --> Q4["个体策略:功能范围小+个体多样化,降低单点淘汰冲击"]

参考来源

- 位置:《架构师启示录:知识模型、落地方法与思维模式》第4章《架构演进》之"4.4 可演进系统的架构编排"(源文件:_epub-src/EPUB/xhtml/chapter7.xhtml) - 结论依据:原文说明"在微服务架构下,每个微服务都可以选择最适合自己的技术,从而实现独立变更和独立部署,即便某个微服务被淘汰了,影响范围也仅限于微服务级别,不会轻易波及整个系统……在理想情况下应使依赖流与调用流方向相反。这样,下游的变更可以独立进行,从而使系统具有更好的可扩展性……可演进的系统也可以被视作一种生态系统。而在这个生态系统中,最重要的是淘汰机制的建立", 直接支撑本卡关于淘汰机制、依赖流反转及四条架构规则的结构图。 - 原始内容:要求每个微服务、应用或模块都能够以较低的成本进行淘汰,这样反而会促成系统整体、长期的稳健状态。