高可用分布式流数据存储设计 李玥
2020-03-01 529浏览
- 1.⾼高可⽤用分布式流数据存储设计 李玥 京东集团 技术架构部 架构师
- 2.⾃自我介绍
- 3.⾃自我介绍 李李玥 京东集团 技术架构部 架构师 负责主导设计新⼀一代京东消息中间件系统,专注于流数据的⼀一致性分发和可靠存储、分布式实时计算和⾼高可⽤用分 布式系统架构等技术领域。 从事互联⽹网研发、架构10余年年,曾在浪潮集团、当当⽹网等公司从事架构相关⼯工作。2017年年加⼊入京东,期间提升京 东商城相关系统的性能和吞吐量量数倍。 ⽬目前致⼒力力于推进京东基础架构技术的创新、对外赋能与开源。
- 4.⽬目录 Why 有什么用? What 如何定位?如何融入生态系统? How 如何实现?如何优化?
- 5.WHY 为什什么需要流数据存储?
- 6.那些年年的服务 单体应⽤用 烟筒式 SOA 微服务
- 7.这些年年的数据 Services Data MySQL Hive HBase ES HDFS KV
- 8.我们的愿景 Services 统⼀一的流数据存储平台 Streaming Storage Data MySQL ES HDFS KV HBase Hive
- 9.WHAT 我们需要什什么样的存储? 有序 Append only:尾部写入,不变 顺序读取 分布式 高性能 可靠性 顺序一致性 (近乎)无限容量
- 10.
- 11.Pub/Sub United Stream Store Powered by Streaming Connector Distributed Application Coordinating Service Binlog Replication
- 12.HOW 废话少说 带你 挖坑填坑
- 13.性能
- 14.计算机到底有多快? 1 ns CPU 3 GHz 6, 000 ns 内存 20 GB/s 70, 000 ns SSD 1 GB/s 1 ms = 1, 000, 000 ns
- 15.JournalQ有多快? 单节点 32, 961, 776 TPS 测试服务器器:32C/256G/4TB SSD/万兆以太⽹网 测试每条消息⼤大⼩小为:1KB LZ4 压缩
- 16.存储结构设计 0 10 50 55 80 Journal Journal files 0 写⼊入: Index files Index O(1) 134217342 268433156 0 10 50 55 80 查找: 402653853 536870912 O(logi) + O(logj) ≈ O(1) Partition 0 0 512K 1024K … Partition 1 0 512K 1024K … Partition 2 0 512K 1024K … …
- 17.缓存 堆外内存 Cache 异步预加载 读写共⻚页 PLRU淘汰策略略 File
- 18.⾼高并发 ≠ ⾼高性能 减少等待 异步: Future, Callback, React框架 流程拆分 减少锁:CAS原语 减少锁等待: 读写锁, 细粒度锁
- 19.写⼊入数据流程
- 20.线程模型 IOThreads 接收请求 WriteThread Requests Queue 处理理 ReplicationThread Journal Cache 发送复制请求 FlushThread Journal Files ResponseThreads 发送响应 刷盘 IOThreads Pending Callbacks 收到复制响应
- 21.集群 · 架构
- 22.取 舍 没有最好的架构,只有最合适的架构 学会 取·舍 ⽅得始终
- 23.从实用角度出发,如何取舍? 例⼦ Consistency ⼀一致性 Availability 可⽤用性 Performance 性能 Complexity 复杂度 ⽤用Redis给MySQL做缓存 ⼤大促限流
- 24.Apache ZooKeeper “程序员都喜欢ZooKeeper,但用户正相反” 可维护性问题 多机房部署时可⽤用性问题 数据容量量有限,集群规模有限 选举恢复速度慢,不不可⽤用时间较⻓长
- 25.2014 “In search of an understandable consensus algorithm” Diego Ongaro John Ousterhout Raft⼀一致性算法
- 26.复制状态机 线性 任⼀一时刻⾄至多只有⼀一个请求在执⾏行行 幂等 使⽤用相同参数重复执⾏行行,能获得相同结果
- 27.Replication nextIndex commitIndex lastApplied Leader 0 1 2 3 4 5 6 matchIndex 7 AppendEntries RPC 8 9 10 11 commitIndex 参数 描述 term 领导⼈人的任期号 leaderId 领导⼈人的 id,为了了其他服务器器能重定向到客户端 prevLogIndex 最新⽇日志之前的⽇日志的索引值 prevLogTerm 最新⽇日志之前的⽇日志的领导⼈人任期号 entries[] 将要存储的⽇日志条⽬目(表示 heartbeat 时为空) lastApplied Follower 0 1 2 3 4 5 6 7 8 9
- 28.Leader Election ❓ ❓ 我发现BOSS挂了了,选 我当BOSS吧🙏🙏🙏 ❓ 咱们是同⼀一任期的吗? 我是不不是已经选了了别⼈人? 你的⽇日志⾄至少和我⼀一样新吗? 💀💀👻👻
- 29.Raft总结 优点 弱点 强⼀一致 选举快速 易易于理理解 牺牲可⽤用性换取⼀一致性 性能⼀一般 集群规模不不能太⼤大
- 30.读请求分流 顺序⼀一致 强⼀一致 已提交位置之前的⽇日志具有不不变性。 对于提交的⽇日志,相同位置上Follower的⽇日志和Leader上是⼀一样的。 如果两个节点上的⽇日志完全相同,并且这些⽇日志都已经被状态机执 ⾏行行,那么这两个节点的状态是相同的。
- 31.引⼊入Observers 集群节点数越多性能越好吗? NO
- 32.并⾏行行复制-CAS “Confluo:Distributed Monitoring and Diagnosis Stack for High-speed Networks” Anurag Khandelwal, Rachit Agarwal Atomic HardwarePrimitives:faa = FetchAndAdd, cas = CompareAndSwap
- 33.基于位置的异步复制 Leader Follower Replication Thread Sorted requests queue Sorted responses queue Request handler Response handler
- 34.即将开源GitHub:liyue2008@gmail.com
- 35.⾃自我介绍
- 36.