文章出處

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實例。

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()