Dubbo 3.0 前瞻系列:服务发现支持百万集群,带来可伸缩微服务架构

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
性能测试 PTS,5000VUM额度
函数计算FC,每月15万CU 3个月
简介: 本文是一篇关于 Dubbo 地址推送性能的压测文章,我们期望通过对比的方式展现 Dubbo3 在性能方面的提升,尤其是新引入的应用级地址模型。但要注意,这并不是官方正式版本的性能参考基线,并且由于环境和时间原因,部分对比数据我们并没有采集,但只要记住我们只是在定性的检测阶段成果,这些限制总体上并不会有太大影响。

作者 | 刘军(陆龟)
来源|阿里巴巴云原生公众号

本文是一篇关于 Dubbo 地址推送性能的压测文章,我们期望通过对比的方式展现 Dubbo3 在性能方面的提升,尤其是新引入的应用级地址模型。但要注意,这并不是官方正式版本的性能参考基线,并且由于环境和时间原因,部分对比数据我们并没有采集,但只要记住我们只是在定性的检测阶段成果,这些限制总体上并不会有太大影响。

摘要

本文主要围绕下一代微服务框架 Dubbo 3.0 在地址推送链路的性能测试展开,也是在性能层面对 Dubbo 3.0 在阿里落地过程中的一个阶段性总结,本轮测试了 Dubbo2 接口级地址发现、Dubbo3 接口级地址发现、Dubbo3 应用级地址发现。压测数据表明,在百万实例地址的压测场景下:

  • 基于接口级地址发现模型,Dubbo3 与 Dubbo2 对比,有超过 50% 常驻内存下降,Full GC 间隔更是明显拉长。
  • Dubbo3 新引入的应用级服务发现模型,可以进一步实现在资源占用方面的大幅下降,常驻内存比 Dubbo3 接口级地址进一步下降 40%,应用实例扩缩容场景增量内存分配基本为零,相同周期内(1 小时) Full GC 减少为 2 次。

Dubbo 3.0 作为未来支撑业务系统的核心中间件,其自身对资源占用率以及稳定性的提升对业务系统毫无疑问将带来很大的帮助。

背景介绍

1. 下一代服务框架 Dubbo 3.0 简介

一句话概括 Dubbo 3.0它是 HSF & 开源 Dubbo 后的融合产品,在兼容两款框架的基础上做了全面的云原生架构升级,它将成为未来面向阿里内部与开源社区的主推产品

Dubbo 3.0 诞生的大背景是阿里巴巴在推动的全站业务上云,这为我们中间件产品全面拥抱云上业务,提供内部、开源一致的产品提出了要求也提供了契机,让中间件产品有望彻底摆脱自研体系、开源体系多线作战的局面,有利于实现价值最大化的局面。一方面阿里电商系统大规模实践的经验可以输出到社区,另一方面社区优秀的开发者也能参与到项目贡献中。以服务框架为例,HSF 和 Dubbo 都是非常成功的产品:HSF 在内部支撑历届双十一,性能优异且久经考验;而在开源侧,Dubbo 坐稳国内第一开源服务框架宝座,用户群体非常广泛。

同时维护两款高度同质化的产品,对研发效率、业务成本、产品质量与稳定性都是非常大的考验。举例来说,首先,Dubbo 与 HSF 体系的互通是一个非常大的障碍,在阿里内部的一些生态公司如考拉、饿了么等都在使用 Dubbo 技术栈的情况下,要实现顺利平滑的与 HSF 的互调互通一直以来都是一个非常大的障碍;其次,产品不兼容导致社区输出成本过高、质量验收等成本也随之增长,内部业务积累的服务化经验与成果无法直接赋能社区,二次改造适配 Dubbo 后功能性、稳定性验收都要重新投入验证。为彻底解决以上问题,结合上文提到的阿里集团业务整体上云、开源以及云产品输出战略,我们制定了全面发展 Dubbo 3.0 的计划。

1.png

2. Dubbo 不同版本在地址推送链路上的性能压测与对比

下图是服务框架的基本工作原理,橙色路径即为我们此次重点压测的地址推送链路,我们重点关注在百万地址实例推送的情况下,Dubbo 不同版本 Consumer 间的差异,尤其是 Dubbo 3.0 的实际表现。

2.png

作为对比,我们选取了以下场景进行压测:

  • Dubbo2,此次压测的参考基线
  • Dubbo3 接口级地址发现模型,与 Dubbo2 采用的模型相同
  • Dubbo3 应用级地址发现模型,由云原生版本引入,详细讲解请参见这篇文章

压测环境与方法

  • 压测数据

本次压测模拟了 220w(接口级)集群实例地址推送的场景,即单个消费端进程订阅 220w 地址。

  • 压测环境

8C16G Linux,JVM 参数中堆内存设置为 10G。

  • 压测方法

Consumer 进程订阅 700 个接口,ConserverServer 作为注册中心按一定比例持续模拟地址变更推送,持续时间 1 hour+,在此过程中统计 Consumer 进程以及机器的各项指标。

优化结果分析与对比

1. GC 耗时与分布

3.png
Dubbo2 接口级地址模型

4.png
Dubbo3 接口级地址模型

5.png
Dubbo3 应用级地址模型

2. 增量内存分配情况

6.png
Dubbo2 接口级地址模型

7.png
Dubbo 3.0 接口级地址模型

8.png
Dubbo3 应用级地址模型

3. OLD 区与常驻内存

9.png
Dubbo2 接口级模型

10.png
Dubbo3 接口级模型

11.png
Dubbo3 应用级模型

4. Consumer 负载

12.png
Dubbo3 接口级模型

13.png
Dubbo3 应用级模型

详细对比与分析

1. Dubbo2 接口模型 VS Dubbo3 接口模型

在 200w 地址规模下,Dubbo2 很快吃满了整个堆内存空间,并且大部分都无法得到释放,而由此触发的频繁的 GC,使得整个 Dubbo 进程已无法响应,因此我们压测数据采集也没有持续很长时间。

同样保持接口级地址模型不变,经过优化后的 Dubbo3 ,在 1 个小时之内只有 3 次 Full GC,并且持续推送期间不可释放内存大概下降在 1.7G。

2. Dubbo3 接口模型 VS Dubbo3 应用模型

当切换到 Dubbo3 应用级服务发现模型后,整个资源占用情况又出现了明显下降,这体现在:

  • 应用进程上下线场景,增量内存增长很小 (接口级的 MetadataData 基本得到完全复用,新增部分仅来自新扩容机器或部分服务的配置变更)。
  • 常驻内存相比 Dubbo3 接口级又下降了近 40%,维持在 900M 左右。

值得一提的是,当前的应用级地址推送模型在代码实现还有进一步优化的空间,比如 Metadata 复用、URL 对象复用等,这部分工作将是我们后续探索的重点。

总结

Dubbo 3.0 目前已经实现了 Dubbo&HSF 的全面融合,云原生方案也在全面推进中。在刚刚过去的双十一中,Dubbo 3.0 平稳支撑了考拉业务,并且也已经通过阿里其他一些电商应用的部分线上试点。后续我们将专注在推动 Dubbo 3.0 的进一步完善,一方面兑现应用级服务发现、全新服务治理规则、下一代 Triple 协议等,另一方面兑现我们立项之初设定的资源占用、性能、集群规模等非功能性目标。

此次推送链路的性能压测,是落地/研发过程中的一次阶段性验收,应用级服务发现在资源占用方面大幅下降,让我们看到了新架构对未来构建真正可伸缩集群的可行性,这更坚定了我们对应用级服务发现架构的信心。后续迭代中,在继续完善接口级、应用级两种模型并实现 Dubbo 3.0 的全面性能领先后,我们将专注在迁移方案的实现上,以支持老模型到新模型的平滑、透明迁移。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
21天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
45 2
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
3月前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
247 0
|
3月前
|
Dubbo Java 应用服务中间件
💥Spring Cloud Dubbo火爆来袭!微服务通信的终极利器,你知道它有多强大吗?🔥
【8月更文挑战第29天】随着信息技术的发展,微服务架构成为企业应用开发的主流模式,而高效的微服务通信至关重要。Spring Cloud Dubbo通过整合Dubbo与Spring Cloud的优势,提供高性能RPC通信及丰富的生态支持,包括服务注册与发现、负载均衡和容错机制等,简化了服务调用管理并支持多种通信协议,提升了系统的可伸缩性和稳定性,成为微服务通信领域的优选方案。开发者仅需关注业务逻辑,而无需过多关心底层通信细节,使得Spring Cloud Dubbo在未来微服务开发中将更加受到青睐。
82 0
|
24天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
214 17
微服务框架Dubbo环境部署实战
|
2月前
|
Dubbo 应用服务中间件 Apache
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
在 Apache Dubbo 突破 4w Star 之际,Apache Dubbo 团队正式宣布,Dubbo 3.3 正式发布!作为全球领先的开源微服务框架,Dubbo 一直致力于为开发者提供高性能、可扩展且灵活的分布式服务解决方案。此次发布的 Dubbo 3.3,通过 Triple X 的全新升级,突破了以往局限,实现了对南北向与东西向流量的全面支持,并提升了对云原生架构的友好性。
134 10
|
3月前
|
监控 Java 开发者
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流。本文探讨Java微服务架构的设计原则与实践。核心思想是将应用拆分为独立服务单元,增强模块化与扩展性。Java开发者可利用Spring Boot等框架简化开发流程。设计时需遵循单一职责、自治性和面向接口编程的原则。以电商系统为例,将订单处理、商品管理和用户认证等拆分为独立服务,提高可维护性和容错能力。还需考虑服务间通信、数据一致性及监控等高级话题。掌握这些原则和工具,开发者能构建高效、可维护的微服务应用,更好地应对未来挑战。
86 1
|
3月前
|
开发框架 Dubbo 应用服务中间件
微服务开发框架-----Apache Dubbo
这篇文章介绍了Apache Dubbo微服务开发框架,它提供RPC通信和微服务治理能力,支持服务发现、负载均衡和流量治理等功能,并强调了Dubbo在微服务规模化实践和企业级治理方面的优势。
微服务开发框架-----Apache Dubbo
|
3月前
|
负载均衡 Dubbo 应用服务中间件
框架巨擘:Dubbo如何一统异构微服务江湖,成为开发者的超级武器!
【8月更文挑战第8天】在软件开发中,微服务架构因灵活性和可扩展性备受欢迎。面对异构微服务的挑战,Apache Dubbo作为高性能Java RPC框架脱颖而出。它具备服务注册与发现、负载均衡及容错机制等核心特性,支持多种通信协议和序列化方式,能有效连接不同技术栈的微服务。Dubbo的插件化设计保证了面向未来的扩展性,使其成为构建稳定高效分布式系统的理想选择。
55 5
下一篇
无影云桌面