ribbon負載均衡迴圈策略原始碼

2022-05-05 06:51:10 字數 739 閱讀 3800

在用ribbon負載均衡取eureka註冊中心中的位址時,預設採用迴圈策略,例如商品服務有3個,分別為url1,url2,url3,那麼在客戶端第一次取時,會取到url1,第二次取時取到url2,第三次是url3,然後依次迴圈。

很好奇這種演算法是怎麼保證永遠是順序取的,如果在高併發下,是否也能按這個順序,跟一下原始碼,原來,底層實現是用了乙個atomicinteger來保證原子性的,關鍵**在類

com.netflix.loadbalancer.abstractserverpredicate中

**如下:

private

final atomicinteger nextindex = new

atomicinteger();

......

private

int incrementandgetmodulo(int

modulo)

}

這裡傳入的引數modulo為服務列表的數量,如上面的例子為3個,

用了乙個自旋,每次會把atomicinteger裡面的值取出來作為url集合的下標,然後將下一次的下標值存入。

而current < modulo的作用則是為了防止服條減少,下標會越界,比如有10個url,本次取到了第8個,atomicinteger裡的值為9(下一次的url列表裡的做標),這時掛了9個,只剩1個了,下次再從註冊中心取url,這裡下標current為9比module1大,這時就不能返回9了,否則會引起下標越界。

Ribbon負載均衡策略配置

一 位置 二 啟動 1 啟動eureka中心 2 啟動兩個服務端例項,例項埠分布為7071和7073和7076 3 啟動1個ribbon客戶端例項 三 測試 瀏覽器輸入 http localhost 7777 add?a 100 b 306 我們配置的策略是隨機,觀察是否隨機選擇服務 from po...

Ribbon負載均衡

在resttemplate feign zuul中都整合了ribbon負載均衡,其中ribbon負載均衡通過iruler介面來實現,總共有6種實現類 其中預設配置方式為簡單輪詢,自定義配置有兩種 1 配置config ribbonclients defaultconfiguration defaul...

Ribbon負載均衡

ribbon主要功能是提供客戶端的軟體負載均衡演算法,提供一系列完整的配置項,例如連線超時 重試等。在eureka的自動配置依賴模組spring cloud starter eureka中,已經整合了ribbon,可以直接使用ribbon來實現客戶端的負載均衡 在eureka中使用ribbon十分簡...