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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 【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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
12天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
25天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
48 2
|
1天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
14 5
|
2天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理策略
随着云原生技术的不断成熟,微服务架构已成为现代应用开发的主流选择。本文探讨了在云原生环境下实施微服务治理的策略和方法,重点分析了服务发现、负载均衡、故障恢复和配置管理等关键技术点,以及如何利用Kubernetes等容器编排工具来优化微服务的部署和管理。文章旨在为开发者提供一套实用的微服务治理框架,帮助其在复杂的云环境中构建高效、可靠的分布式系统。
14 5
|
2天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
1天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
2天前
|
Cloud Native API 持续交付
云原生之旅:从容器到微服务的演进之路
【10月更文挑战第39天】在这篇文章中,我们将一起探索云原生技术的奥秘。通过浅显易懂的语言和生动的比喻,我们将了解云原生技术如何改变软件开发的世界。文章将带领读者从容器的基本概念出发,逐步深入到微服务架构的实践,揭示这些技术如何助力现代应用的快速迭代与可靠部署。准备好,让我们启程进入云原生的精彩世界吧!
|
4天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
|
12天前
|
Kubernetes Cloud Native 微服务
云原生之旅:从容器到微服务
【10月更文挑战第29天】在这篇文章中,我们将一起探索云原生的奥秘。云原生不仅仅是一种技术,更是一种文化和方法论。我们将从容器技术开始,逐步深入到微服务架构,最后探讨如何在云平台上实现高效的服务部署和管理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的技能。让我们一起踏上这段激动人心的云原生之旅吧!