vivo微服务架构实践之Dubbo性能优化

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. vivo微服务架构实践之Dubbo性能优化 张振威 vivo互联网Java中间件架构师
2. 目录 Part 01 第一部分|Dubbo在vivo的演进历程 Part 02 第二部分|Dubbo路由扩展及优化 Part 03 第三部分|Dubbo负载均衡扩展及优化 Part 04 第四部分|技术成果与未来展望 CONTENTS
3. vivo微服务现状 vivo微服务数据规模 全球用户规模 + 5亿 服务国家地区数量 + 60 微服务数量 全网机器规模 万级 十万级 RPC调用次数/天 峰值QPS 8000亿 千万级
4. Dubbo在vivo的演进历史 开源社区Dubbo框架以及Dubbo在vivo的演进地图 2008 2011 阿里内部发布 Dubbo 阿里对外开源 Dubbo 2014 阿里停止更新 Dubbo 2015 2016 开源社区维护 Dubbo 业务引入 Dubbo 内部发布维护版本 2017 2018 2019 2020 2021 阿里重启 Dubbo 加入 Apache 基金会 Dubbo 孵化毕业 发布2.7.0 Apache Dubbo 2.7.X迭代 Apache Dubbo 3.0 发布 Alibaba Dubbo Apache Dubbo Dubbo in vivo Apache Dubbo 3.X迭代 全量服务 完成升级 Java业务RPC框架 统一为Dubbo 引入Apache Dubbo 2.7.X 2022 内部发布 Dubbo基线版本 建设三中心 分离能力 建设应用级 注册发现能力
5. Dubbo执行核心链路(概要) subscribe Proxy Cluster Monitor Metadata Registry register ConfigCenter DubboConsumer DubboProvider Proxy Invoker Directory Router LoadBalance Monitor Monitor Protocol Filter Invoker Exchange Client Codec Serialization Server Codec Filter Invoker Serialization Dispatch
6. 目录 Part 01 第一部分|Dubbo在vivo的演进历程 Part 02 第二部分|Dubbo路由扩展及优化 Part 03 第三部分|Dubbo负载均衡扩展及优化 Part 04 第四部分|技术成果与未来展望 CONTENTS
7. Dubbo路由简介 Router组件是一套基于规则的精细化流量治理组件 是实现灰度发布、机房容灾、环境隔离等流量治理能力的底层技术基石 ConfigCenter RouterChain Directory LoadBalance TagRouter ConditionRouter ScriptRouter 注:开源标签路由能力适用于应用级配置场景,vivo自研版本为接口级标签路由,与开源方案并行使用 VivoTagRouter NearestRouter Cluster
8. 就近路由背景说明 在vivo互联网业务高速发展的同时,为应对流量增长,以及容灾与高可用的诉求, 多机房部署成为常用的部署方案。在跨机房调用场景下,网络延迟的现象显现。 跨机房调用 consumer 同机房调用 consumer Registry Registry provider provider loc01 appLoc loc02 consumer consumer NearestRoute r NearestRouter provider provider loc01 loc02
9. 就近路由场景分析 01 同机房就近调用 consumer NearestRouter 提供方单机房部署 consumer NearestRouter provider 流量在同机房内流转 最佳网络时延 02 同机房无可用提供者 需降级处理 03 ··· NearestRouter ··· 消费方规模远超同机房提供方 部署规模,需降级处理 提供方非均匀部署 ··· NearestRouter
10. 就近路由实践及收益 req1 req1 req2 loc01 req2 Directory loc02 LoadBalance req3 loc03 req3 NearestRouter RouterChain 低延迟 低成本 高可用
11. 标签路由能力说明 在我们日常测试,线上部署等场景,需要实现精准的灰度发布、环境隔离、A/B测试等关键运维场景 标签路由为消费方指定环境调用提供了技术支持 gray1: [a] gray2: [c] ConfigCenter req1 req1 req2 Directory a c f [a] req2 [b,d,e] req3 [b,d,e] LoadBalance [a,b,c,d,e,f] req3 TagRouter RouterChain gray1 gray2 gray3 静态标签
12. 我们发现的性能问题 在生产环境中我们发现,在大规模集群部署的Dubbo提供方业务场景下 在业务高峰期其消费方侧负载均衡模块+路由模块占用CPU过高,严重影响了业务集群表现,火焰图分析图如下 CPU占用率 负载均衡 火焰图采集 31% Router + lb 36% Idle 就近路由 火焰图采集 标签路由 火焰图采集 33% Biz
13. 路由优化实践 1.减少遍历运算 ConfigCenter NodeGroup1 NodeGroup2 Directory TagRouter ConditionRouter ScriptRouter VivoTagRouter NearestRouter NodeGroup3 LoadBalance … NodeGroupN RouterChain 优化1:关闭应用级标签路由 优化2:新增虚拟分组路由 Cluster
14. 路由优化实践---2:引入位图缓存 gray1: [a] gray2: [c] ConfigCenter req1 req2 gray1 gray2 grayA loc2 gray1Cache a b c d e f g h i j gray2Cache a b c d e f g h i j static1Cache a b c d e f g h i j nullTagCache a b c d e f g h i j loc1 a c Cache f b,d,e TagRouter a,b,g gray1 gray2 静态标签 c,d,i,j 无标签 grayACache a b c d e f g h i j nullTagCache a b c d e f g h i j 标签路由,按节点类型缓存 Directory [a,b,c,d,e,f] VivoTagRouter 机房A a,b,g a,b,c c,i,j d,e Cache loc1Cache a b c d e f g h i j loc2Cache a b c d e f g h i j f 机房B 机房C 就近路由,按机房类型缓存 a,b NearestRouter i,j 完成路由筛选从O(N)到O(1)的挑战!
15. 路由优化实践---2:引入位图缓存 Directory Directory [a,b,c,d,e,f] lastestInvokerList epochStamp Cache1 a b c d e f g h lastRouter i epochStamp Router1 保证 强一致性 X Cache2 a b c d e f g lastInvokerList epochStamp curRouter h epoch 是否一致 epochStamp Router2 否 实时计算 X 直接进行位与运算 curInvokerList Cache3 a b c d e f epochStamp Router3 一次RPC过程中的缓存视图一致性考验 nextRouter epochStamp 缓存单元引入epoch机制 是
16. 路由优化实践 2:引入位图缓存 notify Registry ConfigCenter notify invokerBitListOld epochStamp1 refresh invoke newInvokerListCache oldInvokerListCache oldInvokerListCache invokerBitListNew epochStamp2 epochStamp2 epochStamp1 epochStamp1 TagRouter VivoTagRouter NearestRouter otherRouter Directory RouterChain updateCahceWithEpoch 主动缓存更新策略
17. 路由优化总结 价值说明 优化效果 优化前TPS 路由O(1)级筛选,显著节约算力资源 优化后CPU使用率 4000 3500 3000 2500 2000 1500 1000 500 0 100 80 60 40 20 0 100*p 支持海量集群无限水平扩展 优化前CPU使用率 支持流量本机房闭环及降级,增强系统容灾与可用性 优化后TPS 500*p 参数指标 1000*p 横轴:提供方规模 左侧纵轴:消费方TPS Registry 2000*p 5000*p 右侧纵轴:CPU利用率 NodeGroup1 notify Directory InvokerBitList epoch TagRouter VivoTagRouter NearestRouter BitCache BitCache BitCache epoch epoch epoch ConditionRouter ScriptRouter LoadBalance NodeGroup3 …… RouterChain notify NodeGroup2 NodeGroupN Cluster
18. 目录 Part 01 第一部分|Dubbo在vivo的演进历程 Part 02 第二部分|Dubbo路由扩展及优化 Part 03 第三部分|Dubbo负载均衡扩展及优化 Part 04 第四部分|技术成果与未来展望 CONTENTS
19. Dubbo负载均衡优化背景介绍 在vivo互联网业务高速发展中,持续引入了不同年份、不同供应商的服务器, 考虑摩尔定律因素,这些不同年份、不同供应商的机器存在算力差异。 因此出现宿主机上部署的业务机器存在表现出不同CPU算力的现象(Dubbo 默认负载均衡为随机策略,每个实例承载流量相同而由于性能差异导致其负 载表现不一致,实例间流量高峰期CPU利用率差异可到达40%)。 请求数监控采集 Dubbo内置负载均衡策略 加权随机 加权轮询 最小活跃优先 最短响应优先 一致性哈希 自适应 CPU利用率采集
20. 社区讨论版自适应负载均衡技术方案 resp CPU cpuload rt timeout weight multiple lastLatency inflight load ewma consumer P1 minLoad RouterChain P2 (ipx, ipy) P2C P3 provider AdaptiveLoadBalance caculateLoad AdaptiveMetric load1 load2 load3 CPU1 LoadCache CPU3 CPUMetric AdaptiveMetric 消费方负载计算 CPU2 profile 负载均衡使用P2C 提供方CPU采集
21. 社区讨论版自适应负载均衡压测结果 压测结果对比 优化目标 CPU监控: 高效自适应调节 在无需人工干预的前提下,实现 流量自动、平稳地分配。 流量监控: 高可用与节点状态感知 增强负载均衡器对异常节点(如不 可用、预热中)的识别能力,保障 服务提供方整体可用性。 使用默认随机负载均衡策略 社区讨论版自适应负载均衡策略
22. 社区讨论版波动原因分析 caculateLoad consumer resp CPU p1 load1 RouterChain minLoad (ipx, ipy) load2 p1 …… p2 p2 负载更新 provider CPU1 p1 P2C AdaptiveLoadBalance LoadCache p1 p2 负载更新 provider p2 负载更新 provider CPU2 CPUMetric AdaptiveMetric profile 01. 优化P2C流量分配机制 应避免提供方节点在短期内被集中访问,为P2C新增分发策略 02. 增强指标平滑更新能力 提供方运行过程中出现短期波动属于正常现象,算法应平滑 更新指标,抑制短期抖动影响 对称的,定期的规律震荡 负载更新 provider
23. vivo版自适应负载均衡优化 resp CPU consumer P2C使用概率策略 p1 weight1/(weight1+weight2) load2/(load1+load2) minLoad(ipx,ipy) RouterChain p2 p3 load1/(load1+load2) weight2/(weight1+weight2) P2C AdaptiveLoadBalance caculateLoad 等待下一次 时间窗口 load1 load2 weight2 WeightCache LoadCache AdaptiveMetric weight1 weight3 load3 计算集群平均负载 根据当前实例负载 与集群平均负载偏离度,调整一次权重 provider avg(load) CPU1 CPU2 CPU3 CPUMetric profile WeightAdjust 负载计算与流量调度分离 01. 提供方CPU采集单元 02. 消费负载计算与存储单元 03. 独立权重计算单元 04. 基于概率的P2C策略
24. vivo自适应负载均衡压测效果展示 CPU利用率采集 算法性能提升对比(相对随机策略) 社区讨论版 110 vAdaptive 101.5 100 请求数监控采集 80 60 45.9 40 35.5 30.2 23.7 22.5 20 10.2 4.0 0 随机策略 社区讨论版策略 中间件团队优化后的自适应策略 TPS avg(RT) P95 P99
25. vivo自适应负载均衡生产环境使用效果 提升服务质量 提升服务容量 • 有效抑制P99长尾 • 有效提升集群算力利用率 • 高峰期请求失败率下降超50% • 集群吞吐提升约15% 显著降本 • 节省万核CPU算力,节省百万级 机器采购成本 优化运维人力投入 • • 自动收敛集群CPU利用率 大幅降低利用率告警频次,从而 大幅减少人工干预
26. 目录 Part 01 第一部分|Dubbo在vivo的演进历程 Part 02 第二部分|Dubbo路由扩展及优化 Part 03 第三部分|Dubbo负载均衡扩展及优化 Part 04 第四部分|技术成果与未来展望 CONTENTS
27. 技术成果 路由扩展与优化 负载均衡扩展与优化 痛点问题 大量的遍历操作,在消费方 侧造成CPU算力浪费 痛点问题 跨机房调用产生的 服务质量问题 底层基础设施差异导致上层静态负载 均衡策略无法最大利用算力资源 优化措施 就近 路由 路由位图 缓存 服务表现受 P99拖累 优化措施 分组 路由 Epoch 管理 负载 采集单元 负载 计算单元 权重 调节单元 P2C 决策 +100% +27% +15% +50% 百万级 TPS提升 利用率节约 提升集群容量 降低RPC失败率 节省算力成本
28. 未来展望 推进基线版本向社区对齐 建设统一微服务治理平台 更高效通信协议、更云原生理念,拥抱开源 语言无关,治理能力统一,服务模型统一 Triple协议 应用级注册 agent 统一治理模型 高性能 Dubbo 3.* 服务观测 SDK 流量监控 流量治理 统一微服务治理平台 proxy 服务容错 权限管控
29. 谢谢!Q&A

trang chủ - Wiki
Copyright © 2011-2025 iteam. Current version is 2.146.0. UTC+08:00, 2025-10-17 20:22
浙ICP备14020137号-1 $bản đồ khách truy cập$