dubbo
1) 遠端通訊協議基本原理
a) 網路通訊:將二進位制流從一臺計算機傳輸到另外一臺計算機,基於傳輸協議和網路IO來實現
b) 傳輸協議有 http 、 tcp 、 udp, 都是在基於 Socket 概念擴充套件而來
c) 網路IO,主要有 bio 、 nio 、 aio, 所有的分散式應用通訊都基於這個原理而實現
過程:
狹義RPC過程
a) 假設兩臺伺服器A,B,一個應用部署在A伺服器上,想要呼叫B伺服器上應用提供的函式/方法,由於不在一個記憶體空間,不能直接呼叫,需要透過網路來表達呼叫的語義和傳達呼叫的資料
b) 首先A和B建立TCP連結,並且確定好RPC框架的網路埠,能夠進行網路通訊
c) 然後A伺服器將需要呼叫B伺服器的方法和引數進行序列化(Serialize)
d) 透過第一步建立的連結,將序列化後的二進位制流傳送給B
e) B伺服器收到請求後,需要對引數進行反序列化,恢復為記憶體中的表達方式
f) 然後B伺服器找到對應的方法(定址的一部分)進行本地呼叫,然後得到返回值
g) B伺服器對返回值再次進行序列化,並且透過相同的途徑傳送給A
h) A對B伺服器返回的資訊再進行反序列化,得到返回結果
i) 三個關鍵點
Call ID對映: 要呼叫的方法名, 必須是唯一的
序列化和反序列化: 二進位制流
網路傳輸: 透過rpc協議
分散式RPC過程
a) 傳輸協議: thrift,hession等
b) client代理,服務引用方呼叫方法透過代理傳送遠端呼叫
c) 協議編解碼壓縮,如序列化和反序列化 netty
d) 註冊中心,服務註冊和服務發現,存放服務資訊 zookeeper
e) 負載均衡,服務容錯策略其他:服務降級,服務隔離,服務治理
4) dubbo是一個分散式RPC框架
a) 包含四個角色服務提供者(provider),消費者(consumer),服務註冊配置中心(registry),監控(monitor)
b) 服務註冊中心包含configServer+zookeeper,也支援redis
c) 服務提供者provider
啟動時主動與ConfigServer建立Scoket長連線
同時將自己的IP,提供的服務名稱,埠等資訊直接傳送給ConfigServer
configserver將provider提供的服務資訊傳送到zookeeper
zookeeper透過watcher機制推送提供者資訊給消費者(此時可能沒有服務消費者)
d) 服務消費者consumer
啟動時主動與ConfigServer建立Socket長連線
同時將自己的IP等相應資訊傳送給ConfigServer
configserver將consumer提供的資訊傳送到zookeeper
拿到服務提供者資訊後,與它們都建立連線,後面就可以直接呼叫服務
當有多個服務提供者的時候,Client根據一定的規則來進行負載均衡,如輪詢,隨機,按權重等
消費者自己宕機了, 沒法自己通知configserver和zookeeper, 只能透過心跳機制
e) 服務註冊配置中心: configServer+zookeeper
configserver跟所有服務提供者和消費者作心跳檢測
當某個Server不可用,就觸發修改zookeeper中服務提供者的請求
zookeeper資訊發生變更後,透過watcher機制通知消費者,即推送最新的服務提供者資訊
消費者重新連線服務提供者
dubbo
1) 遠端通訊協議基本原理
a) 網路通訊:將二進位制流從一臺計算機傳輸到另外一臺計算機,基於傳輸協議和網路IO來實現
b) 傳輸協議有 http 、 tcp 、 udp, 都是在基於 Socket 概念擴充套件而來
c) 網路IO,主要有 bio 、 nio 、 aio, 所有的分散式應用通訊都基於這個原理而實現
過程:
狹義RPC過程
a) 假設兩臺伺服器A,B,一個應用部署在A伺服器上,想要呼叫B伺服器上應用提供的函式/方法,由於不在一個記憶體空間,不能直接呼叫,需要透過網路來表達呼叫的語義和傳達呼叫的資料
b) 首先A和B建立TCP連結,並且確定好RPC框架的網路埠,能夠進行網路通訊
c) 然後A伺服器將需要呼叫B伺服器的方法和引數進行序列化(Serialize)
d) 透過第一步建立的連結,將序列化後的二進位制流傳送給B
e) B伺服器收到請求後,需要對引數進行反序列化,恢復為記憶體中的表達方式
f) 然後B伺服器找到對應的方法(定址的一部分)進行本地呼叫,然後得到返回值
g) B伺服器對返回值再次進行序列化,並且透過相同的途徑傳送給A
h) A對B伺服器返回的資訊再進行反序列化,得到返回結果
i) 三個關鍵點
Call ID對映: 要呼叫的方法名, 必須是唯一的
序列化和反序列化: 二進位制流
網路傳輸: 透過rpc協議
分散式RPC過程
a) 傳輸協議: thrift,hession等
b) client代理,服務引用方呼叫方法透過代理傳送遠端呼叫
c) 協議編解碼壓縮,如序列化和反序列化 netty
d) 註冊中心,服務註冊和服務發現,存放服務資訊 zookeeper
e) 負載均衡,服務容錯策略其他:服務降級,服務隔離,服務治理
4) dubbo是一個分散式RPC框架
a) 包含四個角色服務提供者(provider),消費者(consumer),服務註冊配置中心(registry),監控(monitor)
b) 服務註冊中心包含configServer+zookeeper,也支援redis
c) 服務提供者provider
啟動時主動與ConfigServer建立Scoket長連線
同時將自己的IP,提供的服務名稱,埠等資訊直接傳送給ConfigServer
configserver將provider提供的服務資訊傳送到zookeeper
zookeeper透過watcher機制推送提供者資訊給消費者(此時可能沒有服務消費者)
d) 服務消費者consumer
啟動時主動與ConfigServer建立Socket長連線
同時將自己的IP等相應資訊傳送給ConfigServer
configserver將consumer提供的資訊傳送到zookeeper
拿到服務提供者資訊後,與它們都建立連線,後面就可以直接呼叫服務
當有多個服務提供者的時候,Client根據一定的規則來進行負載均衡,如輪詢,隨機,按權重等
消費者自己宕機了, 沒法自己通知configserver和zookeeper, 只能透過心跳機制
e) 服務註冊配置中心: configServer+zookeeper
configserver跟所有服務提供者和消費者作心跳檢測
當某個Server不可用,就觸發修改zookeeper中服務提供者的請求
zookeeper資訊發生變更後,透過watcher機制通知消費者,即推送最新的服務提供者資訊
消費者重新連線服務提供者