知识卡片

信任但验证:审计与可审计性设计

普通读书笔记卡

内容

关于正确性和容错的所有讨论,都建立在系统模型的一些假设之上(进程可能崩溃、网络可能延迟丢包,但落盘后fsync过的数据不会丢、CPU乘法总是对的)——这些假设大多数时候成立,但并非绝对:数据可能在落盘前损坏,网络数据损坏有时能绕过TCP校验和,宇宙射线或病态内存访问模式导致的随机位翻转(Rowhammer)虽然罕见,但设备基数够大时终究会发生;即便像MySQL、PostgreSQL这样久经考验的软件,也曾出现过唯一约束维护错误、可串行化隔离下的写偏差异常这类真实bug;应用代码经受的评审测试远不如数据库代码严格,出错概率只会更高。既然硬件软件都不总能符合理想,数据损坏迟早会发生,我们至少要有办法查明数据是否已损坏——检查数据完整性称为审计。HDFS、Amazon S3这类大规模存储系统并不完全信任磁盘:它们运行后台进程持续回读文件、与其他副本比对、把文件在磁盘间搬移以降低静默损坏的风险;这提示我们如果想确保数据仍在,就必须真正读取并检查它(就像必须定期真的尝试从备份恢复,而不是假设备份一定管用)。作者提出希望看到更多自我验证/自我审计系统,不断检查自身完整性,而不是单纯依赖ACID事务这类机制所带来的盲目信任——尤其在NoSQL浪潮下更弱一致性保证、更不成熟存储技术被广泛采用的当下,审计机制的缺席正变得越来越危险。

参考来源

- 位置:《数据密集型应用系统设计》第十二章《数据系统的未来》"信任但验证""维护完整性,尽管软件有Bug""不要盲目信任承诺""验证的文化"(源文件:_epub-src/ch12_split_002.html) - 结论依据:原文列举随机位翻转、MySQL/PostgreSQL真实bug等打破系统模型假设的案例,并以HDFS/S3持续回读比对副本降低静默损坏风险为例说明"信任但验证"的实践,呼吁更多自我验证系统,直接支撑本卡片结论。 - 原始内容:这些假设是相当合理的,因为大多数时候它们都是成立的……HDFS和Amazon S3等大规模存储系统并不完全信任磁盘:它们运行后台进程持续回读文件……我希望未来能看到更多的自我验证或自我审计系统。