在群组通信服务或paxos中保持记录消息是否实用?

时间:2016-10-18 04:14:25

标签: distributed-computing distributed paxos

在网络分区或节点崩溃的情况下,大多数分布式原子广播协议(如扩展虚拟同步或Paxos)需要运行节点来保留日志消息,直到崩溃或分区节点重新加入群集。当节点重新加入群集时,重放已记录的消息就足以重新获得当前状态。

我的问题是,如果分区/崩溃节点需要很长时间再次加入群集,那么最终日志将会溢出。这似乎是一个非常实际的问题,但在他们的论文中仍然没有人谈论它。有一个非常明显的解决方案,我错过了吗?或者我的理解不正确。

2 个答案:

答案 0 :(得分:2)

无限日志问题有一些潜在的解决方案,但复制状态机的一个更流行的解决方案是定期快照快照完整的复制状态机并删除该点之前的所有历史记录。已脱机太长的节点将丢弃所有信息,下载快照,然后从该点开始重播复制的日志。

答案 1 :(得分:2)

你真的不需要记住整个日志。例如,假设您在节点之间同步的状态类似于具有表格行的SQL表(id:int,name:string),并且将写入日志的命令采用格式&#34 ;插入id = x和name = y","删除行,其中id = z"," set name = a where id = 1000",...

一旦提交了这样的命令,你真正关心的就是决赛桌。然后,一旦长时间离线的节点上线,它只需要下载表格+在下载表格时提交的日志中的几个条目。

这称为"日志压缩",请查看Raft paper中的第7章以获取更多信息。