01分散式基礎(五)-分散式通訊框架-rmi
阿新 • • 發佈:2018-12-05
分散式通訊框架-RMI
回顧
- 分散式架構的定義以及分散式架構的演進。
- 分散式架構和叢集的區別
- TCP/UDP、全雙工、半雙工、3次握手協議、4次揮手協議
1、FIN標識的報文給到server端
2、server端接收到FIN報文以後,表示Client端沒有資料要發給Server端了
3、server端傳送ACK給到Client端,表示Server端的資料已經發完了。準備關閉連結
4、client端收到ACK報文以後,知道可以關閉連線了,傳送ACK請求到Server端,自己進入TIME-WAIT
5、Server端接收到ACK以後,表示可以斷開連線了
6、Client端等待一定時間後,沒有收到回覆,表示Client可以關閉連線 - TCP的非阻塞IO
- 序列化
1.SerialVersionUID
2.靜態變數序列化問題、Transient關鍵字、父子類的序列化問題
3.kryo、FST、JSON、XML、protobuf、Hessian、Avro、Thrift - http和https協議、RESTful規範
- 客戶端發起一個https請求
a)客戶端支援的加密方式
b)客戶端生成的隨機數(第一個隨機數) - 服務端收到請求後,拿到隨機數,返回
a)證書(頒發機構(CA)、證書內容本身的數字簽名(使用第三方機構的私鑰加密)、證書持有者的公鑰、證書籤名用到的hash演算法)
b)生成一個隨機數,返回給客戶端(第二個隨機數) - 客戶端拿到證書以後做驗證
a)根據頒發機構找到本地的跟證書
b)根據CA得到根證書的公鑰,通過公鑰對數字簽名解密,得到證書的內容摘要 A
c)用證書提供的演算法對證書內容進行摘要,得到摘要 B
d)通過A和B的對比,也就是驗證數字簽名 - 驗證通過以後,生成一個隨機數(第三個隨機數),通過證書內的公鑰對這個隨機數加密,傳送給伺服器端
- (隨機數1+2+3)通過對稱加密得到一個金鑰。(會話金鑰)
- 通過會話金鑰對內容進行對稱加密傳輸
分散式通訊框架-RMI
RPC
什麼是RPC
Remote procedure call protocal
RPC協議其實是一個規範。Dubbo、Thrif、RMI、Webservice、Hessain
網路協議和網路IO對於呼叫端和服務端來說是透明;
一個RPC框架包含的要素
RMI的概述
RMI(remote method invocation) , 可以認為是RPC的java版本
RMI使用的是JRMP(Java Remote Messageing Protocol), JRMP是專門為java定製的通訊協議,所以踏實純java的分散式解決方案
如何實現一個RMI程式
- 建立遠端介面, 並且繼承java.rmi.Remote介面
- 實現遠端介面,並且繼承:UnicastRemoteObject
- 建立伺服器程式: createRegistry方法註冊遠端物件
- 建立客戶端程式
如果自己要去實現一個RMI
- 編寫伺服器程式,暴露一個監聽, 可以使用socket
- 編寫客戶端程式,通過ip和埠連線到指定的伺服器,並且將資料做封裝(序列化)
- 伺服器端收到請求,先反序列化。再進行業務邏輯處理。把返回結果序列化返回