其他分享
首页 > 其他分享> > Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(序章)

Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(序章)

作者:互联网

Dubbo的背景介绍

Apache Dubbo 是一款微服务开发框架(是一款高性能、轻量级的开源 Java 服务框架),它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。

Dubbo的功能特性

  1. 面向接口代理的高性能RPC调用;

  2. 服务自动注册与发现;

  3. 智能负载均衡策略;

  4. 高度可扩展能力;

  5. 运行期流量调度;

  6. 可视化的服务治理与运维;

Dubbo的框架结构

Dubbo的发展历程

Dubbo3.0诞生归来

Dubbo3 基于 Dubbo2 演进而来,在保持原有核心功能特性的同时, Dubbo3 在易用性、超大规模微服务实践、云原生基础设施适配等几大方向上进行了全面升级。 以下文档都将基于 Dubbo3 展开。

Dubbo3.0扩展延伸

从功能上看,Dubbo3.完成后的功能将涵盖从开发人员直接接触的 API 层到底层传输的完整链路。

Maven 依赖

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>3.0.0</version>
</dependency>

Dubbo3官方文档

Dubbo3核心功能

  1. 应用级服务发现机制;
    • 同时 Dubbo 3.0.0 改变以前的接口级服务注册而是采用应用级服务注册,什么意思呢?比如在3.0.0版本前所有的服务都是以接口形式的元数据进行注册如下元数据:
    dubbo://192.168.101.8:20880/com.example.demo.async.api.BookFacade?anyhost=true&application=demo-provider&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.example.demo.async.api.BookFacade&metadata-type=remote&methods=queryByName,queryAll&pid=53639&release=3.0.0&side=provider&timestamp=1624889509797
    
    • 可以看到如果我们以接口级进行服务注册会存在大量的重复数据,这样就会导致注册中心数据与接口数量成正比,接口越多注册的元数据就越多。而如果我们以应用级服务注册会是怎样的?下面是应用级服务注册的共享元数据:
    {
    "name": "demo-provider",
    "id": "192.168.101.8:20880",
    "address": "192.168.101.8",
    "port": 20880,
    "sslPort": null,
    "payload": {
        "@class": "org.apache.dubbo.registry.zookeeper.ZookeeperInstance",
        "id": null,
        "name": "demo-provider",
        "metadata": {
            "anyhost": "true",
            "application": "demo-provider",
            "deprecated": "false",
            "dubbo": "2.0.2",
            "dubbo.endpoints": "[{\"port\":20880,\"protocol\":\"dubbo\"}]",
            "dubbo.metadata-service.url-params": "{\"version\":\"1.0.0\",\"dubbo\":\"2.0.2\",\"release\":\"3.0.0\",\"port\":\"20880\",\"protocol\":\"dubbo\"}",
            "dubbo.metadata.revision": "525892dddd25ea459ee539d0734b2f1a",
            "dubbo.metadata.storage-type": "remote",
            "dynamic": "true",
            "generic": "false",
            "interface": "com.example.demo.async.api.BookFacade",//多个服务接口只保存一个
            "metadata-type": "remote",
            "methods": "queryByName,queryAll",
            "pid": "63941",
            "release": "3.0.0",
            "side": "provider",
            "timestamp": "1624891074206"
        }
    },
    "registrationTimeUTC": 1624891075236,
    "serviceType": "DYNAMIC",
    "uriSpec": null
    }
    
    • 从这些共享元数据可以看出应用级注册减少了大量重复的元数据,能最大幅度的减轻注册中心的存储、推送压力,进而减少 Dubbo 消费端的地址计算压力。集群规模也开始变得可预测、可评估(与 RPC 接口数量无关,只与实例部署规模相关)。

    • Dubbo3之前注册发现都是接口级别的。也就是同一个应用发布的多个服务会在注册中心注册多份数据,这些数据彼此独立,方便进行服务化改造和接口迁移。为什么要提出应用级注册发现呢?

      • 主要有两个原因:

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

        • 二是从规模上看,更大规模的增长会带来元数据的极速膨胀,这会给注册中心和客户端带来更大的内存占用。按照现有数据分析,如果升级到应用级注册发现,以平均发布 50 个服务的应用为例,将减少 60% 的内存占用和注册中心数据。以发布超过 10k 接口的平台型应用为例,这些数据可降低 90%。

  1. 下一代RPC协议:Triple:Triple 协议是 Dubbo3 的主力协议,完整兼容 gRPC over HTTP/2,并在协议层面扩展了负载均衡和流量控制相关机制。

  2. 全新的路由规则;

  3. 显著提升性能;

  4. Kubernetes 服务集成:

    • Dubbo3主要在云服务能力上做了新的能力提升。为什么这么说呢?因为作者之前在工作中集成 Kubernetes 时候服务注册中心这个组件能力就非常的尴尬,因为 Kubernetes 本身就提供了服务注册与发现能力,但是不能和 Dubbo 完美整合起来。

    • Dubbo3之前我们的实现方式可能就是在Kubernetes部署一个 zookeeper 服务集群来进行服务注册与发现。但这样的实现方式在云服务应用来说并不是太合适,这种服务注册和发现能力交给基础服务组件来实现比较合适。

Dubbo3.0原生微服务

承接上面对K8s整合之后,Dubbo3.0 -下一代云原生微服务。

一个新架构或新技术的出现一定会伴随特定的发展趋势。

目前我们可以看到的几个趋势是 K8s 成为资源调度的事实标准、Mesh 化成为主流以及规模上的急速增长。这些趋势的存在对 Dubbo 提出了更高的要求:

Dubbo3扩展分离

Dubbo 核心不再提供第三方 SDK 扩展,需要通过 dubbo-spi-extensions 项目来支持。

Dubbo3多样化注册

  1. Zookeeper 作为注册中心、元数据报告、配置中心;

  2. Nacos 作为注册中心、元数据报告、配置中心;

  3. Kubernetes 作为注册中心;

  4. Redis 作为元数据报告;

  5. Apollo 作为配置中心;

  6. Hessian2 和 jdk 作为默认序列化器;

  7. Triple 协议支持 Protobuf;

Dubbo3的升级提醒

  1. 基于 Spring 的相关配置列表可能会发生变更,请留言官方升级文档;

  2. 为了高度兼容性,Dubbo 3 早期版本会默认开启多重注册,多重订阅;

Dubbo3.0柔性增强

柔性增强要解决的问题有两个:

从方法上看,Dubbo3.0 的柔性增强会以面向失败设计为理念,提供包括精准容量评估、自适应限流、自适应负载均衡的支持,自底向上的分步构建大规模可靠应用。从单一服务的视角看,服务是压不垮的,稳定的。

从分布式视角看,复杂的拓扑不会带来性能的下降,分布式负载均衡能够以最优的方式动态分配流量,保证异构系统能够根据运行时的准确服务容量合理分配请求,从而达到性能最优。

Dubbo3代表下一代RPC协议

Dubbo2.x的协议报文头

大家可以看到,这是 Dubbo2.0 的协议。从功能上看, Dubbo2.0 提供了 RPC 的核心语义,包括协议头、标志位、请求 ID 以及请求/响应数据。在云原生时代,2.0 协议主要面临两个挑战:

Dubbo3的协议报文头


Dubbo3发展路线

标签:Dubbo,服务,协议,dubbo,技术,Alibaba,注册,Dubbo3
来源: https://www.cnblogs.com/liboware/p/15140018.html