如何選擇適合業務的負載均衡策略?

在分布式系統的高可用設計中,負載均衡非常關鍵,我們知道,分布式系統的特性之一就是支持快速擴展,那么集群擴展之后,服務請求如何從服務器列表中選擇合適的一臺呢?這就需要依賴負載均衡策略。

負載均衡在處理高并發,緩解網絡壓力,以及支持擴容等方面非常關鍵,在不同的應用場景下,可以選擇不同的負載均衡,下面一起來看一下負載均衡相關的知識。

負載均衡的應用

負載均衡是指如何將網絡請求派發到集群中的一個或多個節點上處理,一般來說,傳統的負載均衡可以分為硬件負載均衡和軟件負載均衡。

  • 硬件負載均衡,就是通過專門的硬件來實現負載均衡,比如常見的 F5 設備。

  • 軟件負載均衡則是通過負載均衡軟件實現,常見的就是 Nginx。

無論是硬件負載均衡還是軟件負載均衡,實現原理都是一樣的,在負載均衡中會記錄一個可用的服務列表,負載均衡服務器會通過心跳機制來確認服務可用性,在網絡請求到達后,F5 或者 Nginx 等負載均衡設備,會按照不同的策略,進行服務器的路由,這就是負載均衡的流程。

負載均衡的應用非常廣,這一課時我們主要關注在分布式系統的請求調用,服務分發中的負載均衡。

常見的復雜均衡策略

一般而言,有以下幾種常見的負載均衡策略。

輪詢策略

輪詢策略是最容易想到也是應用最廣泛的負載均衡策略。輪詢策略會順序地從服務器列表中選擇一個節點,請求會均勻地落在各個服務器上。輪詢適合各個節點性能接近,并且沒有狀態的情況,但是在實際開發中,不同節點之間性能往往很難相同,這時候就可以應用另一種加權輪詢策略

加權輪詢

加權輪詢是對輪詢策略的優化,給每個節點添加不同的權重。舉個簡單的例子,在實際開發中通常使用數組的數據結構來實現輪詢,比如現在我有 A、B、C 三個節點,就可以在數組中添加 1、2、3 的數據,分別對應三個節點。現在我進行一個加權調整,讓 1、2、3 對應 A,4、5 對應 B、C,這時候繼續進行輪詢,不同節點的權重就有變化了。

隨機策略

隨機策略和輪詢相似,從列表中隨機的取一個。我們都學過概率論的課程,真正的隨機是很難實現的,所以如果訪問量不是很大,最好不要應用隨機策略,可能會導致請求不均勻。

最小響應時間

這個主要是在一些對請求延時敏感的場景中,在進行路由時,會優先發送給響應時間最小的節點。

最小并發數策略

你可以對比最小響應時間,最小并發策略會記錄當前時刻每個節點正在處理的事務數,在路由時選擇并發最小的節點。最小并發策略可以比較好地反應服務器運行情況,適用于對系統負載較為敏感的場景。

除了這些,還有哈希策略等,另外,在第 35 課時中我們提到過一致性哈希,其實一致性哈希也是一種負載均衡策略,一致性哈希經常應用在數據服務的路由中。

負載均衡如何實現

在分布式服務調用中,根據負載均衡實現的位置不同,可以分為服務端負載均衡和客戶端負載均衡。

  • 在服務器端負載均衡中,請求先發送到負載均衡服務器,然后通過負載均衡算法,在眾多可用的服務器之中選擇一個來處理請求。

  • 在客戶端負載均衡中,不需要額外的負載均衡軟件,客戶端自己維護服務器地址列表,自己選擇請求的地址,通過負載均衡算法將請求發送至該服務器。

相信你已經看到了,這兩種負載均衡,最大的區別就是服務器列表維護的位置。

下面我們來看一下,服務端負載均衡和客戶端負載均衡如何實現呢?

在分布式服務調用中,服務端負載均衡常用的組件是 Spring Cloud Eureka,如果你選擇了 Dubbo 作為中間件,那么可以應用 Dubbo 內置的路由策略。

在 Spring Cloud 中開啟負載均衡的方法很簡單,有一個專門的注解 @LoadBalanced 注解,配置這個注解之后,客戶端在發起請求的時候會選擇一個服務端,向該服務端發起請求,實現負載均衡。另外一種客戶端負載均衡,也有對應的實現,典型的是 Spring Cloud Ribbon。

Ribbon 實際上是一個實現了 HTTP 的網絡客戶端,內置負載均衡工具、支持多種容錯等。

我們上面提到的幾種策略,在 Ribbon 中都有提供,包括 RoundRobinRule 輪詢策略、RandomRule 隨機策略、BestAvailableRule 最大可用策略、WeightedResponseTimeRule 帶有加權的輪詢策略等。

如果你的應用需要比較復雜的負載均衡場景,推薦應用 Ribbon,本課時的目的是講解負載均衡被實現的原理,你可以到 Ribbon 的官方倉庫,去了解相關的應用。

總結

以上內容我和大家一起討論了負載均衡的應用場景、常見負載均衡策略,以及服務端和客戶端負載均衡實現組件。

現在我們來思考一個問題,為什么說分布式高可用設計中,負載均衡很關鍵呢?我們都知道,在分布式場景下,特別是微服務拆分后,不同業務系統之間是解耦的,負載均衡策略,也就是描述了各個應用之間如何聯系。

我們用訂單場景來舉例子,下單時依賴商品服務,假設我們選擇的是輪詢策略,當某臺商品服務器出現網絡故障、服務超時,此時下單就會受影響,如果改為最小可用時間策略,訂單服務就會自動進行故障轉移,不去請求超時的節點,實現高可用。

在你的工作中,應用過哪些負載均衡策略呢,又是如何進行配置的,歡迎留言進行分享~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536713.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536713.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536713.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

免 費 搭 建 小程序商城,打造多商家入駐的b2b2c、o2o、直播帶貨商城

在數字化時代,電商行業正經歷著前所未有的變革。鴻鵠云商的saas云平臺以其獨特的架構和先進的理念,為電商行業帶來了全新的商業模式和營銷策略。該平臺涉及多個平臺端,包括平臺管理、商家端、買家平臺、微服務平臺等,涵蓋了pc端、…

項目執行常用的ChatGPT通用提示詞模板

項目啟動與準備:如何確保項目按計劃啟動,并為項目執行做好充分準備? 任務分配與執行:如何合理分配任務,確保項目團隊成員明確各自的責任和目標? 進度監控與調整:如何實時監控項目進度&#xf…

Python 數據分析 Matplotlib篇 plt.rcParams 字典(第5講)

Python 數據分析 Matplotlib篇 plt.rcParams字典(第5講) ??????? ??博主 侯小啾 感謝您的支持與信賴。?? ?????????????????????????????????????????????????????????????????????????…

17.仿簡道云公式函數實戰-數學函數-ABS

1. ABS函數 ABS 函數可用于返回數字的絕對值 2. 函數用法 ABS(number) 3. 函數示例 如,ABS(-12)和ABS(12)的返回結果均為 12。 4. 代碼實戰 首先我們在function包下創建math包,在math包下創建AbsFunction類,代碼如下: pac…

Python是什么?

Python是一種高級編程語言,具有簡單易學、代碼可讀性強、開發效率高等特點。它采用解釋型執行方式,可以跨平臺運行,并且擁有豐富的第三方庫和框架支持,被廣泛應用于Web開發、數據分析、人工智能等領域。 文章目錄 一、Python的歷…

定位 CPU 高負載 Java 線程

常用命令 # 按照 CPU 使用率排序輸出進程信息 ps -eo pid,ppid,%cpu,%mem,cmd --sort-%cpu# 監控對應 pid 進程下的所有線程按照 CPU 排序 top -Hp "$pid" -o %CPU # jstack 輸出 JVM 堆棧信息 jstack $pid演示事例 查看高負載 Java 進程獲取到對應 pid $ ps -eo …

免費福利馬上截止!深圳的戶外小伙伴別錯過!COSP2024體育展來了

COSP2024戶外博覽會 展會時間:2024年3月14-16日 展會地址:深圳福田會展中心 戶外運動愛好者不可錯過! COSP2024戶外博覽會不僅可以逛展 看各種露營裝備、戶外器材 還有各種沙龍、峰會活動 就在明年開年,陽春三月天&#xf…

【辦公技巧】ppt如何加密只能看不能修改?

大家是否想要給PPT文件設置加密,讓ppt文件變為只能查看不能修改的狀態?今天給大家分享給PPT文件設置帶有密碼的只讀模式(修改權限)。 方法如下: PPT文件之后,將PPT文件進行另存為操作,但是在選…

【反射1】——Java基礎(韓順平講解)

一個需求,引出反射 | 完整的反射使用流程: 在不修改源碼的情況下,來控制程序,也符合設計模式中的opc原則(開閉原則:不修改源碼,擴容功能) 1、創建配置文件:re.properties classfullpathcom.r…

SATA和M.2接口的異同點

SATA和M.2接口是連接存儲設備的兩種常見接口,它們在物理尺寸、傳輸速度、線纜和接頭以及適用設備類型等方面有著顯著的異同點。 物理尺寸 SATA接口通常用于2.5英寸硬盤、3.5英寸硬盤等傳統機械硬盤以及SSD,而M.2接口則是一種較為新型的接口標準&#xff…

裝飾 Web3 項目的用戶交互界面(Web3項目二實戰之四)

用戶交互界面是Web3項目必不可少的,畢竟,Web3項目最終是面向用戶的,所以,Web3項目總得需要一個優美的UI界面,已達到用戶在視覺上精彩盛宴。 誠然,一個Web3項目若到了用戶交互界面,大體上,這個Web3項目也將告一段落了。 沒錯,Web3第二個項目,也將終結于本篇,順勢拉開…

線下終端門店調研包含哪些內容

品牌渠道一般分為線上和線下,線上的價格、促銷信息、店鋪優惠機制等都可以通過登錄查看,但是線下門店的數據則需要進店巡查,否則無法得到真實的店鋪銷售數據,當然也有品牌是靠線下的業務團隊報備機制獲得這些信息,但是…

前端常用的Vscode插件

前端常用的Vscode插件🔖 文章目錄 前端常用的Vscode插件🔖1. Chinese (Simplified) (簡體中文) Language Pack for Visual Studio Code -- Vscode中文插件2. Code Runner -- 快速運?調試代碼3. Live Server -- 實時重新加載本地開發服務器4. Image prev…

uni-app之HelloWorld實現

鋒哥原創的uni-app視頻教程: 2023版uniapp從入門到上天視頻教程(Java后端無廢話版),火爆更新中..._嗶哩嗶哩_bilibili2023版uniapp從入門到上天視頻教程(Java后端無廢話版),火爆更新中...共計23條視頻,包括:第1講 uni…

JAVA版的鴻鵠云商B2B2C:多商家入駐直播商城系統特性解析 商城免 費搭建

鴻鵠云商 b2b2c產品概述 【b2b2c平臺】,以傳統電商行業為基石,鴻鵠云商支持“商家入駐平臺自營”多運營模式,積極打造“全新市場,全新 模式”企業級b2b2c電商平臺,致力干助力各行/互聯網創業騰飛并獲取更多的收益。從消…

Swift 檢測 iCloud狀態

Show me the code: func isICloudContainerAvailable() -> Bool {if let _ FileManager.default.ubiquityIdentityToken {return true} else {return false} }推薦一下剛上線的 App 熊貓小賬本,里面有用到這篇博客講的內容 熊貓小賬本 一個簡潔的記賬 App&…

006.HCIA 路由

1、設備管理 用戶視圖 <xxxx> 系統視圖 [xxxx] 接口視圖 [xxxx-G] 協議視圖 a. 視圖切換 用戶視圖 -> 系統視圖 系統視圖 -> 接口視圖 當前視圖 -> 上一層視圖 當前視圖 -> 用戶視圖 system-view interface g0/0/0 quit Ctrl Z b. 系統視圖命令…

人工智能:預測房價模型的構建與應用

摘要&#xff1a; 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是一種模擬人類智能思維的技術。“預測房價”是AI在房地產領域的重要應用之一。本文將介紹如何使用Python構建一個預測房價的人工智能模型&#xff0c;并對其進行說明和應用。 引言 人…

JavaOOP篇----第十六篇

系列文章目錄 文章目錄 系列文章目錄前言一、a=a+b與a+=b有什么區別嗎?二、final、finalize()、finally三、JDBC操作的步驟四、在使用jdbc的時候,如何防止出現sql注入的問題。前言 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊…

tinymce自定義工具欄

tinymce自定義工具欄 話不多說直接上代碼&#xff0c;此處添加 imgs 的工具為例 initTinymce() {const _this thisreturn {language_url: https://cdn.jsdelivr.net/npm/tinymce-i18n20.12.25/langs5/zh_CN.js,language: zh_CN,body_class: panel-body ,object_resizing: fal…