知识卡片

自然界的三种高可用机制,及其在软件架构中的映射

结构图卡

内容

自然界生物用三种方式实现”高可用”:冗余设计(重要器官双备份,如两只眼睛、两条腿)、快速自我修复能力(蜥蜴断尾重生、章鱼断触角重生)、交互合作机制(蚂蚁蜜蜂靠集体策略维持整体稳定,一个个体出问题时其他个体迅速补位)。软件高可用系统采用的机制与此高度对应:Nginx的主备高可用是冗余设计;PaaS云平台上的应用服务器虽然没有预先准备好的冗余服务器,但平台本身具备服务自愈能力——节点故障后能快速调度另一个节点顶替,这是快速自我修复;分布式缓存Redis Cluster则同时用了两种机制——每个主节点配有一个或多个从节点、写入时同步给所有从节点,这是冗余设计;同时Redis Cluster的选举机制让每个节点都能在主节点失效时被选为新主节点接管工作,这是交互合作机制。用”架构元素+架构规则”去拆解高可用系统的规则,会发现四个关键维度:元素间关系上,不再是高并发场景里靠请求串联的连接关系,而更多是一种空间拓扑关系;空间位置上,可用性要求越高、元素间的空间拓扑就越复杂(比如银行核心系统常设置三个异地备份,靠拉开物理空间距离来降低同时失效的风险);空间层次上,高可用系统通常采用两层结构——除了元素本身,至少还需要另一个专门监控该元素状态的元素,一旦元素失效就负责及时切换到备份,不论冗余、自愈还是集体合作,都离不开这类监控元素的存在;个体策略上,可用性要求越高,所需的实体数量也越多(一般集群模式至少需要3个实体来保证故障时仍可用,若要更强的保障能力,可能需要5个甚至更多实体)。可迁移启发:设计一套高可用方案时,可以直接对照这三种自然机制自查——有没有做冗余(备份)、有没有自愈能力(故障后自动补位)、有没有交互合作机制(集群内节点互相感知状态并协作决策)——三者缺一角,这套高可用设计就可能存在明显的薄弱环节。

结构图

flowchart TB
  N["自然界三种高可用机制"]
  N --> R1["冗余设计<br/>(双眼双腿→Nginx主备/Redis主从复制)"]
  N --> R2["快速自我修复<br/>(蜥蜴断尾→PaaS服务自愈调度)"]
  N --> R3["交互合作机制<br/>(蚁群蜂群→Redis Cluster选举新主节点)"]
  M["共同的架构规则"]
  M --> M1["元素关系=空间拓扑关系(非请求连接)"]
  M --> M2["空间位置:可用性要求越高,拓扑越复杂(如异地三备份)"]
  M --> M3["空间层次:两层结构(元素本身+监控切换元素)"]
  M --> M4["个体策略:可用性要求越高,所需实体数越多(至少3个,或5个以上)"]

参考来源

- 位置:《架构师启示录:知识模型、落地方法与思维模式》第3章《架构编排》之"3.5 高可用系统的架构编排"(源文件:_epub-src/EPUB/xhtml/chapter6.xhtml) - 结论依据:原文说明"动物主要用3种高可用方式保护自己……第一种也是最常见的方式——冗余设计……第二种方式是快速自我修复能力……第三种方式是通过交互合作机制实现高可用性……元素的空间层次一般采用两层结构。除了元素自身之外,至少还需要另外一个能够监控元素状态的元素……一般集群模式下,至少需要3个实体来确保集群发生故障失效时仍能正常工作", 直接支撑本卡关于三种自然高可用机制及其架构规则映射的结构图。 - 原始内容:分布式缓存Redis Cluster的高可用实现中既有冗余的设计方案,又有基于交互合作机制实现的高可用方案。