专业书籍精读 · Chaos Engineering · 第 19 章

在数据库上做混沌

Chaos Engineering: System Resiliency in Practice · Ch 19 · Chaos Engineering on a Database · 2020

EN →

这一章讲什么?

你在手机银行里转账,钱从一个账户扣掉、在另一个账户出现——背后那套数据库,绝不能「扣了钱却没到账」。现在的大型数据库往往不是一台机器,而是几十上百台机器一起干活。这一章由一家做分布式数据库的公司(PingCAP,产品叫 TiDB)现身说法:他们怎样故意把自己的数据库往死里折腾,来确认它在出事时依然不丢数据、不算错账。

先说个怪事

你会以为:数据库的测试都写好了、全部通过,就可以放心上线。但分布式数据库最要命的毛病,偏偏藏在「测试从来不会走到的那条路」上——比如一台机器刚好在写到一半时断电,同时另外两台之间的网线又抖了一下。每一种故障单独测都没问题,凑到一起才出事。而这种巧合,在成百上千台机器、每天运行的生产环境里,迟早会碰上。

旧世界为什么难

核心机制直觉

带来了什么 / 该怎么选

好处是:那些「千年一遇」的巧合故障,在测试环境里一天就能被撞上好几次,问题在用户碰到之前就被抓住。一句诚实的代价:这套折腾只能证明「找到了错」,永远不能证明「已经没有错」,而且搭建和维护这样一个日夜运转的模拟器,本身就要花不少人力和机器。

一句话记住

数据库的错是安静的——所以要一边主动制造事故,一边用「总账不能变」这类铁律去对账。

想看 TiDB 的架构里故障打在哪、四个层面怎么注入、「银行测试」凭什么能抓到一致性 bug,以及自动化平台 Schrodinger 和 Chaos Mesh 是怎么来的? → 切到精读版