rpc框架之HA/負載均衡構架設計


thrift、avro、grpc之類的rpc框架默認都沒有提供負載均衡的實現,生產環境中如果server只有一台,顯然不靠譜,於是有了下面的設計,這其實是前一陣跟北京一個朋友在qq群里交流的結果,分享一下:

主要思路:

1、rpc server端以多實例方式運行(多端口或多機部署均可),啟動時每個實例向zk集群以臨時節點方式注冊(這樣,遍歷zk上/server下有多少個臨時節點就知道有哪些server實例在線)

2、客戶端自己實現一個連接池,連接池初始化時,從zk將在線的server實例信息同步到本地並緩存,同時監聽zk下的節點變化,然后建立連接若干(簡單考慮的話,可以與每個server實例建立一個連接)

3、客戶端需要與Server通訊時,從連接池中取一個可用的連接,用它實現遠程調用。

 

需要考慮的細節:

連接池其實是關鍵,要設計完善的話,還是有很多細節要認真考慮:

a) 連接池的初始連接數、最低連接數、最大連接數,這些都是要考慮的。

b) 如果長時間沒有client調用,要有額外機制來釋放閑置連接(可以額外開一個線程定時檢測)

c) 如果server端,某個實例down掉,要考慮將對應的連接置為不可用,或者直接釋放。

d) 沒有可用連接時,如果池中的連接數<最大連接數,要考慮主動創建新連接。

e) 所有連接都占用,也無法創建新連接時,要有通知機制(郵件、短信之類的都行)及時通知運維人員,提示新增server實例。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM