《2019年高可用分布式流数据存储设计.pdf》由会员分享,可在线阅读,更多相关《2019年高可用分布式流数据存储设计.pdf(32页珍藏版)》请在三个皮匠报告上搜索。
1、高可用分布式流数据存储设计京东集团 技术架构部 架构师目录Why 有什么用?What 如何定位?如何融入生态系统?How 如何实现?如何优化?WHY为什么需要流数据存储?单体应用烟筒式SOA微服务那些年的服务MySQLESHDFSKVHBaseHive这些年的数据ServicesDataMySQLESHDFSKVHBaseHive统一的流数据存储平台我们的愿景ServicesStreaming StorageData有序 Append only:尾部写入,不变 顺序读取 分布式 高性能 可靠性 顺序一致性(近乎)无限容量 我们需要什么样的存储?WHATPub/SubPowered byUnit
2、ed Stream StoreStreaming ConnectorDistributed Application Coordinating ServiceBinlog Replication挖坑填坑带你 废话少说HOW性能计算机到底有多快?CPU3 GHz内存20 GB/sSSD1 GB/s1 ns6,000 ns70,000 ns1 ms=1,000,000 nsJournalQ有多快?32,961,776TPS测试服务器:32C/256G/4TB SSD/万兆以太网 测试每条消息大小为:1KB LZ4 压缩单节点存储结构设计010505580Journal010505580Index01
3、34230536870912512K1024K0512K1024K0512K 1024KJournal filesIndex filesPartition 0Partition 1Partition 2写入:查找:O(logi)+O(logj)O(1)O(1)缓存CacheFile堆外内存异步预加载读写共页PLRU淘汰策略高并发 高性能减少等待异步:Future,Callback,React框架 流程拆分 减少锁:CAS原语 减少锁等待:读写锁,细粒度锁 写入数据流程IOThreads接收请求Requests QueueWriteThread处理Fl
4、ushThread刷盘ReplicationThread发送复制请求IOThreads收到复制响应Pending CallbacksResponseThreads发送响应Journal CacheJournal Files线程模型集群 架构没有最好的架构,只有最合适的架构取 舍学会得始终取 舍从实用角度出发,如何取舍?Consistency 一致性Availability 可用性Performance 性能例用Redis给MySQL做缓存 大促限流Complexity 复杂度Apache ZooKeeper“程序员都喜欢ZooKeeper,但用户正相反”可维护性问题多机房部署时可用性问题数据容
5、量有限,集群规模有限选举恢复速度慢,不可用时间较长John OusterhoutDiego Ongaro“In search of an understandable consensus algorithm”Raft一致性算法2014线性 任一时刻至多只有一个请求在执行 幂等 使用相同参数重复执行,能获得相同结果复制状态机Replication0123456789 10 lastAppliedlastAppliedcommitIndexLeaderFollowercommitIndexmatchIndexnextIndex9AppendEntries RPC参数描述ter
6、m领导人的任期号leaderId领导人的 id,为了其他服务器能重定向到客户端prevLogIndex最新日志之前的日志的索引值prevLogTerm最新日志之前的日志的领导人任期号entries将要存储的日志条目(表示 heartbeat 时为空)Leader Election我发现BOSS挂了,选我当BOSS吧咱们是同一任期的吗?我是不是已经选了别人?你的日志至少和我一样新吗?优点 强一致 选举快速 易于理解 弱点 牺牲可用性换取一致性 性能一般 集群规模不能太大Raft总结读请求分流顺序一致已提交位置之前的日志具有不变性。对于提交的日志,相同位置上Follower的日志和Leader上是
7、一样的。强一致如果两个节点上的日志完全相同,并且这些日志都已经被状态机执行,那么这两个节点的状态是相同的。集群节点数越多性能越好吗?NO引入Observers并行复制-CASAtomic Hardware Primitives:faa=FetchAndAdd,cas=CompareAndSwap“Confluo:Distributed Monitoring and Diagnosis Stack for High-speed Networks”Anurag Khandelwal,Rachit Agarwal基于位置的异步复制Sorted requests queueRequest handlerSorted responses queueReplication ThreadResponse handlerLeaderFollower