本篇內容介紹了“Spring Cloud中的負載均衡策略是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
十年的榆中網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網站的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整榆中建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“榆中網站設計”,“榆中網站推廣”以來,每個客戶項目都認真落實執(zhí)行。
這是所有負載均衡策略的父接口,里邊的核心方法就是choose方法,用來選擇一個服務實例。
AbstractLoadBalancerRule是一個抽象類,里邊主要定義了一個ILoadBalancer,就是我們上文所說的負載均衡器,負載均衡器的功能我們在上文已經說的很詳細了,這里就不再贅述,這里定義它的目的主要是輔助負責均衡策略選取合適的服務端實例。
看名字就知道,這種負載均衡策略就是隨機選擇一個服務實例,看源碼我們知道,在RandomRule的無參構造方法中初始化了一個Random對象,然后在它重寫的choose方法又調用了choose(ILoadBalancer lb, Object key)
這個重載的choose方法,在這個重載的choose方法中,每次利用random對象生成一個不大于服務實例總數(shù)的隨機數(shù),并將該數(shù)作為下標所以獲取一個服務實例。
RoundRobinRule這種負載均衡策略叫做線性負載均衡策略,也就是我們在上文所說的BaseLoadBalancer負載均衡器中默認采用的負載均衡策略。這個類的choose(ILoadBalancer lb, Object key)
函數(shù)整體邏輯是這樣的:開啟一個計數(shù)器count,在while循環(huán)中遍歷服務清單,獲取清單之前先通過incrementAndGetModulo方法獲取一個下標,這個下標是一個不斷自增長的數(shù)先加1然后和服務清單總數(shù)取模之后獲取到的(所以這個下標從來不會越界),拿著下標再去服務清單列表中取服務,每次循環(huán)計數(shù)器都會加1,如果連續(xù)10次都沒有取到服務,則會報一個警告No available alive servers after 10 tries from load balancer: XXXX
。
看名字就知道這種負載均衡策略帶有重試功能。首先RetryRule中又定義了一個subRule,它的實現(xiàn)類是RoundRobinRule,然后在RetryRule的choose(ILoadBalancer lb, Object key)
方法中,每次還是采用RoundRobinRule中的choose規(guī)則來選擇一個服務實例,如果選到的實例正常就返回,如果選擇的服務實例為null或者已經失效,則在失效時間deadline之前不斷的進行重試(重試時獲取服務的策略還是RoundRobinRule中定義的策略),如果超過了deadline還是沒取到則會返回一個null。
WeightedResponseTimeRule是RoundRobinRule的一個子類,在WeightedResponseTimeRule中對RoundRobinRule的功能進行了擴展,WeightedResponseTimeRule中會根據(jù)每一個實例的運行情況來給計算出該實例的一個權重,然后在挑選實例的時候則根據(jù)權重進行挑選,這樣能夠實現(xiàn)更優(yōu)的實例調用。WeightedResponseTimeRule中有一個名叫DynamicServerWeightTask的定時任務,默認情況下每隔30秒會計算一次各個服務實例的權重,權重的計算規(guī)則也很簡單,如果一個服務的平均響應時間越短則權重越大,那么該服務實例被選中執(zhí)行任務的概率也就越大。
ClientConfigEnabledRoundRobinRule選擇策略的實現(xiàn)很簡單,內部定義了RoundRobinRule,choose方法還是采用了RoundRobinRule的choose方法,所以它的選擇策略和RoundRobinRule的選擇策略一致,不贅述。
BestAvailableRule繼承自ClientConfigEnabledRoundRobinRule,它在ClientConfigEnabledRoundRobinRule的基礎上主要增加了根據(jù)loadBalancerStats中保存的服務實例的狀態(tài)信息來過濾掉失效的服務實例的功能,然后順便找出并發(fā)請求最小的服務實例來使用。然而loadBalancerStats有可能為null,如果loadBalancerStats為null,則BestAvailableRule將采用它的父類即ClientConfigEnabledRoundRobinRule的服務選取策略(線性輪詢)。
PredicateBasedRule是ClientConfigEnabledRoundRobinRule的一個子類,它先通過內部定義的一個過濾器過濾出一部分服務實例清單,然后再采用線性輪詢的方式從過濾出來的結果中選取一個服務實例。
ZoneAvoidanceRule是PredicateBasedRule的一個實現(xiàn)類,只不過這里多一個過濾條件,ZoneAvoidanceRule中的過濾條件是以ZoneAvoidancePredicate為主過濾條件和以AvailabilityPredicate為次過濾條件組成的一個叫做CompositePredicate的組合過濾條件,過濾成功之后,繼續(xù)采用線性輪詢的方式從過濾結果中選擇一個出來。
“Spring Cloud中的負載均衡策略是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網站,小編將為大家輸出更多高質量的實用文章!
分享名稱:SpringCloud中的負載均衡策略是什么
分享URL:http://jinyejixie.com/article16/ippddg.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站營銷、網站收錄、定制網站、移動網站建設、品牌網站設計、網站策劃
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)