【Ratis】Ratis Streaming概览
看了Tsz-Wo Nicholas Sze博士的一个关于Ratis的share,在share里提到了raits做的一个性能优化:客户端流。比较感兴趣,特此记录一下。如果想看原始分享的,可以搜关键词:Apache Ratis - A High Performance Raft Library
关于Ratis Stream的pdf介绍,在这个PR的附件里: [Ratis streaming([https://issues.apache.org/jira/browse/RATIS-979)
一、动机
为什么需要Ratis Streaming呢?它解决什么关键问题?
首先说下Raft算法默认机制的缺点:
1、Leader需要大量内存缓存:需缓存未处理完成的客户端请求、每个follower的未处理完成的日志条目和数据,且为重试可能多次缓存相同请求/日志条目。
2、并发请求的顺序性问题:客户端数据写入慢磁盘会拖慢其他客户端写入快磁盘的速度。
3、流式传输的优势:节点接收到传入流式数据时,可立即流式传输到其他节点,无需等待传入流关闭,比分块写入性能更好。
4、Leader的网络流量问题:Leader直接接收所有客户端请求,管理多个连接,且用于appendEntries的网络带宽是跟随者的两倍或更多。
5、网络拓扑没有特殊优化:即使客户