突发热点场景下-微博高可用注册中心vintage设计与实践

1. 突发热点场景下-微博⾼可⽤注册中⼼ vintage设计&实践 边剑 新浪微博-研发中心 技术专家
2. 边剑@微博 技术专家
3. • 突发热点对微博注册中心的要求与挑战 • vintage 高可用设计&实践 • 总结
6. 应对措施 • 常备充足buffer • 服务分层降级,保证核心 • 弹性扩容,构建坚实大坝
7. 微博注册中心面临要求与挑战 • 每秒百+级节点扩容 • 秒级内通知平均延迟 • 10W级微服务承载 • • 5+异构服务跨语言访问 网络抖动、专线拥塞,设备 故障 VS 注册中心可用性 watch ဳٙӾஞ lookup register heartbeat v2 v1 client 1 v2 v1 client 2 v2 v1 server A v2 v1 server B v2 v1 client 3 v2 v1 client 4 v2 v1 server C v2 v1 server D ಘ਻ᵞᗭ ಘ਻ᵞᗭ v2 v1 client 1 v2 v1 client 2 v2 v1 client 1 v2 v1 client 2 v2 v1 server A v2 v1 server B v2 v1 server A v2 v1 server B v2 v1 client 3 v2 v1 client 4 v2 v1 client 3 v2 v1 client 4 v2 v1 server C v2 v1 server D v2 v1 server C v2 v1 server D v2 v1 client 1 v2 v1 client 2 v2 v1 client 1 v2 v1 client 2 v2 v1 server A v2 v1 server B v2 v1 server A v2 v1 server B v2 v1 client 3 v2 v1 client 4 v2 v1 client 3 v2 v1 client 4 v2 v1 server C v2 v1 server D v2 v1 server C v2 v1 server D
8. • 突发热点对微博注册中心的要求与挑战 • vintage 高可用设计&实践 • 总结
9. 微博注册中心设计目标 • 核心功能 : 公司级别微服务注册中心,配置管理平台,支持混合多云(IDC),支 持多语言,具备10w+级微服务承载,变更级联通知。 • 可用性 >= 99.9999% • 高性能 : 每秒百+级节点扩容,通知延迟(avg) <500ms • 高伸缩性: 十秒级节点扩容,分钟级新IDC注册中心搭建 :
10. 选型对比 Feature zookeeper etcd consul eureka 多数据中⼼心 不不⽀支持 不不⽀支持 ⽀支持! ⽀支持! cap cp cp cp AP 多语⾔言 sdk http http&dns http watch ⽀支持! ⽀支持! ⽀支持! long polling 社区⽀支持 积极! 积极! 积极! 新版本已暂停
11. vintage 架构设计 • IDC内raft选举支持分区多主 • 多IDC注册中心,Gossip节点发 现, IDC间数据互备 • 微服务调用方,多级IDC服务发现 + Local Snapshot • 服务状态数据多版本存储
12. vintage 架构设计
13. 高可用 网络分区 通知风暴 • IDC内部raft选举, 支持分区多主 • Freeze 分区微服务 状态保护 • 多级IDC服务发现 +local snapshot • Proxy微服务注册 •疏 •保 数据一致性 • 最终数据一致性 • Merkle Tree 一致性对 比 • 基于全局Index一致性 修复高可用部署 13! 高可用部署 •常备适度冗余 •多IDC间数据互 备 •与流量消耗型业 务分离部署 •多机架部署
14. vintage内部网络分区 • • • 分区多主raft策略 Freeze 微服务状态保护 sync register watch register&heartbeat M rpc-client watch S SXOO S SXOO 多主合并,事件修复(改) rpc-server register&heartbeat rpc-server M watch rpc-client
15. client与vintage网络分区 rpc sync data watch • 跨IDC服务发现 • 本地snapshot • proxy模式上行请求 sync idc proxy proxy rpc-server S S rpc-client snapshot IDC1 heartbeat register M V\QF M IDC2 S S watch
16. 高可用 网络分区 通知风暴 • IDC内部raft选举, 支持分区多主 • Freeze 分区微服务 状态保护 • 多级IDC服务发现 +local snapshot • Proxy微服务注册 •疏 •保 数据一致性 • 最终数据一致性 • Merkle Tree 一致性对 比 • 基于全局Index一致性 修复高可用部署 16! 高可用部署 •常备适度冗余 •多IDC间数据互 备 •与流量消耗型业 务分离部署 •多机架部署
17. 通知风暴 短期大量微 服务扩缩容 网络Qos 大面积 设备故障 百级 千级 十级 百级 放大 放大 通知 一次 带宽枯竭 MSG 微服务状态频 繁变更 二次 雪崩难以自愈 风暴规模 = N(变更节点数) * 1次放大 * 2次放大 1000000 = 100 * 100 * 100
18. 通知风暴-疏 • IDC分治,DNS发现 • M/S 读写分离 • 快速扩容提供充足Buffer • 增量事件 + 全局Snapshot(压缩)
19. 通知风暴-保 • 综合网络分区监控,freeze 保护 - vintage集群内分区 - 微服务与vintage主节点分区 • 微服务阈值保护(DEF >= 60% • 带宽阈值保护,服务Auto304 预防雪崩)
20. 高可用 网络分区 通知风暴 • IDC内部raft选举, 支持分区多主 • Freeze 分区微服务 状态保护 • 多级IDC服务发现 +local snapshot • Proxy微服务注册 •疏 •保 数据一致性 • 最终数据一致性 • Merkle Tree 一致性对 比 • 基于全局Index一致性 修复高可用部署 20! 高可用部署 •常备适度冗余 •多IDC间数据互 备 •与流量消耗型业 务分离部署 •多机架部署
21. 数据一致性 • Merkle Tree 一致性对比 • IDC间 M<—>M 对比修复 • IDC内 M—>S 事件修复 S IDC1 S M S S M S IDC2 M IDC3 S
22. 数据修复 Top Hash • hash(0,1) 构建节点数据merkle Tree • 由高级底逐层对比 • 精准定位,差异修复 Hash 0 Hash1 hash(0-0,0-1) hash(1-0,1) Hash 0-0 Hash 0-0 Hash 0-0 Hash 0-0 hash(L1) hash(L2) hash(L3) hash(L3) L1 L2 L3 L4
23. 高可用 网络分区 通知风暴 • IDC内部raft选举, 支持分区多主 • Freeze 分区微服务 状态保护 • 多级IDC服务发现 +local snapshot • Proxy微服务注册 •疏 •保 数据一致性 • 最终数据一致性 • Merkle Tree 一致性对 比 • 基于全局Index一致性 修复高可用部署 23! 高可用部署 •常备适度冗余 •多IDC间数据互 备 •与流量消耗型业 务分离部署 •多机架部署
24. vintage部署 • 适度冗余度部署 • 与网络消耗型业务隔离 • 多机架部署,同机架内多服务部署 • 多IDC间数据互备
25. 高性能 吞吐 延迟 •IDC 分治,读写角色分离 •IDC间,并行写 •IDC内,多从负载均衡 •List+map 毫秒级状态变更管 理器 •watch变更推送机制 25!
26. 服务生命周期
27. 实例状态管理器挑战 • • 定时驱动 支持十万级实例 • 10ms级别的精度 • 支持频繁的expire刷新 • 服务timeout相同固定可排序 数据结构! Update! Trigger! 链表! O(n)! O(1)! 最⼩小堆! Olog(n)! O(1)! 时间轮! O(n)! O(1)! ?! O(1)! O(1)!
28. 毫秒级服务状态变更处理器 map:索引 /feed/idc1/10.1.1.1:8080 /usr/idc1/10.2.2.2:8080 /feed/idc1/10.3.3.3:8080 按expire升序的双向链表 wait un@l current>=expire /feed/idc1/10.1.1.1:8080 /usr/idc1/10.2.2.2:8080 /feed/idc1/10.3.3.3:8080 expire:10:38:48.775 expire:10:38:49.388 expire:10:38:49.568 callback:503 callback:503 callback:503 expire:10:38:54.338 trigger:O(1) update:O(1)
29. 支持通知回调多版本树形存储
30. watch推送机制 • 全局Index时钟版本索引 • client注册到watch hub • watch hub - path 合并watcher
31. watch推送机制 • client注册到watch hub • watch hub - path 合并watcher - path 递归 • 微服务调用方,增量事件 推送+溢出snapshot(压缩)
32. 高伸缩 vintage节点 vintage IDC •容器化部署,IDC内十秒级节点 扩容 •整合Jpool+Dcp,分钟级IDC 注册中心集群搭建 32!
33. 多语言 协议化 SDK •Http Restful Api •java,go多语言 33!
34. • 突发热点对微博注册中心的要求与挑战 • vintage 高可用设计&实践 • 总结
35. 总结(效果) • 多IDC部署 • 十万级微服务节点 • 可用性达到 99.9999% • 变更延迟(avg) <=200ms,p999 <= 800 ms • 成本:业务服务器Buffer 40% —> 25% LOREM IPSUM DOLOR!