RPC與 Dubbo 資料梳理

RPC

概覽

RPC - Remote Procedure Call 遠程服務調用

  • 在分佈式計算,遠程過程調用是一個計算機通信協議
  • 分佈式服務
  • 服務治理的另一條路
  • 跨進程數據交互
    • 其他跨進程數據交互方式
    • http/https
    • WebService
    • MQ
    • RESTful
  • RPC是一種服務器-客戶端(Client/Server)模式
  • 面向對象編程中,亦可稱作遠端呼叫或遠端方法呼叫
  • 常見的實現框架
    • Apache Dubbo(Alibaba 開源)
    • Java RMI
    • google gRpc
    • Apache Thrift(Facebook 開源)
    • Twitter Finagle

一次 RPC 調用過程(同步)

在這裏插入圖片描述

角色

  • 服務提供方(producer/server)
  • 服務消費方 (comsumer/client)
  1. comsumer 以本地調用方式調用服務
  2. comsumer stub (客戶端代理)接到調用請求,將請求信息進行封裝(服務名、方法名、請求參數、等等)成消息體(通過特定協議進行編碼,序列化協議,Hessian、protobuf、kryo、fastjson、gson、fst等等)
  3. comsumer stub 找到 producer的服務地址(ip、port)(本地記錄、廣播、註冊中心
  4. comsumer stub消息體發送到服務端(特定網絡通訊協議,如 Netty、http等)
  5. server stub (服務端代理)收到消息,進行解碼(與上面的協議要一致)
  6. server stub 根據解碼信息,調用本地服務(本地方法)
  7. 本地服務將執行結果返回給 server stub
  8. server stub 對結果進行封裝(進行編碼), 然後發送給消費方(通訊協議)
  9. comsumer stub 解碼消息
  10. comsumer 像調用本地方法一樣調用遠程服務,獲取到了返回結果

其中 2~9 步驟爲 RPC 框架的職責,業務方只需要完成 1 和 10

Dubbo

快速啓動

https://github.com/alibaba/spring-cloud-alibaba

架構

在這裏插入圖片描述

  1. config 配置層:對外配置接口,以 ServiceConfig, ReferenceConfig 爲中心,可以直接初始化配置類,也可以通過 spring 解析配置生成配置類
  2. proxy 服務代理層:服務接口透明代理,生成服務的客戶端 Stub 和服務器端 Skeleton, 以 ServiceProxy 爲中心,擴展接口爲 ProxyFactory
  3. registry 註冊中心層:封裝服務地址的註冊與發現,以服務 URL 爲中心,擴展接口爲 RegistryFactory, Registry, RegistryService
  4. cluster 路由層:封裝多個提供者的路由及負載均衡,並橋接註冊中心,以 Invoker 爲中心,擴展接口爲 Cluster, Directory, Router, LoadBalance
  5. monitor 監控層:RPC 調用次數和調用時間監控,以 Statistics 爲中心,擴展接口爲 MonitorFactory, Monitor, MonitorService
  6. protocol 遠程調用層:封裝 RPC 調用,以 Invocation, Result 爲中心,擴展接口爲 Protocol, Invoker, Exporter
  7. exchange 信息交換層:封裝請求響應模式,同步轉異步,以 Request, Response 爲中心,擴展接口爲 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
  8. transport 網絡傳輸層:抽象 mina 和 netty 爲統一接口,以 Message 爲中心,擴展接口爲 Channel, Transporter, Client, Server, Codec
  9. serialize 數據序列化層:可複用的一些工具,擴展接口爲 Serialization, ObjectInput, ObjectOutput, ThreadPool

– http://dubbo.apache.org/zh-cn/docs/dev/design.html

模塊

  • dubbo-common 公共邏輯模塊:包括 Util 類和通用模型。

  • dubbo-remoting 遠程通訊模塊:相當於 Dubbo 協議的實現,如果 RPC 用 RMI協議則不需要使用此包。

  • dubbo-rpc 遠程調用模塊:抽象各種協議,以及動態代理,只包含一對一的調用,不關心集羣的管理。

  • dubbo-cluster 集羣模塊:將多個服務提供方僞裝爲一個提供方,包括:負載均衡, 容錯,路由等,集羣的地址列表可以是靜態配置的,也可以是由註冊中心下發。

  • dubbo-registry 註冊中心模塊:基於註冊中心下發地址的集羣方式,以及對各種註冊中心的抽象。

  • dubbo-monitor 監控模塊:統計服務調用次數,調用時間的,調用鏈跟蹤的服務。

  • dubbo-config 配置模塊:是 Dubbo 對外的 API,用戶通過 Config 使用Dubbo,隱藏 Dubbo 所有細節。

  • dubbo-container 容器模塊:是一個 Standlone 的容器,以簡單的 Main 加載 Spring 啓動,因爲服務通常不需要 Tomcat/JBoss 等 Web 容器的特性,沒必要用 Web 容器去加載服務。

  • dubbo-filter 過濾器

  • dubbo-serialization 序列化

  • dubbo-metadata 元數據

  • dubbo-plugin 插件

  • dubbo-distribution 分佈式

  • dubbo-configcenter 配置中心

  • dubbo-compatible 兼容(2.5.x 升級到 2.6.x 、2.7.x)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章