弄懂服務(wù)路由與負載均衡,微服務(wù)搞起
基本概念
SOA
公共的業(yè)務(wù)被拆分出來,形成可共用的服務(wù),***程度地保障代碼和邏輯的復(fù)用,避免重復(fù)建設(shè),這種設(shè)計稱為SOA。
路由
SOA架構(gòu)中,服務(wù)消費者通過服務(wù)名稱,在眾多服務(wù)中心找到要調(diào)用的服務(wù)的地址列表,稱為服務(wù)的路由。
負載均衡
對于負載高的服務(wù),一般有多臺服務(wù)器組成的集群,當請求到來時,為了將請求均衡的分配到后端服務(wù)器,負載均衡程序?qū)姆?wù)對應(yīng)的地址列表中,通過相應(yīng)的負載均衡算法和法則,選取一臺服務(wù)器進行訪問,這個過程稱為服務(wù)的負載均衡。
服務(wù)配置中心
當服務(wù)越來越多,規(guī)模變大,單靠人工管理或簡單維護配置已經(jīng)不能滿足,并且單一軟硬件負載調(diào)度的單點故障問題凸顯,因此需要一個能動態(tài)注冊和獲取服務(wù)信息的地方,來統(tǒng)一管理服務(wù)名稱和其對應(yīng)的服務(wù)器列表信息,這個就是服務(wù)配置中心。
-->工作原理
服務(wù)提供者啟動時,將提供的服務(wù)名稱、服務(wù)器地址注冊到服務(wù)配置中心
服務(wù)消費者通過服務(wù)配置中心來獲取需要調(diào)度的服務(wù)機器列表
通過負載均衡算法之后,選取一臺服務(wù)器調(diào)用
當服務(wù)器宕機或下線,相應(yīng)的機器動態(tài)從服務(wù)配置中心移除,并通知相應(yīng)的服務(wù)消費者
服務(wù)消費者一次訪問服務(wù)配置中心之后,會將查詢到的信息緩存到本地,后面調(diào)用先查緩存,從而降低服務(wù)配置中心壓力
ZooKeeper

2負載均衡算法
用處
服務(wù)消費者從服務(wù)配置中心獲取到服務(wù)的地址列表后,需要選取其中一臺發(fā)起RPC調(diào)用,這時需要用到具體的負載均衡算法。
常見種類
輪詢法、隨機法、源地址哈希法、加權(quán)輪詢法、加權(quán)隨機法、最小連接法等
輪詢法
將請求按順序輪流地分配到后端服務(wù)器上,它均衡地對待后端每一臺服務(wù)器,而不關(guān)心服務(wù)器實際的連接數(shù)和當前的系統(tǒng)負載
偽代碼
- 創(chuàng)建靜態(tài)變量static int pos=0;
- 創(chuàng)建一個HashMap把服務(wù)器地址和權(quán)重映射起來。(為與后面加權(quán)輪詢法對比)
- 新建一個keyList把Map中的服務(wù)器地址取出
- synchronized( pos ){
- 若超出keyList長度,pos重置零;
- 否則取出keyList.get( pos ); pos ++;
- }
- 返回取出的server
加權(quán)輪詢法
每臺服務(wù)器配置不同,因此應(yīng)給配置高、負載低的機器配置更高的權(quán)重處理更多的請求。加權(quán)輪詢算法將請求順序且按照權(quán)重分配到后端
偽代碼
- 創(chuàng)建靜態(tài)變量static int pos=0;
- 創(chuàng)建一個HashMap把服務(wù)器地址和權(quán)重映射起來。
- 新建一個keyList按照循環(huán)權(quán)重大小次數(shù)把Map中的服務(wù)器地址添加到list中,如權(quán)重為4,則keyList中添加4次該服務(wù)器地址。
- synchronized( pos ){
- 若超出keyList長度,pos重置零;
- 否則取出keyList.get( pos ); pos ++;
- }
- 返回取出的server