jraft为了高性能,全流程都使用了Disruptor来做异步批量的处理
1 异步
从入口的NodeImpl类的apply方法就可以看到使用了异步了:
后面的所有的流程都是类似的情况了
写日志是异步的
发送日志给follower也是异步的
半数以上follower同意后应用到状态机也是异步的
2 批量
Disruptor的onEvent处理的参数有个endOfBatch,这个其实也很重要,这个给了我们批量处理的能力,可以连续处理一批。
批量消费减少了事件的触发,减少了流程的切换,提高了性能。
其他异步的地方基本都用到了批量,这里就不赘述了。