内容提要
Dropbox开发了一个名为Chrono的可扩展缓存系统,用于高效存储和检索元数据。Chrono建立在他们的键值存储系统Panda之上,可以实现高并发读取查询并保持读取一致性。它通过提供写后读保证和使用提交时间戳来提供线性化读取来实现这一点。Chrono还将缓存组件与写入尝试跟踪组件解耦,允许独立扩展。Chrono使用的协议通过检测缓存中的陈旧数据并从存储中检索最新值来确保一致的缓存。Dropbox使用TLA+和自检工作负载等工具来验证缓存协议的正确性。
延伸解读
一致性缓存的挑战与Chrono的应对
传统缓存方案在数据库层透明使用无法提供写后读保证,例如写存储后写缓存时若协调服务器崩溃,会留下陈旧数据。即使预失效缓存,也可能因并发读写导致缓存被旧值覆盖。Chrono通过将缓存组件与写入尝试跟踪组件解耦,利用时间戳检测陈旧数据,从而在保证一致性的同时实现高并发读取。
Chrono协议的核心机制
Chrono协议依赖Panda的提交时间戳和快照读。写入前,客户端需先调用Attempt(key, attempt_ts)通知Chrono,并将attempt_ts作为maxPermittedCommitTimestamp写入Panda。读取时,客户端比较Memcache中的readTS与Chrono返回的LatestAttemptTimestamp,若readTS较大则缓存有效,否则从存储获取最新值并更新缓存。这确保了不会返回陈旧数据。
正确性验证与工程实践
Dropbox使用TLA+形式化验证缓存协议的正确性,并编写自检工作负载在预生产和生产环境中持续测试,确保内部不变量和外部写后读行为。TLA+能帮助发现设计缺陷,但正确实现仍需工程努力。这种严谨的验证方法为Chrono的可靠性提供了保障。
Q&A
Chrono是什么,它的主要功能是什么?
Chrono是Dropbox开发的可扩展缓存系统,主要用于高效存储和检索元数据,确保读取一致性。
Chrono如何确保读取一致性?
Chrono通过提供写后读保证和使用提交时间戳来实现线性化读取,确保读取的一致性。
Chrono与传统缓存解决方案相比有什么优势?
Chrono能够处理高并发读取并保持一致性,而传统缓存解决方案无法满足这些要求。
Chrono的API有哪些?
Chrono的API包括Attempt和LatestAttemptTimestamp,用于跟踪写入尝试时间戳。
Dropbox是如何验证Chrono的缓存协议正确性的?
Dropbox使用TLA+和自检工作负载等工具来验证Chrono的缓存协议的正确性。
Chrono如何处理缓存中的陈旧数据?
Chrono通过检测缓存中的陈旧数据并从存储中检索最新值来确保一致性。