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

演讲大纲:

  • 突发热点对微博注册中心的要求和挑战
  • vintage高可用设计和实践
  • 总结
展开查看详情

1.突发热点场景下-微博⾼可⽤注册中⼼ vintage设计&实践 边剑 新浪微博-研发中心 技术专家

2.边剑@微博 技术专家

3.• 突发热点对微博注册中心的要求与挑战 • vintage 高可用设计&实践 • 总结

4.

5.

6. 应对措施 • 常备充足buffer • 服务分层降级,保证核心 • 弹性扩容,构建坚实大坝

7. 微博注册中心面临要求与挑战 • 每秒百+级节点扩容 watch register ဳٙӾஞ • 秒级内通知平均延迟 lookup heartbeat 10W级微服务承载 v2 v1 v2 v1 v2 v1 v2 v1 client 1 client 2 • server A server B v2 v1 v2 v1 v2 v1 v2 v1 client 3 client 4 server C server D ಘ਻ᵞᗭ ಘ਻ᵞᗭ • 5+异构服务跨语言访问 v2 v2 v1 client 1 client 3 v1 v2 v2 client 2 client 4 v1 v1 v2 v2 v1 client 1 client 3 v1 v2 v2 client 2 client 4 v1 v1 v2 v2 v1 server A v1 v2 server B v2 v1 v1 v2 v1 server A v2 v1 v2 server B v2 v1 v1 server C server D server C server D v2 v1 v2 v1 v2 v1 v2 v1 v2 v1 v2 v1 v2 v1 v2 v1 client 1 client 2 client 1 client 2 server A server B 网络抖动、专线拥塞,设备 server A server B • v2 v1 v2 v1 v2 v1 v2 v1 v2 v1 v2 v1 v2 v1 v2 v1 client 3 client 4 client 3 client 4 server C server D server C server D 故障 VS 注册中心可用性

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选举, •疏 支持分区多主 •保 • Merkle Tree 一致性对 •常备适度冗余 比 • Freeze 分区微服务 • 基于全局Index一致性 •多IDC间数据互 状态保护 修复高可用部署 备 • 多级IDC服务发现 •与流量消耗型业 +local snapshot • Proxy微服务注册 务分离部署 •多机架部署 13!

14. vintage内部网络分区 sync register • 分区多主raft策略 watch register&heartbeat M rpc-server • Freeze 微服务状态保护 rpc-client watch S SXOO watch SXOO S rpc-client • 多主合并,事件修复(改) rpc-server register&heartbeat M

15. client与vintage网络分区 rpc sync data watch sync idc • 跨IDC服务发现 proxy proxy rpc-server S S rpc-client snapshot 本地snapshot IDC1 • heartbeat register M • proxy模式上行请求 V\QF M IDC2 watch S S

16. 高可用 网络分区 通知风暴 数据一致性 高可用部署 • 最终数据一致性 • IDC内部raft选举, •疏 支持分区多主 •保 • Merkle Tree 一致性对 •常备适度冗余 比 • Freeze 分区微服务 • 基于全局Index一致性 •多IDC间数据互 状态保护 修复高可用部署 备 • 多级IDC服务发现 •与流量消耗型业 +local snapshot • Proxy微服务注册 务分离部署 •多机架部署 16!

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选举, •疏 支持分区多主 •保 • Merkle Tree 一致性对 •常备适度冗余 比 • Freeze 分区微服务 • 基于全局Index一致性 •多IDC间数据互 状态保护 修复高可用部署 备 • 多级IDC服务发现 •与流量消耗型业 +local snapshot • Proxy微服务注册 务分离部署 •多机架部署 20!

21. 数据一致性 S S • Merkle Tree 一致性对比 • IDC间 M<—>M 对比修复 IDC1 M • IDC内 M—>S 事件修复 S S M M S S IDC2 IDC3

22. 数据修复 Top Hash hash(0,1) • 构建节点数据merkle Tree Hash 0 Hash1 • 由高级底逐层对比 hash(0-0,0-1) hash(1-0,1) • 精准定位,差异修复 Hash Hash Hash Hash 0-0 0-0 0-0 0-0 hash(L1) hash(L2) hash(L3) hash(L3) L1 L2 L3 L4

23. 高可用 网络分区 通知风暴 数据一致性 高可用部署 • 最终数据一致性 • IDC内部raft选举, •疏 支持分区多主 •保 • Merkle Tree 一致性对 •常备适度冗余 比 • Freeze 分区微服务 • 基于全局Index一致性 •多IDC间数据互 状态保护 修复高可用部署 备 • 多级IDC服务发现 •与流量消耗型业 +local snapshot • Proxy微服务注册 务分离部署 •多机架部署 23!

24. vintage部署 • 适度冗余度部署 • 与网络消耗型业务隔离 • 多机架部署,同机架内多服务部署 • 多IDC间数据互备

25. 高性能 吞吐 延迟 •IDC 分治,读写角色分离 •List+map 毫秒级状态变更管 •IDC间,并行写 理器 •IDC内,多从负载均衡 •watch变更推送机制 25!

26.服务生命周期

27. 实例状态管理器挑战 • 定时驱动 数据结构! Update! Trigger! • 支持十万级实例 链表! O(n)! O(1)! • 10ms级别的精度 最⼩小堆! Olog(n)! O(1)! • 支持频繁的expire刷新 时间轮! O(n)! O(1)! ?! O(1)! O(1)! • 服务timeout相同固定可排序

28. 毫秒级服务状态变更处理器 map:索引 /feed/idc1/10.1.1.1:8080 /usr/idc1/10.2.2.2:8080 /feed/idc1/10.3.3.3:8080 按expire升序的双向链表 /feed/idc1/10.1.1.1:8080 /usr/idc1/10.2.2.2:8080 /feed/idc1/10.3.3.3:8080 wait un@l current>=expire 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.支持通知回调多版本树形存储