HeadlinesBriefing HeadlinesBriefing.com

确定性模拟测试在 celld 中的应用

Hacker News •
×

我们正在构建 celld,这是一个运行在您自己机器上的 Cloudflare Workers 和 Durable Objects 应用的运行时。它可以将 S3 兼容的对象存储作为唯一外部服务依赖。

celld 是一个分布式系统。构建可靠的分布式系统很难,部分原因是我们可能会无意中依赖在实际环境中不成立的假设,即使我们知道这些陷阱。Peter Deutsch 的《分布式计算八大谬误》列出了八个此类假设,包括“网络是可靠的”和“延迟为零”。

一个 Bug 可能取决于特定的延迟消息序列、失败的写入和节点重启。这些事件在下一次测试运行中可能以不同的顺序发生,使得故障难以重现。我们需要能够重复失败的运行,以便我们可以调查原因并检查拟议的修复是否真的解决了问题。这就是我们使用确定性模拟测试 (DST) 的原因。

我们的模拟器仍在开发中,未包含在 celld 的公共仓库中,但它已经找到了先前未知的 Bug。在这篇文章中,我们将介绍 celld 中 DST 的工作原理以及它如何帮助我们查找、重现并修复了其中一个 Bug。DST 在受控模拟器环境中运行 celld 的生产代码。celld 中的一个 cell 运行应用程序代码,并拥有自己的 SQLite 数据库。随着 cell 执行工作,celld 会处理传入请求、完成的存储操作和定时器触发等事件。选择下一个事件的代码与处理它的代码分离。这使得模拟器可以在运行相同的生产事件处理代码的同时控制事件的顺序。

来源: Hacker News · 由HeadlinesBriefing整理摘要