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

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