ribbon、eureka都是netflix旗下的專案,eureka client內建了ribbon,用於實現負載均衡,預設使用輪詢。
輪詢是最簡單的負載均衡演算法,每次呼叫服務拿到節點列表後,從前往後依次輪詢類表中的每個節點,誰空閒就呼叫誰。
測試時往往都是呼叫列表的第乙個節點,因為重新整理的手速遠遠比不上cpu的執行速度,除非是執行緒阻塞。
輪詢適合節點效能都差不多的情況,如果集群節點效能都差不多,一般使用預設的輪詢即可。
加權輪詢 這個不是ribbon的內建策略,此處只是作為補充。
在輪詢的基礎上,對每個節點施加權重。節點的效能不同,效能高的權重分配大些,輪到的機率就大些,負載大些。適合節點效能有明顯區別的情況。
先按照roundrobinrule策略獲取provider,若獲取失敗,則在指定的時限內重試。預設的時限為500毫秒。
從所有節點中隨機選擇乙個。
選擇併發量最小的節點(連線的消費者數量最少的節點)。
過濾掉處於斷路器跳閘狀態的provider,或已經超過連線極限的provider,對剩餘provider採用輪詢策略。
根據大區效能、節點可用性綜合進行選擇。
根據每個provider的平均響應時間計算其權重,響應時間越快權重越大,被選中的機率就越高。剛啟動時採用輪詢策略,計算出權重後就根據權重進行選擇。
eureka client的依賴已經包含了ribbon的依賴,所以不必再導ribbon的依賴。
負載均衡策略在消費者中進行配置,比如user-service呼叫order-service,那就在user-service中配置。有2種配置方式:
#配置呼叫order-service的負載均衡策略
order-service:
ribbon:
nfloadbalancerruleclassname: com.netflix.loadbalancer.randomrule
都是乙個包下的,把類名換了即可
@bean
@loadbalanced
public resttemplate resttemplate()
//使用的負載均衡策略
@bean
public randomrule getrule()
public static void main(string args) }
總結: 指定負載均衡策略的類的路徑或者自己建立對應的bean。
(1)新建乙個類來寫負載均衡策略
//需繼承abstractloadbalancerrule
public class myrule extends abstractloadbalancerrule
//自定義負載均衡策略,需返回乙個節點
@override
public server choose(object o)
}// server的建構函式:server(string ip,int port)
// server server = new server("127.0.0.1", 10001);
return null;}}
注意匯入的server是com.netflix.loadbalancer.server,不要導錯了。
我們看到choose會傳入乙個object型別的引數,這個引數是ribbon快取的目標服務所有節點的資訊,會自動傳入。
ribbon對乙個服務,會在快取中維護2個list:乙個是此服務的所有節點的資訊,乙個是此服務所有可用節點的資訊。
快取的節點列表的維護過程:
eureka client從eureka server拿到此服務的節點列表,這個節點列表一直儲存在快取中,不修改;
將這個列表copy乙份作為有效節點列表,也放在快取中,並定時ping一下列表中的節點,判斷節點是否還有效,若無效,則從有效節點列表中刪除;
同時,eureka client會輪詢eureka server此節點列表是否有變化、更新,如果有,捨棄本地快取的節點列表,從eureka server重新獲取節點列表。
(2)在配置檔案或引導類中配置負載均衡策略
vm options中設定的引數需要加字首-d,優先順序最高,會覆蓋配置檔案中相同的配置項。
springcloud(Ribbon負載均衡)
搭建步驟 1.使用者服務的集群 2.訂單服務整合ribbon 2.1.匯入ribbon的依賴 2.2.在resttemplate的bean定義方法上加上 loadbalanced註解 2.3.把訂單的controller向使用者發起呼叫的resttemplate的url使用服務名呼叫,如 http ...
四 SpringCloud Ribbon負載均衡
在服務消費者 user consumer 的啟動類中的resttemplate類加上 loadbalanced註解 enablediscoveryclient public class bean loadbalanced public resttemplate resttemplate 修改dao,...
linux centos nginx做負載均衡
nginx 是 c語言 開發,建議在 linux 上執行,當然,也可以安裝 windows 版本,本篇則使用 centos 7 作為安裝環境。一.gcc 安裝 yum install gcc c 二.pcre pcre devel 安裝pcre perl compatible regular exp...