最近蚂蚁集团旗下的在线文档产品-《语雀文档》突发数据故障,导致系统宕机近 8 个小时。所有用户的在线文档及重要资料都无法打开。这么长时间的服务停摆基本定义为 P0 事故(P0 为事故定义最高级别)。从事故的处理时长可以分析肯定是数据出了问题。应用发布问题都可以及时回滚到之前的版本,数据问题就比较难恢复了。最后官方事故通报是数据存储服务器误下线引发系统故障。结合这一事件来聊聊分布式的基础理论-CAP,分析下语雀文档的事故处理过程及架构设计。
首先,什么是 CAP 定理呢。这个定理指的是:一个分布式系统,不可能同时满足以下三点
CAP 定理表明上述三个指标不可能同时做到,而一般来说,分布式系统中的分区容错性 P 又总是成立,所以就需要我们在系统设计时是首要考虑 CP 还是 AP。
CAP 理论示意图
结合语雀文档的案例来分析 CAP 定理。我们从复杂的系统中抽象简化。如图,假设语雀的数据存储及应用节点分为 AB 两个分区。实际对用户而言,并不感知这两个分区节点。
在分布式系统正常运行时,用户可以通过客户端或者网页读写在线文档。当用户编辑更新文档资料时,文档数据通过应用程序 system1(S1) 更新记录在数据库 database1(D1)中,同时网络通信正常,将数据库 D1的数据同步到数据库 D2 中。此时,用户在多个客户端看到的文档数据是内容完全一致的数据。当然,这只是理想情况。实际现实情况远远比这复杂,有很多因素会引发系统故障。从图中我们逐个分析。
据语雀公告,10 月 23 日下午,服务语雀的数据存储运维团队在进行升级操作时,由于新的运维升级工具 bug,导致华东地区生产环境存储服务器被误下线。
受其影响,语雀数据服务发生严重故障,造成大面积的服务中断。为了尽快恢复服务,语雀和数据
存储运维团队全力进行数据恢复工作,但受限于恢复方案、数据量级等因素,整体用时较长。
具体过程如下:
14:07 数据存储运维团队收到监控系统报警,定位到原因是存储在升级中因新的运维工具 bug 导致节点机器下线;
14:15 联系硬件团队尝试将下线机器重新上线;
15:00 确认因存储系统使用的机器类别较老,无法直接操作上线,立即调整恢复方案为从备份系统中恢复存储数据;
15:10 开始新建存储系统,从备份中开始恢复数据,由于语雀数据量庞大,此过程历时较长,19 点完成数据恢复,同时为保障数据完整性,在完成恢复后,用时 2 个小时进行数据校验;
21 点存储系统通过完整性校验,开始和语雀团队联调,最终在 22 点恢复语雀全部服务。用户所有数据均未
丢失。
从官方通报的事件故障处理过程来看,系统发生故障的根本原因是图中的 D1 或者 D2 出问题了。直接导致数据存储服务器故障。这时候已经别无选择了,只能停服修数据了。通常系统重要数据都会有存储备份,存储备份又可以分类为冷备和热备。从开始恢复到最终恢复完成并通过数据校验,耗时近 7 个小时,很有可能是系统缺少热备数据,不能及时切换,只能从定时备份的冷备中恢复数据。
通过以上事件,语雀也公布了针对性的改进措施
前 3 点都是保证系统操作流程的规范性,第 4 点是从架构设计出发,增加系统的高可用性。目前通常的异地灾备方案有以下几种
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。