极端容错设计原则
引言
PlanetScale 既快速又可靠。我们使用无共享架构(Shared nothing architecture),能够利用本地存储代替网络附加存储,这使得我们的速度在云环境中表现最佳。而我们的容错能力则构建在易于理解但需要极为精细的原则、流程和架构之上。
我们已经多次讨论过我们的速度优势。今天,让我们来谈谈为什么我们的系统能够如此可靠。
设计原则
这些原则其实并不新颖或激进,甚至可能显得是显而易见的。然而,它们却是我们容错设计的基础。我们添加的每项功能以及进行的每次优化,均遵循或源自以下原则。
隔离
- 系统由尽可能物理和逻辑上独立的部件构成。
- 一个部件的故障不会传播到独立的其他部件。
- 关键路径中的部件依赖关系尽可能少。
冗余
- 每个部件都有多个副本,如果其中一个故障,其副本可以继续处理任务。
- 每个部件的副本之间相互隔离。
静态稳定性
- 当某个部件出现故障时,继续根据最后一个已知的良好状态运行。
- 过度配置资源,以便故障部件的工作能够被副本吸收处理。
系统架构
我们的架构完全基于上述原则设计。
控制平面
- 提供数据库管理功能,例如数据库创建、账单管理等。
- 由多个冗余、跨多个云可用区分布的组件组成。
- 重要性低于数据平面,因此可以有更多依赖。
- 示例:使用 PlanetScale 数据库来存储客户与数据库元数据。
数据平面
- 存储数据库数据和服务客户应用查询。
- 由查询路由层和数据库集群组成。
- 每个部分在区域和可用区内均冗余且隔离。
- 最关键的层,依赖关系比控制平面更少。
- 不依赖控制平面运行。
数据库集群
- 由一个主实例和至少两个副本组成。
- 每个实例包括 VM 和驻留在数据平面中的存储。
- 实例均匀分布在三个可用区。
- 在故障发生时,主库自动故障转移到健康副本。
- 客户可以选择运行只读区域副本。
- 企业客户还可以选择将只读区域提升为主库。
- 极端关键,依赖关系极少。
运行流程
在上述架构中,我们应用了一些流程来强化系统的整体容错能力。
持续故障转移
- 支持非常成熟的故障转移能力,可以将故障的主数据库快速迁移到健康副本。
- 每周针对每个客户数据库执行故障转移测试,以验证系统变更的影响。
- 在发生硬件故障或网络故障时(在云环境中是相对普通的情况),我们会自动执行故障转移来应对。
- 故障转移期间,查询缓冲可以最大化减少干扰。
同步复制
- 使用 MySQL 半同步复制和 Postgres 同步提交技术。
- 提交在主库发送回客户端确认之前,需至少在一个副本中稳定存储。
- 使我们可以将这些副本视为潜在主库,并在需要时立即进行故障转移。
渐进交付
- 数据平面变更逐步应用到不同层级的环境。
- 数据库集群配置和二进制变更可以通过特性标志(Feature Flags)逐步应用到每个数据库。
- 发布渠道允许我们先对开发分支应用变更,等待一周或更长时间后再应用到生产分支。
- 降低我们的错误对客户造成的影响。
故障场景的容忍能力
通过上述设计原则、架构和流程,我们能够应对各种故障场景。
非查询路径的故障
- 因为我们的查询路径依赖关系非常少,因此查询路径以外的故障不会影响客户的应用查询。
- 示例:假设某云服务提供商的 Docker 仓库服务发生故障,可能会影响我们创建新的数据库实例的能力,但不会影响现有实例处理查询或存储数据的能力。
- 同样,即使控制平面完全故障,客户仅无法更改数据库集群设置,但不会影响其查询服务。
云服务提供商故障
- 我们运行于 AWS 和 GCP,这些服务提供商可能以不同形式发生故障。
- 实例故障:
- 主库实例发生故障时,我们会立即故障转移到副本。
- 如果块存储的实例 VM 故障,会将弹性卷从故障 VM 分离并重新挂载到新的健康 VM。
- 如果 Metal 数据库实例 VM 故障,会启动替换实例并销毁故障实例。
- 存储故障时,块存储和 Metal 集群会以类似方式启动替换数据库实例。
- 可用区故障:
- 类似于实例故障,若主库实例所在的可用区发生故障,我们会立即故障转移到健康区的副本。
- 区域故障:
- 若整个区域宕机,运行于该区域的数据库集群会下线,但其他区域运行的数据库集群仍能继续运行。
- 企业客户可以将故障转移到其他只读区域副本。
PlanetScale 自身故障
- Vitess 或 PlanetScale Kubernetes operator 的 bug 极少影响超过 1~2 名客户,原因是我们广泛采用特性标志逐步应用修改。
- 基础设施变更(例如 Kubernetes 升级)导致的故障可能影响更大,但因为我们严格测试且逐步发布,几乎不会发生大规模影响。
结论
基于严格原则、稳健架构和成熟流程,我们能够处理多种故障场景,同时最大化减少对客户的影响。PlanetScale 的容错能力不仅建立在先进技术上,还体现了我们对托管服务稳定性和可靠性的坚定承诺。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:https://choupangxia.com/2025/09/14/the-principles-of-extreme-fault-tolerance/