天天看點

Java微服務RPC選型Dubbo還是SpringCloud?(上)1 分類

RPC架構主要組成:

  • 通信架構
  • 通信協定
  • 序列化和反序列化格式

1 分類

RPC架構主要分為:

1.1 綁定語言平台

1.1.1 Dubbo

國内最早開源的RPC架構,由阿裡巴巴公司開發并于2011年末對外開源,僅支援Java

架構

Java微服務RPC選型Dubbo還是SpringCloud?(上)1 分類
  • Consumer 服務消費者
  • Provider 服務提供者
  • Registry 注冊中心
  • Monitor是監控系統

互動流程

  • Consumer通過Registry擷取到Provider節點
  • 再通過Dubbo的用戶端SDK與Provider建立連接配接,并發起調用
  • Provider通過Dubbo的服務端SDK接收到Consumer請求
  • 處理後再把結果傳回給Consumer

服務消費者、提供者都需引入Dubbo的SDK才來完成RPC調用,因為Dubbo是用Java實作,是以要求服務消費者、提供者也都必須用Java。

主要實作

  • 預設采用Netty作為通信架構
  • 除了支援私有的Dubbo協定外,還支援RMI、Hession、HTTP、Thrift
  • 支援多種序列化格式,比如Dubbo、Hession、JSON、Kryo、FST

1.1.2 Motan

微網誌内部使用的RPC架構,于2016年對外開源,僅支援Java。

Java微服務RPC選型Dubbo還是SpringCloud?(上)1 分類

與Dubbo類似,都要在Client端(服務消費者)和Server端(服務提供者)引入SDK

register

和注冊中心互動,包括注冊服務、訂閱服務、服務變更通知、服務心跳發送等功能。Server端會在系統初始化時通過register子產品注冊服務,Client端會在系統初始化時通過register子產品訂閱到具體提供服務的Server清單,當Server清單發生變更時也由register子產品通知Client。

protocol

用來進行RPC服務的描述和RPC服務的配置管理,這一層還可以添加不同功能的filter用來完成統計、并發限制等功能。

serialize

将RPC請求中的參數、結果等對象進行序列化與反序列化,即進行對象與位元組流的互相轉換,預設使用對Java更友好的Hessian 2進行序列化。

transport

用來進行遠端通信,預設使用Netty NIO的TCP長連結方式。

cluster

Client端使用的子產品,cluster是一組可用的Server在邏輯上的封裝,包含若幹可以提供RPC服務的Server,實際請求時會根據不同的高可用與負載均衡政策選擇一個可用的Server發起遠端調用。