知识卡片
双机切换的三个设计关键点,及复杂度暴涨一个量级的原因
内容
[[存储高可用的四个分析维度,及主备复制的简单与代价]]和[[主从复制与主备的本质区别:从机要真正”干活”]]共同存在两个问题:主机一旦故障就无法写入,而且如果主机恢复不了,需要靠人工去指定新的主机角色。双机切换(主备切换或主从切换,两者切换逻辑本身没有差别)正是为了在原有方案基础上加一个”系统自动决定主机角色、并自动完成切换”的能力。要实现一套完善的切换方案,必须考虑三个关键设计点。第一是”主备间状态判断”,包括状态传递的渠道(是主备直接互联,还是靠第三方仲裁)和状态检测的具体内容(比如机器是否掉电、进程是否存在、响应是否缓慢)。第二是”切换决策”,包括切换时机(机器彻底掉电才切,还是进程不存在就切,还是响应超过2秒就切,还是3分钟内连续重启3次才切)、切换策略(原主机故障恢复后是要抢回主机身份,还是直接降级成新的备机)、以及自动程度(是完全自动切换,还是系统判断完切换意图后还要人工点一下确认按钮)。第三是”数据冲突解决”——原本故障的主机恢复后,新旧主机之间可能出现数据冲突,比如某条记录在旧主机上生成了ID=100但还没同步到旧备机就发生了切换,旧备机升级为新主机后又独立生成了一条ID=100的新数据,等旧的故障主机恢复上线,这两条ID相同但内容不同的数据该怎么处理,没有放之四海而皆准的答案,完全取决于具体业务。这三个设计点没有一个是简单的,也正因如此,切换方案不只是在复制方案基础上”加一个切换功能”这么轻松,而是整体复杂度直接上升了一个量级——书里用了一个直观的比方:如果复制方案的代码量是1000行,切换方案的代码量可能要到10000行,多出来的这9000行,正是用来实现上述三个设计点的。
参考来源
- 位置:《从零开始学架构》第25讲《高可用存储架构:双机架构》"双机切换"之"设计关键"(源文件:_epub-src/OEBPS/text00002.html)
- 结论依据:原文说明"要实现一个完善的切换方案,必须考虑这几个关键的设计点:主备间状态判断……切换决策……数据冲突解决",并总结"切换方案比复制方案不只是多了一个切换功能那么简单,而是复杂度上升了一个量级……如果复制方案的代码是 1000 行,那么切换方案的代码可能就是 10000 行",直接支撑本卡片结论。
- 原始内容:主机故障后,无法进行写操作……要实现一个完善的切换方案,必须考虑这几个关键的设计点:主备间状态判断……切换决策……数据冲突解决……如果复制方案的代码是 1000 行,那么切换方案的代码可能就是 10000 行,多出来的那 9000 行就是用于实现上面我所讲的 3 个设计点的。