SpringCloud Ribbon 負載均衡

2021-10-09 14:26:32 字數 2163 閱讀 1900

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...