PRC原理 RPC 遠程過程調用(Remote Procedure Call) 一般用來實現部署在不同機器上的系統之間的方法調用,使得程式能夠像訪問本地系統資源一樣,通過網路傳輸去訪問遠程系統資源,RPC框架實現的原理都是類似的,如下圖: Client Code:客戶端調用方代碼實現,負責發起RPC ...
PRC原理
RPC 遠程過程調用(Remote Procedure Call)
一般用來實現部署在不同機器上的系統之間的方法調用,使得程式能夠像訪問本地系統資源一樣,通過網路傳輸去訪問遠程系統資源,RPC框架實現的原理都是類似的,如下圖:
Client Code:客戶端調用方代碼實現,負責發起RPC調用,為調用方用戶提供使用API。
Serialization/Deserialization:負責對RPC調用通過網路傳輸的內容進行序列化與反序列化,不同的RPC框架有不同的實現機制,主要分為文本與二進位兩大類。(文本序列化機制主要有XML與JSON兩種格式,二進位類別的序列化機制常見的有Java原生的序列化機制,以及Hessian、protobuf、Thrift、Avro、Kryo、MessagePack等),不同的序列化方式在可讀性,碼流大小,支持的數據類型以及性能等方面都存在較大差異,需要根據實際情況進行篩選。
Stub Proxy:可以看做是一種代理對象,屏蔽RPC調用過程中複雜的網路處理邏輯,使得RPC調用透明化,能夠保持與本地調用一樣的代碼風格。
Transport:作為RPC框架底層的通信傳輸模塊,一般通過Socket在客戶端與服務端之間傳遞請求與應答消息。
Server Code:服務端服務業務邏輯具體的實現。
服務註冊中心介紹
我和你都有表達的能力,但是我們怎麼溝通呢?見面聊?電話談?還是微信語音呢?
顯然,註冊中心來解決這個問題:
ZooKeeper介紹
zookeeper是dubbo中的註冊中心,dubbo是一個分散式服務框架,自帶RPC,dubbo使用maven引入。
要運行dubbo,首先需要一個註冊中心,可供選擇的註冊中心有Zookeeper、Multicast、Redis、Simple。
下載從官網去下載
解壓後進入conf目錄,裡面有一個zoo.cfg (如果沒有就自己創建) 配置說明如下:
tickTime=2000 #單位毫秒 zk中最小時間單位長度
dataDir=/user/local/zookeeper/data #zk伺服器存儲快照文件目錄
dataLogDir=/user/local/zookeeper/logs #zk伺服器存儲事務日誌文件目錄
clientPort=2181 #服務端對外的服務埠
initLimit=5 #tickTime的倍數 Leader等待Follower啟動並完成數據同步的時間
syncLimit=2 #tickTime的倍數 Leader與Follower之間心跳最大延時時間
進入bin目錄下 運行 sh zkServer.sh start (Windows直接雙擊)
spring boot 集成 zookeeper
稍微介紹一下設計
一共有3個模塊:
web:服務消費者,包含入口層與業務邏輯層。 (war包)
service.user:服務提供者,用戶服務層 (war包)
base.core:共用層 包含對象實體 interface (jar包)
多的我就不說了,都在代碼里
源碼分享