后臺系統可擴展性學習筆記(五)負載均衡

文章目錄

  • Load balancer(負載均衡器)
  • 請求傳輸拆解
  • DNS 負載均衡
  • 客戶端負載均衡
  • OSI 七層模型回顧
  • 2 層、3 層負載均衡
  • 3/4 層負載均衡
  • 7 層負載均衡

在 第一節談到了系統的橫向擴展在于從單機擴展到多機,那么面臨的第一個問題就是這些機器如何協同工作,即如何調度請求?
在這里插入圖片描述

Load balancer(負載均衡器)

多服務器下的請求調度機制稱為負載均衡(Load balancing),調度器(Dispatcher)即負載均衡器(Load balancer):
在這里插入圖片描述
負載平衡器的基本功能是能夠根據調度算法在集群中的多個后端服務器上分發傳入請求。
其主要作用是根據既定策略(如隨機、輪流)將客戶端請求分發給各個服務器,之前有過相關算法整理:13種負載均衡算法
優點:

  • 防止請求到達不可用的服務器
  • 防止資源過載
  • 消除單點故障,提升可用性

還可以用于:

  • SSL termination:處理 SSL 連接,將加密解密的工作前置到調度層
  • 會話保留(Session persistence):集中處理會話,避免切換服務器造成會話狀態丟失

也就是說,多機場景下,必須要有一個負責分發/調度請求的負載均衡器,那么,接下來的問題是應該在哪一層實現負載均衡機制

請求傳輸拆解

考慮一個 HTTP 請求從客戶端到服務器的通信過程,可以簡單劃分為 3 個階段:

  • 出發:客戶端發出請求
  • 途中:請求經網絡傳輸
  • 到達:服務器收到請求

對請求進行分發/調度,就是要想辦法(按既定策略)改變請求的目的地,那么,至少有 3 種思路:

  • 出發前:在請求經網絡傳輸之前,就確定最終目的地,例如 DNS 負載均衡、客戶端負載均衡
  • 傳輸中:在網絡傳輸的某些環節改變目的地,例如 4 層負載均衡
  • 到達后:在請求抵達服務器后,進行二次分發,例如 7 層負載均衡

下面逐個講解這幾種負載均衡

DNS 負載均衡

客戶端要向服務器發起請求,首先要知道服務器的 IP 地址,通過DNS來查詢,DNS 維護著域名與 IP 地址之間的映射關系,因此可以在這里實現負載均衡策略,將請求指向目標服務器(的 IP 地址),例如:

  • 輪流分發:添加一系列 A 記錄,將同一域名指向多個不同的 IP 地址即可,稱為round-robin DNS
  • 隨機分發:采用支持多值應答路由策略的 DNS 服務

這兩個方法簡單易用,但缺陷也很明顯:

  • 可靠性沒有保障:DNS 并不檢查服務器的可用性,即便目標服務器 down 掉了或者無法訪問了,也返回其 IP 地址
  • 更新不及時:DNS 的解析結果往往會被層層緩存,記錄更新無法立即生效

客戶端負載均衡

同理,把服務器 IP 地址選擇機制拿到客戶端來實現,就叫客戶端負載均衡,由客戶端自行選擇目標服務器的 IP 地址(不再通過 DNS 查詢):
在這里插入圖片描述
例如,向客戶端提供服務器 IP 列表,客戶端發起請求之前隨機選取一個 IP,就能達到隨機分發的目的
比起 DNS 負載均衡,客戶端不存在緩存的問題,而且能夠進行更精細的控制,比如檢查服務可用性,并從中選取可用的 IP 地址

OSI 七層模型回顧

在計網中我們學過網絡的七層模型,將網絡通信分為 7 個抽象層:
在這里插入圖片描述
自下而上,依次為:

  • 物理層(1):通過物理介質傳輸原始比特流,即物理信號
  • 數據鏈路層(2):提供可靠的節點間數據幀傳輸機制,具體工作包括MAC尋址
  • 網絡層(3):決定數據包傳輸采取的物理路徑,支持IP、ARP等協議,具體包括IP尋址、路由和流量控制
  • 傳輸層(4):提供可靠的報文傳輸機制,支持TCP、UDP等傳輸協議,此時依賴于IP和端口號通信
  • 會話層(5):負責管理會話,以支持通過多次傳輸連續交換信息
  • 表現層(6):將來自網絡服務的數據翻譯成應用層可用的格式,具體工作包括字符編碼轉換、數據壓縮、加密解密等
  • 應用層(7):提供高級API的人機交互層,應用能夠通過該層訪問網絡服務,如資源共享、遠程文件訪問等

其中,第 1 層是原始數據,第 2 層確定目標機器的 MAC 地址,第 3 層確定終點的 IP 地址,以及途經的具體路線,到第 4 層,要根據傳輸協議確定目標端口號,第 5~7 層不關心終點,因為 IP 地址 + MAC 地址 + 端口號已經唯一確定了目標應用程序.
也就是說,一個 HTTP 請求必須經由這些層才能到達目標服務器,那么,理論上,在第 2~7 層中的任意一層都有機會變更終點,實現負載均衡。而常見的負載均衡機制多實現在第 4 層和第 7 層。

2 層、3 層負載均衡

  • 2 層負載均衡:根據源/目標 MAC 地址進行分發,例如將虛擬 MAC 地址根據既定策略映射到實際 MAC 地址
  • 3 層負載均衡:根據源/目標 IP 地址,以及第 2 層信息進行分發,例如解析虛擬 IP(Virtual IP address)

越靠近底層,所能用來進行分發決策的信息越少,所以 2 層負載均衡的實際用途有限,常見的只有冗余網關協議(如GLBP、VRRP)和鏈路聚合(Link aggregation,也叫 etherchannel)等。

3/4 層負載均衡

4 層負載均衡基于傳輸層(第 4 層)信息進行請求分發,包括源/目標 IP 地址,以及數據包頭部的端口號,但不考慮數據包內容:

第4層負載平衡使用在網絡傳輸層(第4層)定義的信息作為決定如何在一組服務器之間分發客戶端請求的基礎。
具體來說,對于Internet流量,第4層負載平衡器根據包頭中記錄的源和目標IP地址以及端口來做出負載平衡決策,而不考慮包的內容

客戶端將將負載均衡器的 IP 地址作為目標 IP 地址發起請求,4 層負載均衡器收到請求后,對數據包進行NAT轉換,將目標 IP 地址修改成實際服務器的地址,在將服務器響應轉發給客戶端之前,負載均衡器再將源 IP 地址改成自身的 IP 地址。類似的,對數據包中的源/目標端口號也以這種方式進行修改。
第 4 層負載均衡器通常是專用的硬件設備,NAT 操作可能會由專用芯片來完成。
與更復雜的 7 層負載均衡相比,4 層負載均衡所需的計算更少,但在目前的硬件條件下,由此帶來的性能優勢已經不重要了。嚴格來講,4 層負載均衡應該叫 3/4 層負載均衡,因為結合了第 3 層的 IP 地址和第 4 層的端口號信息

7 層負載均衡

第7層負載平衡器根據HTTP頭的各種特征和消息的實際內容(例如URL、數據類型(文本、視頻、圖形)或cookie中的信息)來決定路由。
比起 4 層負載均衡,7 層負載均衡可以讀取請求和響應內容,所需的計算雖然更多,但不見得比 4 層負載均衡性能更差,因為擁有更全面的上下文信息,可以在此基礎上進行更聰明的全局決策(比如剔除慢速連接、重定向超時請求),甚至還能對內容進行優化(比如壓縮),從而提高性能。
嚴格來講,7 層負載均衡應該叫 5~7 層負載均衡,因為結合了 OSI 模型中 5~7 層的相關信息:
在這里插入圖片描述

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

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

相關文章

Struts2第一個工程helloStruts極其基本配置

前面已經準備好了Struts-2.3.15,現在就可以直接搭建Struts2的工程了。前面http://blog.csdn.net/huangchnegdada/article/details/9179041有對Struts-2.3.15的準備工作的詳述。 首先打開MyEclispe新建一個Web Project,名字就叫Struts2_0100_Introduction…

[LeetCode]Find Minimum in Rotated Sorted Array

題目描述: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exists in the array. 解題方案: 直接貼代碼&…

后臺系統可擴展性學習筆記(六)反向代理

文章目錄Web代理服務反向代理反向代理作用Web代理服務 Web 代理服務指的是在客戶端資源請求和提供這些資源的 Web 服務之間充當中介的角色,代理服務可以實現在客戶端,或者從客戶端到目標服務器中間的任意環節。 例如,客戶端不直接向提供目標…

(C)單鏈表

老師版 1 #include <stdio.h>2 #include <stdlib.h>3 4 // 定于Node數據類型5 struct Node6 {7 int data; // 數據域8 struct Node *next; // 指針域9 };10 11 // 創建一個單鏈表&#xff0c;并把head節點返回&#xff1b;…

實驗:sigsuspend(),sigprocmask()

實驗&#xff1a;sigsuspend(),sigprocmask()源代碼&#xff1a;/* * Program: pause_suspend.c * To test the difference between sigsuspend() and paus(). * Author: zsl * Date: 2014-10-17 * First release. * 參見網頁&#xff1a;http://blog.csdn.net/liwentao1091/ar…

后臺系統可擴展性學習筆記(七)Service Discovery與微服務

文章目錄應用層微服務架構服務注冊查詢 Service Discovery客戶端 Service DiscoveryDNS-SD DNS-based Service Discovery服務端 Service Discovery服務注冊與注銷自注冊模式第三方注冊模式總結參考應用層 在簡單的 3 層結構中&#xff0c;Web 服務層既要處理請求&#xff0c;又…

很久沒寫代碼了,這(那)幾天真是累死了。。。先寫一個幻方的程序吧

1 #include <stdio.h>2 #include <stdlib.h>3 #include <windows.h>4 5 #define EVEN_DOUBLE_4 4 //雙偶的最基本類型&#xff0c;4階雙偶6 #define SCREEN_SIZE 19 //屏幕顯示不變形的最大尺寸&#xff08;主要是因為窗口大小限制&#xff09;7 #defi…

#pragma once

http://baike.baidu.com/view/1276747.htm?fraladdin 轉載于:https://www.cnblogs.com/prayer521/p/4069040.html

后臺系統可擴展性學習筆記(八)Service Mesh

文章目錄網絡傳輸可靠性將微服務控制下沉到網絡棧&#xff1f;Sidecar從 Sidecar 到 Service MeshService Mesh 部署平臺參考網絡傳輸可靠性 從計網的學習過程中我們可以知道數據在網絡傳輸中可能會出現一些異常狀況&#xff1a; 數據丟失&#xff1a;數據包可能會到達一個緩…

關于Spring batch的學習之CSV2DB

最近在學習Spring batch相關的內容&#xff0c;網上也有不少Spring Batch相關的知識&#xff0c;不過大多都是使用xml進行配置的。這里是我用注解的方式進行相關的學習心得。 首先我們來看如何將一個文本文件中的內容導入到數據庫中。 我們先來看一下我們所需要的環境。我們這里…

后臺系統可擴展性學習筆記(九)Database Replication

文章目錄數據庫擴展一致性問題Replication &#xff08;復制&#xff09;異步復制同步復制半同步復制拓撲結構單主結構多主結構無主結構復制具體措施參考數據庫擴展 之前在第一章后臺系統可擴展性學習筆記&#xff08;一&#xff09;概要談到&#xff1a;理論上&#xff0c;有…

python中的sum函數.sum(axis=1)

看起來挺簡單的樣子&#xff0c;但是在給sum函數中加入參數。sum&#xff08;a&#xff0c;axis0&#xff09;或者是.sum(axis1) 就有點不解了 在我實驗以后發現 我們平時用的sum應該是默認的axis0 就是普通的相加 而當加入axis1以后就是將一個矩陣的每一行向量相加 例如&…

后臺系統可擴展性學習筆記(十)Database Partitioning

為了提升數據庫的處理能力&#xff0c;我們把單庫擴展成多庫&#xff0c;并通過更新同步機制&#xff08;即Replication&#xff09;來保證多份數據的一致性。然而&#xff0c;在 各種復制方案下&#xff0c;每個數據庫都持有一份完整數據&#xff0c;基于全量數據提供增刪改查…

基于FPGA的HDTV視頻圖像灰度直方圖統計算法設計

隨著HDTV的普及&#xff0c;以LCD-TV為主的高清數字電視逐漸進入蓬勃發展時期。與傳統CRT電視不同的是&#xff0c;這些高清數字電視需要較復雜的視頻處理電路來驅動&#xff0c;比如&#xff1a;模數轉換&#xff08;A/D Converter&#xff09;、去隔行&#xff08;De-interla…

后臺系統可擴展性學習筆記(十一)Database Denormalization

之前的兩篇筆記中談到了從單庫擴展到多庫以承載更多的請求量以及單庫&#xff08;表&#xff09;拆分成多庫&#xff08;表&#xff09;&#xff0c;打破單庫的性能瓶頸。 這都是為了應對大數據量下的措施。 然而&#xff0c;除卻數據量外&#xff0c;還有一個極其影響單庫性能…

Java Swing 影樓管理系統之登錄功能

開頭打廣告&#xff0c;Java1234.com。 首先&#xff0c;來個效果圖。 關鍵代碼 1&#xff0c;界面層 private void Jb_DengLuActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String UserName this.Jb_UserNameTxt.getText();String …

Bdsyn百度手機助手是何物,它是怎樣神不知鬼不覺地安裝到你的電腦里的?

【電腦軟件管理中Bdsyn手機助手的問題】Bdsyn手機助手 is developed by Baidu, Inc. and is used by 10 users of Software Informer. 并不是本人安裝的&#xff08;應該是自己自己主動安裝的&#xff09;&#xff0c;卸載以后過幾天又會出如今軟件列表里。百度搜索卻無法搜索出…

后臺系統可擴展性學習筆記(十二)NoSQL

文章目錄NoSQL定義NoSQL種類鍵值存儲文檔存儲寬列存儲圖形數據庫NoSQL 意味著什么ACID vs. BASESQL or NoSQLNoSQL定義 不同于關系型數據庫&#xff0c;NoSQL 數據庫&#xff08;也叫非 SQL 或非關系型數據庫&#xff09;提供的數據存儲、檢索機制并不是基于表關系建模的。沒有…

android2.2應用開發之IccCard(sim卡或USIM卡)

tyle"margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51)"> 如果要做android通訊錄的聯系人的機卡混排顯示&#xff0c;由于手機卡類型的不同&#xff0c;導致手機卡存儲容量以及可以存儲信息不同&#xff0c;就要涉…

后臺系統可擴展性學習筆記(十三)緩存

文章目錄在哪兒加緩存緩存什么內容緩存原始查庫結果緩存數據對象怎么查詢緩存結果預留緩存模式直讀模式直寫模式回寫式緩存繞寫式緩存提前刷新模式緩存滿了如何處理參考讀寫分離、分庫分表、反范式化、采用 NoSQL……如果這些擴展手段全都上了&#xff0c;數據響應依舊越來越慢…