天天看點

Dubbo(七):dubbo原理1.RCP原理2.netty通信原理3.dubbo原理

1.RCP原理

Dubbo(七):dubbo原理1.RCP原理2.netty通信原理3.dubbo原理

一次完整的RPC調用流程(同步調用,異步另說)如下:

1)服務消費方(client)調用以本地調用方式調用服務;

2)client stub接收到調用後負責将方法、參數等組裝成能夠進行網絡傳輸的消息體;

3)client stub找到服務位址,并将消息發送到服務端;

4)server stub收到消息後進行解碼;

5)server stub根據解碼結果調用本地的服務;

6)本地服務執行并将結果傳回給server stub;

7)server stub将傳回結果打包成消息并發送至消費方;

8)client stub接收到消息,并進行解碼;

9)服務消費方得到最終結果。

RPC架構的目标就是要2~8這些步驟都封裝起來,這些細節對使用者來說是透明的,不可見的。

2.netty通信原理

Netty是一個異步事件驅動的網絡應用程式架構, 用于快速開發可維護的高性能協定伺服器和用戶端。它極大地簡化并簡化了TCP和UDP套接字伺服器等網絡程式設計。

BIO:(Blocking IO)

Dubbo(七):dubbo原理1.RCP原理2.netty通信原理3.dubbo原理

NIO (Non-Blocking IO)

Dubbo(七):dubbo原理1.RCP原理2.netty通信原理3.dubbo原理

Selector 一般稱 為選擇器 ,也可以翻譯為 多路複用器,

Connect(連接配接就緒)、Accept(接受就緒)、Read(讀就緒)、Write(寫就緒)

Netty基本原理:

Dubbo(七):dubbo原理1.RCP原理2.netty通信原理3.dubbo原理

3.dubbo原理

3.1 dubbo原理 -架構設計

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

3.2dubbo原理 -啟動解析、加載配置資訊

Dubbo(七):dubbo原理1.RCP原理2.netty通信原理3.dubbo原理

3.3dubbo原理 -服務暴露

Dubbo(七):dubbo原理1.RCP原理2.netty通信原理3.dubbo原理

3.4dubbo原理 -服務引用

Dubbo(七):dubbo原理1.RCP原理2.netty通信原理3.dubbo原理

3.5dubbo原理 -服務調用

Dubbo(七):dubbo原理1.RCP原理2.netty通信原理3.dubbo原理