作者:李斌、邱炜
背景
我们公司从 2015 年开始就使⽤ Dubbo 作为微服务框架,当社区推出 Dubbo 3 时,我们也⽴刻跟进并做了深⼊调研,发现 Dubbo 3 的应⽤/实例级服务注册和发现模式能够在一定程度上解决我们当前注册中⼼⾯临的压⼒,解决稳定性和安全性问题。同时 Dubbo 3 在服务治理上也做了升级,契合云原⽣架构,⽽且 Dubbo 3 能够向下兼容 Dubbo 2,这也将降低升级的成本和⻛险。
升级项目有了阶段性的进展,目前仍然在进行中。通过本⽂,我们对公司内部的 Dubbo 3 升级过程及收益等做了深⼊总结。
社区关于 Dubbo 3 的核心功能介绍
Dubbo 社区关于 Dubbo 3 的文档和资料越来越完善,以下是我们从社区引用的一些内容。
下一代云原生服务框架
Dubbo 3 被社区寄予厚望,将其视为下一代云原生服务框架打造,Dubbo 3 提供的核心特性列表,主要包括四部分。
-
全新服务发现模型。应用粒度服务发现,面向云原生设计,适配基础设施与异构系统;性能与集群伸缩性大幅提升。
-
下一代 RPC 协议 Triple。基于 HTTP/2 的 Triple 协议,兼容 gRPC;网关穿透性强、多语言友好、支持 Reactive Stream。
-
统一流量治理模型。面向云原生流量治理,SDK、Mesh、VM、Container 等统一治理规则;能够支持更丰富的流量治理场景。
-
Service Mesh。在最新的3.1.0的版本中支持Sidecar Mesh 与 Proxyless Mesh,提供更多架构选择,降低迁移、落地成本。
首先是性能、资源利用率的提升。社区资料显示,升级 Dubbo 3 的应用预期能实现单机内存 50% 的下降,对于越大规模的集群效果将越明显,Dubbo 3 从架构上支持百万实例级别的集群横向扩展,同时依赖应用级服务发现、Triple 协议等可以大大提供应用的服务治理效率和吞吐量。
其次,Dubbo 3 让业务架构升级变得更容易、更合理,尤其是 RPC 协议,在 2.x 版本中,web、移动端与后端的通信都要经过网关代理,完成协议转换、类型映射等工作,Dubbo 3 的 Triple 协议让这些变得更容易与自然;并通过流式通信模型满足更多的使用场景。
最后,得益于 Dubbo 3 的完善云原生解决方案,Dubbo 3 的 Mesh 架构可以帮助业务屏蔽底层云原生基础设施细节,让业务更专注于业务,这也是 Mesh 的最根本的优势。
应用级服务发现核心原理
我们从 Dubbo 最经典的工作原理图说起,Dubbo 从设计之初就内置了服务地址发现的能力,Provider 注册地址到注册中心,Consumer 通过订阅实时获取注册中心的地址更新,在收到地址列表后,Consumer 基于特定的负载均衡策略发起对 Provider 的 RPC 调用。
在这个过程中:
- 每个 Provider 通过特定的 key 向注册中心注册本机可访问地址;
- 注册中心通过这个 key 对 Provider 实例地址进行聚合;
- Consumer 通过同样的 key 从注册中心订阅,以便及时收到聚合后的地址列表;
再来看一下 Provider 向注册中心注册的