AppBoxFuture的存储引擎依赖Raft一致性协议来保证各个分区副本的一致性,如果不处理Raft日志将不断增长,因此需要特定的机制(定期或每处理一定数量的日志)来回收那些无用的日志数据。通过学习Raft协议内的Log Compaction,并参考TiKV等实现,作者初步实现了分区快照与日志截断回收功能。 一、快照流程: 每个分区对应一个Raft组,由不同的Raft节点分布在集群的不同机器上,每个RaftNode都在循环处理Ready(如下图所示):
二、简单测试:1. 启动集群并新建测试用实体模型参考前篇“告别单体架构,迎接分布式时代”启动一个新集群,并且登录至IDE创建新实体。 2. 关闭集群某一节点模拟Down机直接Control+C关闭某一节点。 3. 新建一个服务插入5000条记录在IDE内新建服务用于插入5000条记录(用于触发快照条件),调用此服务后可看到控制台输出如下图所示的创建快照日志。 4. 重新启动Down机节点通过如下命令重启Down机节点,可看到控制台输出如下图所示的恢复快照日志。
5. 验证Down机节点快照恢复通过tools/dbscan工具查看快照数据是否已恢复。
三、本篇小结:本篇介绍了Raft快照及日志截断回收的流程及相应的测试,GitHub上的运行时已更新可供测试。作者开发AppBoxFuture到十月一日就整一年了,期间曾多次想放弃,好在顶着巨大的压力总算解决了这最后一个技术难点,到此基本上原型验证是没有大问题了,下一步的重点是完善必要功能、稳定性及性能优化,并且考虑是开源该项目还是商业化运作。 |
|