13種負載均衡算法

目錄

  • 前言
  • (1)輪轉調度(Round-Robin Scheduling)算法
  • (2)加權輪轉調度(Weighted Round-Robin Scheduling)算法
  • (3)隨機均衡調度(Random Scheduling)算法
  • (4)加權隨機均衡調度(Weighted Random Scheduling)算法
  • (5)最小連接調度(Least-Connection Scheduling)算法
  • (6)加權最小連接調度(Weighted Least-Connection Scheduling)算法
  • (7)目標地址散列調度(Destination Hashing Scheduling)算法
  • (8)源地址散列調度(Source Hashing Scheduling)算法
  • (9)基于局部性的最少鏈接調度(Locality-Based Least ConnectionsScheduling)算法
  • (10)帶復制的基于局部性最少鏈接調度(Locality-Based Least Connectionswith Replication Scheduling)算法
  • (11)響應速度均衡調度(Response Time Scheduling)算法
  • (12)處理能力均衡調度(Processing Capacity Scheduling)算法
  • (13)DNS均衡調度(DNS Scheduling)算法

前言

所謂負載,一般指處理節點的CPU負載、MEM利用率、網絡負載、可用的緩沖區、應用系統負載、用戶數量以及其他的各種系統資源的當前狀態信息。所謂負載均衡,是指處理節點的負載信息通過某代理軟件傳遞給均衡器,由均衡器做出決策并對負載進行動態分配,從而使集群中各處理節點的負載相對趨于平衡。
要實現
(1)為用戶提供更好的訪問質量。
(2)提高服務器響應速度。
(3)提高服務器及其他資源的利用效率。
(4)避免了網絡關鍵部位出現單點失效。
(5)解決網絡擁塞問題,服務就近提供,實現地理位置無關性。
衡量服務器性能和當前運行情況的有效衡量指標包括:
(1)CPU利用率。
(2)內存使用率。
(3)帶寬利用率。
(4)硬盤IO吞吐率和網絡IO吞吐率。
(5)單位時間內完成的服務次數。
(6)單位時間內連接客戶數
(7)完成一個請求任務所用的響應時間。
理想的負載指標應滿足以下條件:測量開銷低,能體現所有競爭資源上的負載,各負載指標在測量及控制上彼此獨立
在引入負載均衡方案時不管是采用哪種方式都需要考慮以下問題:
(1)采用負載均衡方案后,服務器接收和轉發數據報的速度及負載均衡的整體檢測能力是首先要考慮的重點問題。
(2)負載均衡方案應能滿足網絡流量不斷增長的需求,能均衡不同操作系統和硬件平臺之間的負載,能均衡不同流量的負載。
(3)負載均衡設備自身出現故障時應該有良好的冗余解決方案,保證可用性,避免系統遭受重大損失。
(4)采用靈活、直觀和安全的管理方式,這樣便于安裝、配置、維護和監控,提高工作效率,避免差錯
下面介紹幾種常見的負載均衡算法:

(1)輪轉調度(Round-Robin Scheduling)算法

假設所有服務器處理性能相同,將外部請求按順序輪流分配到集群中的服務器上。這種算法的優點是其簡潔性,無需記錄當前所有連接的狀態,是一種無狀態調度算法,但是不適用于服務器組中處理性能不一的情況,而且當請求服務時間變化較大時,容易導致服務器間的負載不平衡。

(2)加權輪轉調度(Weighted Round-Robin Scheduling)算法

為保證處理能力強的服務器處理更多的訪問流量,用相應的權值表示服務器的處理性能,將請求數目按權值的比例分配給各服務器。調度器可以自動詢問服務器的負載情況,并動態地調整其權值。這種均衡算法也是一種無狀態調度算法,但可以解決服務器間性能不一的情況,能確保高性能的服務器得到更多的使用率,避免低性能的服務器負載過重。

(3)隨機均衡調度(Random Scheduling)算法

把來自網絡的請求隨機分配給各個服務器。

(4)加權隨機均衡調度(Weighted Random Scheduling)算法

此種均衡算法類似于加權輪轉算法,不過在處理請求分擔時是個隨機選擇的過程。

(5)最小連接調度(Least-Connection Scheduling)算法

該算法是一種動態調度算法,通過服務器中當前所活躍的連接數來估計服務器的負載情況,把新的連接請求分配到當前連接數最小的服務器。但是,當各個服務器的處理能力不同時,該算法并不理想。

(6)加權最小連接調度(Weighted Least-Connection Scheduling)算法

用相應的權值表示各個服務器的處理性能,具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢服務器的負載情況,并動態地調整其權值。

(7)目標地址散列調度(Destination Hashing Scheduling)算法

根據請求的目標 IP地址,將其作為散列鍵(Hash Key),通過散列(Hash)函數將這個目標IP地址映射到一臺可用且未超載的服務器,將請求發送到該服務器,屬于靜態映射算法。

(8)源地址散列調度(Source Hashing Scheduling)算法

與目標地址散列調度算法相反,根據請求的源 IP地址,作為散列鍵(HashKey),通過散列函數將請求的源IP地址映射到一臺可用且未超的服務器,將請求發送到該服務器。除了將請求的目標IP地址換成請求的源IP地址,該算法采用的散列函數與目標地址散列調度算法相同,算法流程與目標地址散列調度算法的基本相似。在實際應用中,源地址散列調度和目標地址散列調度可以結合使用在防火墻集群中,它們可以保證整個系統的唯一出入口。

(9)基于局部性的最少鏈接調度(Locality-Based Least ConnectionsScheduling)算法

找出請求的目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;否則用“最少鏈接”的原則選出一個可用的服務器。算法的設計目標是在服務器的負載基本平衡情況下將相同目標IP地址的請求調度到同一臺服務器,來提高各臺服務器的訪問局部性和主存Cache命中率。

(10)帶復制的基于局部性最少鏈接調度(Locality-Based Least Connectionswith Replication Scheduling)算法

與基于局部性的最少鏈接調度算法的不同之處在于,它要維護從一個目標IP地址到一組服務器的映射,而不是從一個目標IP地址到一臺服務器的映射。該算法找出請求的目標IP地址對應的服務器組,按“最少鏈接”原則從服務器組中選出一臺服務器,若服務器可用且沒有超載,將請求發送到該服務器;否則按“最少鏈接”原則從這個集群中選出一臺服務器,將該服務器加入到服務器組中,再將請求發送到該服務器。另外,若該服務器組有一段時間未被修改,則將最忙的服務器從服務器組中刪除,以降低復制的程度。

(11)響應速度均衡調度(Response Time Scheduling)算法

負載均衡設備對內部各服務器發出一個探測請求,然后由對探測請求響應最快的一臺服務器來響應客戶端的服務請求。

(12)處理能力均衡調度(Processing Capacity Scheduling)算法

負載均衡設備記錄集群內部處理負荷(根據服務器CPU型號、CPU數量、內存大小及當前連接數等換算而成),將服務請求分配給負荷最輕的服務器。由于考慮到了內部服務器的處理能力及當前網絡運行狀況等不同情形,因此這種均衡算法相對來說更加精確,尤其適合運用到第7層(應用層)負載均衡的情況,但附加開銷也較大。

(13)DNS均衡調度(DNS Scheduling)算法

分處在不同地理位置的負載均衡設備,收到同一個客戶端的域名解析請求,并在同一時間內,把此域名解析成各自相對應服務器的IP地址,并返回給客戶端,客戶端將以最先收到的域名解析IP地址來繼續請求服務,而忽略其他的IP地址響應。

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

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

相關文章

對于shell腳本參數獲取時的一點小技巧

問題如下: 根據腳本參數的個數$#進行一個循環,在依次輸出每個參數$1 $2 $3...... 我有一個循環變量i $i 取到這時的i為1,我想使用這個1再去調用$1,也是就是打印出第一個參數 就是$($i)的意思來取到第幾個參數,當然$($i)是不好用的…

(轉)頁游安全攻與防,SWF加密和隱藏密匙

原文鏈接:http://netsecurity.51cto.com/art/201211/364775.htm 頁游,最最核心的就是客戶端(swf)與服務端的游戲通信了。游戲通信產生的封包,內容是否可識別,可篡改,可重放,處理邏輯…

C++自動類型推導 : auto 與 decltype 用法

基本用法與區別 auto 總是推導出“值類型”,絕不會是“引用”,如果有引用,auto會把引用去掉,推導出值類型; auto 可以附加上 const、volatile、*、& 這樣的類型修飾符,得到新的類型。 auto x 10L; // auto推導為…

C++智能指針使用指南 part1:基本使用

加粗樣式>TOC 智能指針是代理模式的具體應用,它使用 RAII 技術代理了裸指針,能夠自動釋放內存, 無需程序員干預,所以被稱為“智能指針”。 智能指針不是指針,而是一個對象,所以不要對其調用delete&…

AS3.0 BitmapData類介紹

注:文中的Bitmapdata和BMD均為同一意思BitmapData,BMD為其縮寫一,概括: Bitmapdata繼承Object對象,實現IBitmapDrawable接口,這個接口有什么用,你可以理解為Drawable,能被畫。官方介紹是:IBitma…

C++使用JSON的序列化與反序列化

這里使用的json解析工具為JSON for Modern C,使用的話僅需要包含頭文件。 獲取方式:wget https://github.com/nlohmann/json/releases/download/v3.7.3/json.hpp JSON json的序列化功能和map一樣,用關聯數組的"[]"來任意添加數據&#xff0c…

iOS判斷為空或者只為空格

本文轉載至 :http://www.cnblogs.com/superhappy/archive/2012/11/08/2761403.html 經常有需求 要判斷不能為空,后臺老是鄙視不做非空判斷的前端 ,木辦法 只能寫一個。 第一種想法:我不就是判斷 是不是nil就可以了么。結果發現太天…

Hyper-V

Hyper-V:也就是虛擬化技術,允許終端用戶在同一臺機器上運行多個操作系統,支持32位和64位系統,可以直接在Windows 8上創建自己的虛擬機。開啟Hyper-V虛擬機需要更多的內存,正常運行需要至少4GB以上內存,所以…

sdut 1451 括號東東 DP

http://acm.sdut.edu.cn/sdutoj/problem.php?actionshowproblem&problemid1451 題意:中文..... 思路: pku有一道題,經典的括號匹配(區間DP)題目,那道題目是求的最長滿足條件的子串的長度,那…

CDN緩存替代算法

CDN緩存工作過程如下:用戶發出一個請求,如果請求被命中,緩存將對用戶的請求進行響應,返回其請求的數據;如果未被命中,緩存向上拉取用戶需要的數據,并對其存儲的數據進行替換。 緩存算法的意義在…

前端開發常用正則表達式

1、電話 var phone /(^[^1][0-9\-]{6,20}$)|(^(134|135|136|137|138|139|150|151|152|157|158|159|182|183|187|188|147|130|131|132|155|156|185|186|145|133|153|180|189|181|184)\d{8}$)/ 2、郵箱 var email /^([a-zA-Z0-9_.-])([a-zA-Z0-9_-])((\.[a-zA-Z0-9_-]{2,3}){1,…

android 中調用接口發送短信

轉載:http://ziyu-1.iteye.com/blog/1013932 android中可以通過兩種方式發送短信 第一:調用系統短信接口直接發送短信;主要代碼如下: Java代碼//直接調用短信接口發短信 SmsManager smsManager SmsManager.getDefault(); List…

linux 命令案例學習——文件搜索

兩個搜索文件的工具 locate ——僅僅通過文件名查找文件find ——依據文件的各種屬性在既定目錄(包括子目錄)里查找一個通常與文件搜索命令一起使用、處理搜索結果文件列表的命令 xargs1 locate 1.1 查找文件名中含有zip的文件名 locate zip 看下結…

Redis 緩存擊穿、緩存穿透、緩存雪崩的處理方法

常用的分布式緩存Redis單機并發量能達到萬級,常用的關系型數據庫MySQL一般并發量是千級,他們支持的并發量可能差十倍,所以要盡可能把流量攔截在緩存層。 緩存擊穿 一個并發訪問量比較大的key在某個時間過期,導致所有的請求直接打…

Java-- 異常與記錄日志

可以使用java.util.logging工具將輸出記錄在日志中。記錄日志的的功能還是很簡單的,下面直接鋪出代碼: 1 package com.exceptions;2 3 import java.io.*;4 import java.util.logging.Logger;5 6 class LoggingException extends Exception{7 private…

圖像處理基礎

圖像處理基礎 在計算機中,按照顏色和灰度的多少可以將圖像分為二值圖像、灰度圖像、索引圖像和真彩色RGB圖像四種基本類型。目前,大多數圖像處理軟件都支持這四種類型的圖像。 (1) 二值圖像:一幅二值圖像的二維矩陣僅由0、1兩個值構成&#x…

緩存一致性解決方法

對于緩存 數據庫讀寫,有個經典的Cache Aside Pattern: 讀取:先讀取緩存,緩存里沒有,讀取數據庫,然后返回響應,順便保存緩存: 更新:先更新數據庫,然后刪除緩…

使用SpringMVC的表單驗證

上一篇搭建了基本項目,這一篇在此基礎上加入表單驗證功能。 第一步,添加command類 Java代碼 package test.bean; import javax.validation.constraints.Size; public class User { Size(min3,max30) private String username; …

hdu1247(Hat’s Words)

我以為像a、aa這樣的輸入應該是沒有輸出的,結果還是要輸出aa。 建樹的時候就是常規建樹,不過查找的時候要做一些變形:對于一個單詞,從第一位檢查有沒有單詞是它的前綴,如果有的話,再去檢查它的后半部分是不…

單體、分布式、微服務、Serverless軟件架構一覽

目錄軟件架構單體架構分布式應用微服務架構Serverless架構總結Reference軟件架構 軟件架構就是軟件的基本結構,合適的架構是軟件成功的最重要因素之一。這里列舉了目前流行的4種軟件架構。 單體架構 典型的三級架構:前端(web/手機端&#…