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

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

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

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

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

看Dubbo3带来了什么?

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

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

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

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

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

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

“虎”年Dubbo3虎虎生威!

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

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

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

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

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

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

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

云原生走出的重要一步

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

对超大规模的影响

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

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

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

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

  • 部署态:接口应用的映射,主要通过了上面的元数据中心,可进行管理接口到应用的映射以及应用级的元数据。Dubbo框架会自动上报这个关系到元数据中心。
  • 运行态:会将Dubbo侧的配置以及运行用户侧的配置和服务治理则通过这份映射关系重新将应用粒度映射到接口粒度,此部分同时也会上报的元数据中心
  • 会将作为应用服务实例和应用绑定关系进行上报,应用级选址和接口级选址同时存在,方便进行服务治理。
存储的模型结构案例

swift

复制代码

{
    "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 以及请求/响应数据,如下图所示。

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配置一样。

yaml

复制代码

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,虎年蒸蒸日上,光彩夺目,为云原生时代,提供更多的力量和能源。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
11天前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
11天前
|
SpringCloudAlibaba Dubbo 应用服务中间件
【微服务】微服务初步认识 - 微服务技术如何学习 · 认识微服务架构
【微服务】微服务初步认识 - 微服务技术如何学习 · 认识微服务架构
24 0
|
1天前
|
Dubbo Cloud Native 应用服务中间件
【阿里云云原生专栏】云原生环境下的微服务治理:阿里云 Dubbo 与 Nacos 的深度整合
【5月更文挑战第25天】阿里云Dubbo和Nacos提供微服务治理的强大工具,整合后实现灵活高效的治理。Dubbo是高性能RPC框架,Nacos则负责服务发现和配置管理。整合示例显示,通过Nacos注册中心,服务能便捷注册发现,动态管理配置。简化部署,提升适应性,但也需注意服务稳定性和策略规划。这种整合为云原生环境的微服务架构带来强大支持,未来应用前景广阔。
10 2
|
6天前
|
API 持续交付 开发者
构建高效微服务架构的五大关键技术
【5月更文挑战第20天】 在当前数字化转型的浪潮中,微服务架构因其灵活性、可扩展性而成为众多企业的首选。本文深入剖析了构建和维护高效微服务架构的五大关键技术:容器化技术、服务网格、API网关、持续集成/持续部署(CI/CD)和分布式追踪。通过这些技术的整合使用,可以显著提高系统的可靠性、弹性及开发效率。
|
6天前
|
监控 负载均衡 Java
【阿里云云原生专栏】微服务架构在阿里云云原生平台上的应用实例与优化策略
【5月更文挑战第20天】本文介绍了在阿里云云原生平台实现微服务架构的步骤,包括基于Spring Cloud的Docker化部署、使用ACK部署微服务,以及优化策略:服务发现与负载均衡(借助Istio)和监控日志管理。通过这种方式,企业能提升应用的可扩展性、可维护性和敏捷性。
189 5
|
11天前
|
Kubernetes Cloud Native 持续交付
构建高效稳定的云原生应用:容器编排与微服务治理实践
【5月更文挑战第14天】 随着企业数字化转型的深入,云原生技术以其弹性、敏捷和可扩展的特性成为现代应用开发的首选模式。本文将探讨如何通过容器编排工具如Kubernetes以及微服务架构的有效治理,构建和维护高效且稳定的云原生应用。我们将分析容器化技术的优势,并结合案例讨论在多云环境下实现持续集成、持续部署(CI/CD)的最佳实践,同时解决微服务带来的分布式复杂性问题。通过本文的阐述,读者将获得一套提升系统可靠性和业务连续性的策略框架。
16 0
|
11天前
|
负载均衡 持续交付 API
构建高效微服务架构的五大关键技术
【5月更文挑战第13天】在当前软件开发领域,微服务架构已经成为一种流行趋势。本文将探讨构建高效微服务架构的五大关键技术,包括容器化部署、服务发现与注册、API网关、负载均衡以及持续集成与持续部署。这些技术可以帮助开发团队更快速、更可靠地构建和部署微服务应用,提高系统的可扩展性和可维护性。
|
11天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:Kubernetes与微服务架构的融合
【5月更文挑战第6天】 在数字化转型的浪潮中,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了如何利用Kubernetes这一领先的容器编排平台,结合微服务架构,构建和维护高效、可伸缩的云原生应用。通过分析现代软件设计原则和最佳实践,我们提出了一个综合指南,旨在帮助开发者和系统架构师优化云资源配置,提高部署流程的自动化水平,并确保系统的高可用性。
34 1
|
11天前
|
负载均衡 API 数据库
构建高效微服务架构的五大关键技术
【5月更文挑战第4天】 随着云计算和容器化技术的成熟,微服务架构已成为软件开发的主流模式。本文将详细探讨实现高效微服务架构的五个关键技术点:服务拆分策略、API网关设计、服务发现与注册、熔断机制以及分布式事务管理。这些技术点是确保微服务系统可扩展性、灵活性及稳定性的基石,对于后端开发者而言,掌握它们至关重要。文章将提供具体的实施建议和最佳实践,帮助读者构建和维护高性能的微服务系统。
|
11天前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用构建高效微服务架构:后端开发的新范式
【4月更文挑战第30天】 随着企业加速其数字化进程,云原生架构已成为支撑复杂、可伸缩和灵活应用的骨干。本文探讨了云原生技术的崛起,重点分析了其在促进业务敏捷性、提高运营效率及推动创新方面的核心价值。通过深入剖析云原生生态系统的关键技术组件,如容器化、微服务、持续集成/持续部署(CI/CD)和DevOps实践,揭示了企业如何利用这些技术来构建和维护高度可用且动态的IT环境。文章还提出了一个多维度的采纳框架,帮助企业评估和实施云原生解决方案,以实现真正的业务价值。 【4月更文挑战第30天】在现代软件开发的快速演变中,微服务架构已经成为一种领先的设计模式,用于构建可扩展、灵活且容错的应用程序。与传

热门文章

最新文章