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包)
多的我就不說了,都在代碼里
源碼分享

