Tokutek宣布了用于MongoDB的新一致性算法

Tokutek已经宣布,将致力于一种新的一致性算法,目标是替代MongoDB现有的群首选举算法。该算法名为Ark,Tokutek正在其MongoDB分支TokuMX中开发,并使用它解决MongoDB现有算法中的若干问题。

该算法的设计在很大程度上受到了Raft和Paxos算法的影响,其目标是提供同样可验证的强一致性保证。与Raft不同,它实现了拉式异步复制模型,这使它能够支持MongoDB的架构和编程模型。开发人员声称,这

……支持更广泛的客户端语义,允许应用程序开发人员在安全性和延迟之间选择一个平衡点。此外,Ark支持不同的复制拓扑,如链式复制和多数据中心复制,与Raft同步推式模型的做法相比,这有更大的灵活性。

Tokutek解释了需要新算法的理由,它指出了MongoDB现有的群首选举算法的两个问题。首要问题是一个正确性问题。在宣布Ark的博文中,Zardosht Kasheff指出,成功实现majority write concern的更新也可能回滚。

我们的主要目标是修改选举协议,使TokuMX成为一个真正的CP系统。就是说,在面对网络分区时,TokuMX将保持一致性。这样做意味着,在面对一个网络分区时,可以确保任何成功实现acknowledged级别majority write concern的写操作永远不会丢失。对于TokuMX和MongoDB而言,现在并不是这种情况。

Tokutek关注的第二个问题是一个可用性问题。在相应的技术报告中,Zardosht与合著者Leif Walsh解释说,MongoDB副本集可能会有30秒钟不可用,在故障转移期间或者会更长。

在任何一个30秒里,MongoDB的选举协议允许一个成员在多次选举中不投“是”。……在实践中,这样一个30秒的阀值可能会有问题,尤其是如果选举失败:这必然会导致副本集至少30秒钟不可用,如果后续选举失败则可能会更长。

Ark通过开发利用TokutekDB的全局事务标识符(GTID)解决了这些缺陷。GTID包含一对64位整数(term,opid),其中,每次在主副本上的操作提交时,opid就会加1,而每次选定一个新的主副本时,term就会加1,而且这时还会将opid置为0。GTID中的term与Raft协议中term概念服务于相同的目的,这种相似性允许Ark采用许多与Raft相同的解决方案来提供强一致性保证。

由于Ark是一种在真实数据库系统中工作的一致性协议实现,它也证实了Raft一致性算法的灵活性。以安全的方式调整Raft使它适合MongoDB的架构和编程模型相对简单些,而且我们认为这是Raft的一个重要特征。

GitHub上提供了一个Ark的开发分支,Tokutek正积极地征求关于设计和实现的反馈。

查看英文原文:Tokutek Announces New Consensus Algorithm for MongoDB

你可能感兴趣的:(Tokutek宣布了用于MongoDB的新一致性算法)