Dubbo 3.0.0 來了!還學得動嗎?

前言

你們好,今天給你們分享 — Dubbo 3.0.0 相關簡介。首先給你們說聲抱歉!由於 Dubbo 3.0.0 已經在 6月14日已經發布了最新的 release 版本,因爲在作一些《Dubbo高階教程》前期準備工做全部一直沒有時間進行更新。之後若是 Dubbo 有重要的新版本發佈做者會在第一時間進行相關的分享。下面就開始咱們今天的內容吧!git

1. Dubbo 3.0.0 簡介

首先咱們先來看看 DubboGithub 發佈的新特性:apache

  • 應用級別服務發現機制
  • 下一代 RPC 協議: Triple
  • 全新的路由規則
  • 極大的性能提高
  • Kubernetes 服務集成

其中咱們着重瞭解下應用級別服務與Kubernetes 服務集成支持。Dubbo 3.0.0 主要在雲服務能力上作了新的能力提高。爲何這麼說呢?由於做者以前在工做中集成 Kubernetes 時候服務註冊中心這個組件能力就很是的尷尬,由於 Kubernetes 自己就提供了服務註冊與發現能力,可是不能和 Dubbo 完美整合起來。所以在Dubbo 3.0.0 以前咱們的實現方式可能就是在 Kubernetes 部署一個 zookeeper 服務集羣來進行服務註冊與發現。但這樣的實現方式在雲服務應用來講並非太合適,這種服務註冊和發現能力交給基礎服務組件來實現比較合適。同時 Dubbo 3.0.0 改變之前的接口級服務註冊而是採用應用級服務註冊,什麼意思呢?好比在3.0.0版本前全部的服務都是以接口形式的元數據進行註冊以下元數據:json

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×tamp=1624889509797

dubbo://192.168.101.8:20880/com.example.demo.common.api.FoodFacade?anyhost=true&application=demo-provider&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.example.demo.common.api.FoodFacade&metadata-type=remote&methods=findAll&pid=53639&release=3.0.0&side=provider×tamp=1624889510225

咱們能夠看到若是咱們以接口級進行服務註冊會存在大量的重複數據,這樣就會致使註冊中心數據與接口數量成正比,接口越多註冊的元數據就越多。而若是咱們以應用級服務註冊會是怎樣的?下面是應用級服務註冊的共享元數據:api

{
    "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 接口數量無關,只與實例部署規模相關)。app

2. 元數據對比

如下是應用級別服務註冊與接口級服務註冊元數據對比圖讀者能夠自行對比下:async

Dubbo3與老版本註冊數據

3. 版本升級

在官方 GitHub 上面是這樣描述的Compatible with almost all the same behavior as version 2.7.從字面意思咱們能夠認爲 Dubbo 3.0.0 是全面兼容 Dubbo2.7.x 全部的功能。所以若是咱們但願升級到 Dubbo 3.0.0 那咱們最好是先升級到 Dubbo 2.7.x 而後再進行 Dubbo 3.0.0 升級。固然Dubbo 2.7.x -> Dubbo 3.0.0 升級 Dubbo 官方也給出了一些升級指南能夠參考 Dubbo 官方手冊進行升級。ide

4. 拓展說明

在官方 GitHub 上面已經明確說明對第三方 SDK 的拓展在 Dubbo 的核心發佈版本將再也不支持,可是咱們能夠經過dubbo-spi-extensions項目來對頻繁使用的拓展進行支持。如下是當前支持的拓展:性能

  • Zookeeper 做爲註冊中心、配置中心、元數據中心
  • Nacos 做爲註冊中心、配置中心、元數據中心
  • Kubernetes 做爲註冊中心
  • Redis 做爲元數據中心
  • Apollo 做爲配置中心
  • Hessian2Jdk 做爲默認支持的序列化方式
  • ProtobufTriple 協議支持

5. 小結

在本小節中咱們主要了解了 Dubbo 3.0.0 中新的相關特性。咱們能夠了解到 Dubbo 3.0.0 不只僅增長了新的特性,同時也在性能上作了很大的提高(後面有時間作性能測試),支持新的 Triple RPC 協議,其中最爲重要的是在對雲原生服務的相關支持。目前我的認爲 Dubbo 3.0.0 仍是一個新的產物在社區還未獲得大規模的應用,雖然 Dubbo 官方已經在兼容性方面作了很是多工做,可是我以爲目前這個版本能夠做爲技術調研,用在生產環境還需等待更多的驗證。測試

相關文章
相關標籤/搜索