【Dubbo3.0技术专题】拥有新时代的通信协议,引领云原生迈向更高的舞台 | 解密Dubbo3是如何从微服务升华到云原生领域

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 【Dubbo3.0技术专题】拥有新时代的通信协议,引领云原生迈向更高的舞台 | 解密Dubbo3是如何从微服务升华到云原生领域

感谢2020云原生微服务给我带来了云原生的希望!


image.png

Dubbo3拥抱云原生升级总体路线


image.png



我们会侧重于下面红色填充的部分,针对于Dubbo3云原生技术的领域的探索和研究:

image.png



看Dubbo3带来了什么?


要是说到Dubbo想必大家应该知道,它是一个Java技术领域的RPC框架,但是为什么今天要把它和云原生挂钩了呢?因为迎接着云原生的不断更新和升级,Dubbo没有停滞不前,创造了Dubbo3,它摒弃了之前的缺点,从而创造了更多更多的奇迹,特别是兼容了云原生技术

image.png

“鼠”年给云原生建立好的开端


摘自官网资料中的Dubbo3的虎年的发展计划:

image.png


“牛”年完美收官和中肯评价


Dubbo3是Apache顶级项目Dubbo的一个非常具有里程碑性质的版本,它是让Dubbo服务体系全面拥抱云原生的一个重要节点。


去年的11月会官方又发布了Dubbo3.1版本,同时社区也组织了相关的Dubbo在Mesh 场景下部署的实现与实践的案例分享沙龙



“虎”年Dubbo3虎虎生威!


官方计划在今年3月会发布Dubbo3.2版本:这个版本中将带来全新的大规模应用部署下智能流量调度机制,提高系统稳定性与资源利用率。


Dubbo3目前已经和阿里巴巴集团内部的 RPC 框架实现了融合,期望用它来解决内部落地问题,做到技术栈统一。(官方介绍)




直奔主题,迈向云原生时代


如果你看到了这里,那么接下来你将会认识Dubbo3的诞生将如何引领微服务领域更进一步,从而迈入云原生的领域,这当然不仅仅是Dubbo3,之前也介绍了Java生态另外一个云原生领域的技术Quarkus等技术,而本文内容侧重点去介绍Dubbo3迈向云原生的技术分析和探索,如果有不正确的地方,还需要大家多多指正。


如何转型微服务到云原生?


如今已经全面得到全面发展的云原生技术时代,Dubbo3全面拥抱云原生,将Dubbo原本的架构进行了升级,形成 【全新的服务发现模型】【下一代云原生服务通信协议】【完美支持云原生基础设施】 的方案。


  • (取其精华) Dubbo3依然会保留之前已有的开箱即用落地实践的优点。
  • (去其糟粕) Dubbo3将会剔除不符合云原生架构理念,将会更好的复用底层云原生基础设施并且将会更加支持云原生的微服务架构。


去其糟粕,重新整顿治理模型


image.png

云原生走出的重要一步


了解Dubbo的开发者都知道,Dubbo之前的服务治理都是接口层级的。同一个应用发布的多个服务会在注册中心注册多份数据,注册服务的元数据相互独立。但是存储在注册中心中的数据会在很大程度上存在重复的内容,其实浪费了一部分的存储。


对超大规模的影响


当整个集群的规模足够大的时候,由于服务注册发现是服务维度的,注册中心的数据量就会爆发式地增长。


在2020年云原生微服务大会上,Dubbo已经出现了服务治理层面的改造升级的雏形,它将原本的接口层级的服务治理模型改造成为了应用层级,同时也引入了其他的核心组件,完美的解决了接口以及应用指令层面的都兼容的场景!下图就是两种不同方式的服务治理机制:

image.png

左边图是Dubbo早起版本的架构模型,右边图是Dubbo3的服务治理架构图。


主要总体和新的服务治理机制划分了两个状态:


  • 部署态:接口应用的映射,主要通过了上面的元数据中心,可进行管理接口到应用的映射以及应用级的元数据。Dubbo框架会自动上报这个关系到元数据中心。


  • 运行态:会将Dubbo侧的配置以及运行用户侧的配置和服务治理则通过这份映射关系重新将应用粒度映射到接口粒度,此部分同时也会上报的元数据中心
  • 会将作为应用服务实例和应用绑定关系进行上报,应用级选址和接口级选址同时存在,方便进行服务治理。



存储的模型结构案例
{
    "name": "provider-service",
    "id": "192.168.1.1:20880",
    "address": "192.168.0.102",
    "port": 20880,
    "sslPort": null,
    "payload": {
        "id": null,
        "name": "provider-service",
        "metadata": {
        "metadataService": "{\"dubbo\":{\"version\":\"1.0.0\",\"dubbo\":\"2.0.2\",\"release\":\"2.7.5\",\"port\":\"20881\"}}",
            "endpoints": "[{\"port\":20880,\"protocol\":\"dubbo\"}]",
            "storage-type": "local",
            "revision": "6785535733750099598",
        }
    },
    "registrationTimeUTC": 1583461240877,
    "serviceType": "DYNAMIC",
    "uriSpec": null
}
复制代码



异构化体系或者语言通信


Dubbo与其他服务生态的通信


目前Spring cloud和K8s 都是基于实例,也就是应用级别进行的注册发现,Dubbo要成为连接异构系统最好用的RPC框架就需要支持实例粒度;



应用级别治理机制,打通了与其他微服务体系之间在地址发现层面的鸿沟,也成为适配 Kubernetes Native Service 等基础设施的技术理论基础。



去其糟粕,开创跨生态协议


如果想要完成对云原生的转化出了上述解决了的问题之外,仍然还要有两个需要攻克的难题:

协议不够标准和通用化,导致语言生态无法互通


Dubbo原有的协议提供了RPC技术体系的核心骨架组成。其中,协议头、标志位、请求 ID 以及请求/响应数据,如下图所示。

image.png

Dubbo协议基于二进制流定制了与 RPC 强绑定的核心语义:上图所示就是之前Dubbo版本的协议组成部分,其结构分布会让用户很难直接理解,基本上都属于Dubbo自定义以及非标准的格式组成部分。细节不多说,大家可以看到有16位的高魔术头和低魔术头组成、数据包协议类型,事件类型、序列化方式等。而对于越来越多的云原生治理设施,比如Kubernete Service。


协议头包含的原始数据信息过多,对云原生的介入造成阻碍


Dubbo协议的协议头已无法再承载更多的元数据信息。Service Mesh组件,需要对数据进行治理那么需要对更加完整的数据包进行解析才能获取到必要的元数据信息(如 RPC 上下文),从性能到易用性方面都会面临挑战。


协议层面需要做的改进和升级要点


  1. 需要一个统一格式和标准的跨语言


  • 采用Grpc和Http2的协议格式,作为统一的标准化格式协议基础,并且支持原生的grpc协议模式


  • 此外还可以支持平滑的支持迁移到protobuf协议机制


  1. 需要较为完整的服务治理的功能机制


  • 采用了较为符合云原生服务架构机制,应用层级的服务治理体系。


  • 协议应该提供更完善的请求模型,除了 Request/Response 模型,还应该支持 Streaming 和 Bidirectional;




下一代云原生协议——Triple协议机制


Triple协议是Dubbo3新时代产物协议,它可以兼容gRPC和HTTP/2,并在协议层面扩展了负载均衡和流量控制相关机制,以及可以在原有的基础上进行对protobuf协议的平滑迁移处理。


  • (与GRPC的互通性)Dubbo3新协议是基于GRPC扩展的协议,这也保证了在生态系统上新协议和 GRPC 是能够互通和共享的;


  • (与Protobuf迁移性)在序列化方面,新协议会在序列化方面给予足够的支持,平滑的适配现有序列化,方便迁移到Protobuf;


更多内容可以参考文章:dubbo.apache.org/zh/docs/v3.…





兼容Kubernetes基础设施组件


针对于Kubernetes的基础设施的兼容和介入,主要包含两个部分:Kubernetes 生命周期对齐探针和Mesh的支持。




对齐 K8s 的生命周期


能够让 Dubbo 服务原生的在 K8s 体系内注册和发现,这都要归功于自身所带的探针技术。K8s的Pod的生命周期与服务调度息息相关,通过对 Kubernetes 官方探针的实现,能够使 Dubbo乃至整个应用的生命周期与 Pod 的生命周期对齐。


通过Dubbo的SPI机制,在内部实现多种“探针”,基于Dubbo QOS运维模块的HTTP服务,使容器探针能够获取到应用内对应探针的状态。另外,SPI 的实现机制也利于用户自行拓展内部“探针”,使整个应用的生命周期更有效的进行管控。


  • Startup 启动探针
  • Liveness 存活探针
  • Readiness 就绪探针


Triple协议通过使用HTTP2进行 header/payload分离解决了网关需要解析完整协议的问题。




Mesh的xDS的机制体系


服务注册发现和治理,注册发现需要 Dubbo 能够在 Mesh的xDS体系内作为数据面打通。

治理则需要将原有的规则逐步迁移至基于  YAML 的剔除 IP 依赖的规则。最终的形态将是原生的 Dubbo 服务能够和基于 thin SDK 的 Dubbo + Mesh 完美互通和进行服务治理。


Service Name - > Dubbo RPC Service,Kubernetes要维护调度的服务与应用内建 RPC 服务绑定,维护的服务数量变多,而对于Kubernetes Service 作为一个抽象概念,Service Name - > Application Name,Dubbo应用和Kubernetes 服务一一对应,对于微服务运维和建设环节透明,与开发阶段解耦,例如service配置一样。

apiVersion: v1
kind: Service
metadata:
  name: rpc-service-1
spec:
  selector:
    app: provider-app-name
  ports: ##
---
apiVersion: v1
kind: Service
metadata:
  name: rpc-service-2
spec:
  selector:
    app: provider-app-name
  ports: ##
---
apiVersion: v1
kind: Service
metadata:
  name: rpc-service-N
spec:
  selector:
    app: provider-app-name
  ports: ##
...
复制代码




Dubbo3的架构分布


摘自官网的Dubbo3的架构分布,细思极恐,多么完整和庞大的生态,祝愿Dubbo3,虎年蒸蒸日上,光彩夺目,为云原生时代,提供更多的力量和能源。


image.png


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
机器学习/深度学习 Kubernetes Cloud Native
云原生技术演进之旅:从容器到服务网格
在云计算的浪潮中,云原生技术以其独特的灵活性和可扩展性引领了新的技术革命。本文将深入探讨云原生技术的发展脉络,从容器技术的突破,到Kubernetes的集群管理,再到服务网格的微服务通信解决方案,揭示云原生如何不断适应和塑造现代应用的需求。文章将通过数据支撑和案例分析,展示云原生技术在实际应用中的优势和挑战,并预测其未来的发展趋势。
17 1
|
2天前
|
Cloud Native 持续交付 云计算
云原生技术在现代企业中的发展与应用
【7月更文挑战第25天】随着云计算技术的不断成熟,云原生技术已经成为现代企业数字化转型的重要推手。本文将深入探讨云原生技术的核心概念、优势及其在企业中的应用实例,分析云原生技术如何促进企业的敏捷性、可扩展性和资源效率。通过案例研究,我们将揭示云原生架构在提高开发速度、降低成本和增强业务连续性方面的实际效益。
|
4天前
|
Cloud Native 安全 持续交付
云原生技术在现代企业中的应用与挑战
【7月更文挑战第23天】本文深入探讨了云原生技术在现代企业中的广泛应用及其带来的挑战。从容器化、微服务架构到持续集成与持续部署(CI/CD),文章详细分析了这些技术如何促进企业的数字化转型。同时,也指出了企业在采用云原生技术过程中可能遇到的安全、成本和技术适配等挑战,并提供了相应的解决策略。
17 6
|
7天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代企业的应用与挑战
【7月更文挑战第19天】随着云计算技术的不断成熟,云原生技术已成为推动企业数字化转型的重要力量。本文将深入探讨云原生技术的核心概念、关键技术组件以及其在现代企业中的应用实例。同时,文章也将分析企业在采用云原生技术过程中面临的主要挑战,并提出相应的解决策略,旨在为企业实现技术创新和业务增长提供参考和指导。
30 7
|
6天前
|
运维 Cloud Native 安全
云原生技术在现代企业中的应用与挑战
【7月更文挑战第21天】随着云计算技术的飞速发展,云原生作为一种新兴的构建和运行应用程序的方法,正逐渐成为企业数字化转型的核心。本文将深入探讨云原生技术的基本概念、核心优势以及在实际应用中面临的挑战,旨在为企业提供云原生转型的参考和指导。
|
2天前
|
运维 Kubernetes Cloud Native
云原生技术浪潮中的航舵——容器编排与微服务架构
在数字化时代的洪流中,企业正面临着前所未有的技术转型压力。云原生技术作为一种新兴的IT架构模式,以其高效、灵活和可扩展的特性成为企业数字化转型的重要推手。本文将深入探讨云原生技术的核心组成部分——容器编排和微服务架构,揭示它们如何共同作用于现代软件开发和运维流程中,以及它们对提升业务敏捷性、加速产品迭代的深远影响。通过分析具体的案例和最新的行业数据,本文旨在为读者提供一个关于云原生技术应用的全景视图,同时指出实施过程中可能遇到的挑战及应对策略。
4 0
|
5天前
|
运维 Kubernetes Cloud Native
云原生技术的未来演进:探索服务网格和无服务器架构的融合
随着企业数字化转型的不断深入,云原生技术已成为推动现代软件开发的关键力量。本文深入探讨了服务网格和无服务器架构这两大云原生技术趋势,分析了它们各自的优势以及未来可能的融合点。通过对比分析和案例研究,我们揭示了这两种技术如何互补并共同推进云原生生态系统的发展,同时指出了实践中面临的挑战和潜在的解决方案。 【7月更文挑战第22天】
|
5天前
|
Rust Cloud Native Java
在云原生环境下,哪种类型的语言或技术可能更具优势
在云原生环境下,哪种类型的语言或技术可能更具优势?
|
7天前
|
运维 Cloud Native 云计算
云原生技术在现代企业中的应用与挑战
随着云计算技术的不断成熟,云原生技术已成为推动企业数字化转型的重要力量。本文将深入探讨云原生技术的核心概念、优势以及在现代企业中的应用案例,并分析企业在实践中可能遇到的挑战和解决策略。通过对比传统IT架构与云原生架构的差异,揭示云原生技术如何助力企业实现更高效的资源利用、更快的迭代速度和更强的业务连续性。同时,文章还将提供一系列实施云原生技术的最佳实践,旨在为企业决策者和技术人员提供实用的参考和指导。
11 0
|
7天前
|
监控 Cloud Native 安全
云原生技术在现代企业中的应用与挑战
随着信息技术的飞速发展,云计算已从简单的资源租用演变为复杂的服务模型。特别是云原生技术,以其独特的灵活性、可扩展性和弹性,正成为推动现代企业数字化转型的关键力量。本文将深入探讨云原生技术的核心组件,如容器化、微服务架构和持续集成/持续部署(CI/CD),并分析其在实际应用中面临的安全、合规性及管理复杂性等挑战。通过引用最新的行业数据和技术案例,本文旨在为读者提供云原生技术的全面视角,同时指出企业采纳该技术时需考虑的关键因素。

热门文章

最新文章