負(fù)載均衡技術(shù)的知識點有哪些-創(chuàng)新互聯(lián)

這篇文章主要介紹“負(fù)載均衡技術(shù)的知識點有哪些”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“負(fù)載均衡技術(shù)的知識點有哪些”文章能幫助大家解決問題。

成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,先為澄海等服務(wù)建站,澄海等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為澄海企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

1、概述

通過前面文章的介紹,并不能覆蓋負(fù)載均衡層的所有技術(shù),但是可以作為一個引子,告訴各位讀者一個學(xué)習(xí)和使用負(fù)載均衡技術(shù)的思路。雖然后面我們將轉(zhuǎn)向“業(yè)務(wù)層”和“業(yè)務(wù)通信”層的介紹,但是對負(fù)載均衡層的介紹也不會停止。在后續(xù)的時間我們將穿插進行負(fù)載均衡層的新文章的發(fā)布,包括Nginx技術(shù)的再介紹、HaProxy、LVS新的使用場景等等。

這篇文章我們對前面的知識點進行總結(jié),并有意進行一些擴展,以便于各位讀者找到新的學(xué)習(xí)思路。

2、負(fù)載均衡層的核心思想

2-1、一致性哈希與Key的選取

負(fù)載均衡技術(shù)的知識點有哪些

我們詳細(xì)介紹了一致性哈希算法。并且強調(diào)了一致性Hash算法是現(xiàn)代系統(tǒng)架構(gòu)中的最關(guān)鍵算法之一,在分布式計算系統(tǒng)、分布式存儲系統(tǒng)、數(shù)據(jù)分析等眾多領(lǐng)域中廣泛應(yīng)用。針對我的博文,在負(fù)載均衡層、業(yè)務(wù)通信層、數(shù)據(jù)存儲層都會有它的身影。

一致性算法的核心是:

使用對象的某一個屬性(這個屬性可以是服務(wù)器的IP地址、開放端口 還可以是用戶名、某種加密串。凡是你可以想到的有散列意義的屬性),算出一個整數(shù),讓其分布在0 至 2的32次方 范圍內(nèi)。

一臺服務(wù)器的某個或者某一些屬性當(dāng)然也可以進行hash計算,并且根據(jù)計算分布在這個圓環(huán)上的某一個點,也就是圖中圓環(huán)上的藍色點。

一個處理請求到來時,根據(jù)這個請求的某一個或者某一些屬性進行hash計算,并且根據(jù)計算記過分布在這個圓環(huán)上的某一個點上。也就是上圖圓環(huán)上的黃色點。

我們約定落在某一個藍點A左側(cè)和藍點B右側(cè)的黃色點所代表的請求,都有藍點A所代表的服務(wù)器進行處理,這樣就完成解決了“誰來處理”的問題。在藍色點穩(wěn)定存在的前提下,來自于同一個Hash約定的請求所落在的位置都是一樣的,這就保證了服務(wù)處理映射的穩(wěn)定性。

當(dāng)某一個藍色點由于某種原因下線,其所影響到的黃色點也是有限的。即下一次客戶端的請求將由其他的藍色點所代表的服務(wù)器進行處理。

2-2、輪詢與權(quán)

負(fù)載均衡技術(shù)的知識點有哪些

不加權(quán)輪詢,就是主控節(jié)點(任務(wù)來源點)在不考慮目標(biāo)節(jié)點的任何因素的情況下(例如CPU性能、磁盤性能、網(wǎng)絡(luò)性能),按照目標(biāo)節(jié)點的列表順序?qū)⑷蝿?wù)依次分配下去。這是最簡單的輪詢,也是對主控節(jié)點實現(xiàn)復(fù)雜性要求最低的輪詢。我之前的博文《架構(gòu)設(shè)計:負(fù)載均衡層設(shè)計方案(2)——Nginx安裝》、《架構(gòu)設(shè)計:負(fù)載均衡層設(shè)計方案(4)——LVS原理》 都對這種最簡輪詢進行了介紹:例如LVS中的“rr”參數(shù)。

加權(quán)輪詢中的“權(quán)”,您可以看成是“輪詢”依據(jù)的意思?!皺?quán)”可以是很多種可能,可以是目標(biāo)機器的性能量化值、可以是一個固定的數(shù)字(按照固定數(shù)字加權(quán))、可以是目標(biāo)節(jié)點的網(wǎng)絡(luò)速度。例如LVS中的“l(fā)c”參數(shù),就是指按照目標(biāo)機器,現(xiàn)在已有的“連接”數(shù)量進行加權(quán):連接數(shù)量越少,越有更大的幾率獲得這個任務(wù)的處理權(quán)。

2-3、租約與健康檢查

負(fù)載均衡技術(shù)的知識點有哪些

租約協(xié)議主要為了保證一個事實:如果服務(wù)器對客戶端的檢查操作在“最遲時間”失敗后,那么服務(wù)器端肯定會注銷客戶端的登錄信息,同時客戶端上服務(wù)器的連接信息也會消失(并且不在向下提供服務(wù))。每一次檢查成功,這個“最遲時間”都會向后推移。

租約協(xié)議和我們提到的哈希算法一下一樣,也是系統(tǒng)架構(gòu)設(shè)計中最基本的設(shè)計思想,并且大量運用在各類型的系統(tǒng)中,它的工作原理是每一位架構(gòu)師都需要掌握的。例如:zookeeper使用這個協(xié)議保證Flow節(jié)點和Leader節(jié)點的鏈路是正常的;分布式存儲系統(tǒng)用這個協(xié)議保證datanode和namenode的連接是正常的;

3、負(fù)載均衡層技術(shù)匯總

在前面的博文中,我重點介紹了Nginx、LVS、Keepalived技術(shù)。由于時間有限,這里我們對博文中提到的幾種技術(shù)進行一個總結(jié),然后再擴展介紹一下DNS技術(shù)、CDN技術(shù)和硬件負(fù)載技術(shù)。

3-1、Nginx技術(shù)

在負(fù)載均衡層這個大的章節(jié)中,我有三篇文章都在直接介紹Nginx的原理和使用。但是之后有朋友給我反映還想了解更多的Nginx知識,特別點名要求我再做一篇文章介紹Nginx的動態(tài)緩存。是的,我在后面的時間里是有計劃介紹Nginx的動態(tài)緩存技術(shù),還會介紹Nginx和多款主流的反向代理軟件的性能對比。但這需要時間,特別是我不想去網(wǎng)上找一些已有的性能對比圖,還是自己一邊做這樣的性能測試,一邊做性能報告比較靠譜。

下面這些技術(shù)是我在博文中已經(jīng)重點介紹過得,我們再做一下總結(jié):

Nginx中的連接數(shù)限制問題

重要的配置項包括:worker_processes、worker_connections。但是光是配置這些屬性是不夠的,最關(guān)鍵的是我們要打開操作系統(tǒng)級別的“大文件數(shù)”限制問題。使用“ulimit -n 65535”設(shè)置本次會話的“大文件數(shù)”限制;還要使用“vim /etc/security/limits.conf”命令,修改內(nèi)核的配置信息。主要是以下兩項:

* soft nofile 65535* hard nofile 65535

另外,還要注意和nginx配置項中的“worker_rlimit_nofile”屬性共同使用:

user root root; worker_processes4; worker_rlimit_nofile65535;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid; events {     use epoll;     worker_connections65535; }

Nginx中的Gzip技術(shù)

gzip是Nginx進行HTTP Body數(shù)據(jù)壓縮的技術(shù)。下面這段Nginx配置信息是啟用gzip壓縮的實例:

#開啟gzip壓縮服務(wù), gzipon;#gzip壓縮是要申請臨時內(nèi)存空間的,假設(shè)前提是壓縮后大小是小于等于壓縮前的。例如,如果原始文件大小為10K,那么它超過了8K,所以分配的內(nèi)存是8 * 2 = 16K;再例如,原始文件大小為18K,很明顯16K也是不夠的,那么按照 8 * 2 * 2 = 32K的大小申請內(nèi)存。如果沒有設(shè)置,默認(rèn)值是申請跟原始數(shù)據(jù)相同大小的內(nèi)存空間去存儲gzip壓縮結(jié)果。 gzip_buffers28k;#進行壓縮的原始文件的最小大小值,也就是說如果原始文件小于5K,那么就不會進行壓縮了 gzip_min_length6K;#gzip壓縮基于的http協(xié)議版本,默認(rèn)就是HTTP 1.1 gzip_http_version1.1;# gzip壓縮級別1-9,級別越高壓縮率越大,壓縮時間也就越長CPU越高 gzip_comp_level5;#需要進行g(shù)zip壓縮的Content-Type的Header的類型。建議js、text、css、xml、json都要進行壓縮;圖片就沒必要了,gif、jpge文件已經(jīng)壓縮得很好了,就算再壓,效果也不好,而且還耗費cpu。 gzip_typestext/HTMLtext/plainapplication/x-javascripttext/cssapplication/xml;

http返回數(shù)據(jù)進行壓縮的功能在很多場景下都實用:

a、 如果瀏覽器使用的是3G/4G網(wǎng)絡(luò),那么流量對于用戶來說就是money。

b、 壓縮可節(jié)約服務(wù)器機房的對外帶寬,為更多用戶服務(wù)。按照目前的市場價良好的機房帶寬資源的一般在200RMB/Mbps,而服務(wù)器方案的壓力往往也來自于機房帶寬。

c、 不是Nginx開啟了gzip功能,HTTP響應(yīng)的數(shù)據(jù)就一定會被壓縮,除了滿足Nginx設(shè)置的“需要壓縮的http格式”以外,客戶端(瀏覽器)也需要支持gzip(不然它怎么解壓呢),一個好消息是,目前大多數(shù)瀏覽器和API都支持http壓縮。

Nginx中的rewrite(重寫)技術(shù)

Nginx的強大在于其對URL請求的重寫(重定位)。Nginx的rewrite功能依賴于PCRE Lib,請一定在Nginx編譯安裝時,安裝Pcre lib。

下面是一段rewrite的示例:

#示例1:location ~* ^/(.+)/(.+)\.(jpg|gif|png|jpeg)$ {    rewrite ^/orderinfo/(.+)\.(jpg|gif|png|jpeg)$ /img/$1.$2break;    root   /cephclient;}#location在不進行大小寫區(qū)分的情況下利用正則表達式對$url進行匹配。當(dāng)匹配成功后進行rewrite重定位。#rewrite進行重寫url的規(guī)則是:regex表達式第一個括號中的內(nèi)容對應(yīng)$1,regex表達式第二個括號中的內(nèi)容對應(yīng)$2,以此類推。#這樣重定位的意義就很明確了:將任何目錄下的文件名重定位到img目錄下的對應(yīng)文件名,#并且馬上在這個location中(注意是Nginx,而不是客戶端)執(zhí)行這個重寫后的URL定位。#示例2:server {    。。。。    。。。。    location ~* ^/orderinfo/(.+)\.(jpg|gif|png|jpeg)$ {        rewrite ^/orderinfo/(.+)\.(.+)$ /img/$1.$2last;    }    location / {        root   /cephclient;    }}#在server中,有兩個location位置,當(dāng)url需要訪問orderinfo目錄下的某一個圖片時,rewrite將重寫這個url,#并且重新帶入這個url到server執(zhí)行,這樣“l(fā)ocation /”這個location就會執(zhí)行了,并找到圖片存儲的目錄。

Nginx的圖片處理模塊

http_image_filter_module 是nginx的圖片處理模塊,是使用nginx進行靜態(tài)資源和動態(tài)資源分開管理的關(guān)鍵引用技術(shù)。通過這個模塊可以對靜態(tài)資源進行縮放、旋轉(zhuǎn)、驗證。

需要注意的是,http_image_filter_module模塊所處理的縮率圖片是不進行保存的,完全使用節(jié)點的CPU性能進行計算,使用節(jié)點的內(nèi)存進行臨時存儲。所以如果要使用http_image_filter_module進行圖片處理,一定要根據(jù)客戶端的請求規(guī)模進行nginx節(jié)點的調(diào)整。并且當(dāng)站點的PV達到一定的規(guī)模時,一定要使用CDN技術(shù)進行訪問加速、對圖片的訪問處理手段進行規(guī)劃。

由于我們在之前涉及Nginx的文章中,并沒有詳細(xì)講解Nginx的圖片處理模塊,只是說了要進行介紹,所以這里我給出一個較為詳細(xì)的安裝和配置示例:

nginx的http_image_filter_module模塊由GD library進行支持,所以要使用這個圖片處理模塊,就必須進行第三方依賴包的安裝:

yuminstallgd-devel

然后,Nginx要進行重新編譯:

configure--with-http_image_filter_modulemake&&make install

使用圖片處理模塊的配置示例:

location ~* /(.+)_(\d+)_(\d+)\.(jpg|gif|png|ioc|jpeg)$ {set$h$3;set$w$2;    rewrite /(.+)_(\d+)_(\d+)\.(jpg|gif|png|ioc|jpeg)$ /$1.$4break;    image_filter resize$w$h;    image_filter_buffer2M;}

其中關(guān)于正則表達式的語法和已經(jīng)介紹過的rewrite的語法就不再進行介紹了,主要看http_image_filter_module相關(guān)的屬性設(shè)置:

image_filter test:測試圖片文件合法性

image_filter rotate:進行圖片旋轉(zhuǎn),只能按照90 | 180 | 270進行旋轉(zhuǎn)

image_filter size:返回圖片的JSON數(shù)據(jù)

image_filter resize width height:按比例進行圖片的等比例縮小,注意,是只能縮小,第二縮小是等比例的。

image_filter_buffer:限制圖片大讀取大小,沒有設(shè)置就是1M;根據(jù)不同的系統(tǒng)最好設(shè)置為2M—3M

image_filter_jpeg_quality:設(shè)置jpeg圖片的壓縮比例(1-99,越高越好)

image_filter_transparency:禁用gif和png圖片的透明度。

和Nginx類似的其他技術(shù)/軟件

目前行業(yè)內(nèi)也有很多與Nginx解決同類問題的軟件,他們分別是Apache基金會的 Apache HTTP Server、淘寶開源的Tengine、Haproxy、包括Windows 下運行的IIS,也支持反向代理 。

這里筆者再次重點提到Tengine,建議各位讀者有時間的時候可以使用一下,這個對Nginx進行了深度再開發(fā)的軟件。

3-2、LVS技術(shù)

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務(wù)器,是一個虛擬的服務(wù)器集群系統(tǒng)。本項目在1998年5月由章文嵩博士成立。

LVS集群采用IP負(fù)載均衡技術(shù)和基于內(nèi)容請求分發(fā)技術(shù)。調(diào)度器具有很好的吞吐率,將請求均衡地轉(zhuǎn)移到不同的服務(wù)器上執(zhí)行,且調(diào)度器自動屏蔽掉服務(wù)器的故障,從而將一組服務(wù)器構(gòu)成一個高性能的、高可用的虛擬服務(wù)器。整個服務(wù)器集群的結(jié)構(gòu)對客戶是透明的,而且無需修改客戶端和服務(wù)器端的程序。

在我的系列文章中,《架構(gòu)設(shè)計:負(fù)載均衡層設(shè)計方案(4)——LVS原理》 、《架構(gòu)設(shè)計:負(fù)載均衡層設(shè)計方案(5)——LVS單節(jié)點安裝》 、《負(fù)載均衡層設(shè)計方案(7)——LVS + Keepalived + Nginx安裝及配置》 都涉及到LVS的講解。

這里我們再總結(jié)一下LVS中的三種工作模式:

3-2-1、NAT模式

NAT方式是一種由LVS Master服務(wù)節(jié)點收到數(shù)據(jù)報,然后轉(zhuǎn)給下層的Real Server節(jié)點,當(dāng)Real Server處理完成后回發(fā)給LVS Master節(jié)點然后又由LVS Master節(jié)點轉(zhuǎn)發(fā)出去的工作方式。LVS的管理程序IPVSADMIN負(fù)責(zé)綁定轉(zhuǎn)發(fā)規(guī)則,并完成IP數(shù)據(jù)報文和TCP數(shù)據(jù)報文中屬性的重寫。

負(fù)載均衡技術(shù)的知識點有哪些

LVS-NAT模式的優(yōu)點在于:

配置管理簡單。LVS-NAT的工作方式是LVS三種工作模式中最容易理解、最容易配置、最容易管理的工作模式。

節(jié)省外網(wǎng)IP資源,一般機房分配給使用者的IP數(shù)量是有限的,特別是您購買的機架的數(shù)量不多時。LVS-NAT工作方式將您的系統(tǒng)架構(gòu)封裝在局域網(wǎng)中,只需要LVS有一個外網(wǎng)地址或外網(wǎng)地址映射就可以實現(xiàn)訪問了。

系統(tǒng)架構(gòu)相對封閉。在內(nèi)網(wǎng)環(huán)境下我們對防火墻的設(shè)置要求不會很高,也相對容易進行物理服務(wù)器的運維。您可以設(shè)置來源于外網(wǎng)的請求需要進行防火墻過濾,而對內(nèi)網(wǎng)請求開放訪問。

另外改寫后轉(zhuǎn)給Real Server的數(shù)據(jù)報文,Real Server并不會關(guān)心它的真實性,只要TCP校驗和IP校驗都能通過,Real Server就可以進行處理。所以LVS-NAT工作模式下Real Server可以是任何操作系統(tǒng),只要它支持TCP/IP協(xié)議即可。

3-2-2、DR模式

LVS的DR工作模式,是目前生產(chǎn)環(huán)境中最常用的一種工作模式,網(wǎng)上的資料也是最多的,有的文章對DR工作模式的講解還是比較透徹的:

負(fù)載均衡技術(shù)的知識點有哪些

LVS-DR模式的優(yōu)點在于:

解決了LVS-NAT工作模式中的轉(zhuǎn)發(fā)瓶頸問題,能夠支撐規(guī)模更大的負(fù)載均衡場景。

比較耗費網(wǎng)外IP資源,機房的外網(wǎng)IP資源都是有限的,如果在正式生產(chǎn)環(huán)境中確實存在這個問題,可以采用LVS-NAT和LVS-DR混合使用的方式來緩解。

LVS-DR當(dāng)然也有缺點:

配置工作較LVS-NAT方式稍微麻煩一點,您至少需要了解LVS-DR模式的基本工作方式才能更好的指導(dǎo)自己進行LVS-DR模式的配置和運行過程中問題的解決。

由于LVS-DR模式的報文改寫規(guī)則,導(dǎo)致LVS節(jié)點和Real Server節(jié)點必須在一個網(wǎng)段,因為二層交換是沒法跨子網(wǎng)的。但是這個問題針對大多數(shù)系統(tǒng)架構(gòu)方案來說,實際上并沒有本質(zhì)限制。

3-2-3、TUN模式

LVS-DR模式和LVS-TUN模式的工作原理完全不一樣,工作場景完全不一樣。DR基于數(shù)據(jù)報文重寫,TUN模式基于IP隧道,后者是對數(shù)據(jù)報文的重新封裝:

負(fù)載均衡技術(shù)的知識點有哪些

IPIP隧道。將一個完整的IP報文封裝成另一個新的IP報文的數(shù)據(jù)部分,并通過路由器傳送到指定的地點。在這個過程中路由器并不在意被封裝的原始協(xié)議的內(nèi)容。到達目的地點后,由目的地方依靠自己的計算能力和對IPIP隧道協(xié)議的支持,打開封裝協(xié)議,取得原始協(xié)議:

負(fù)載均衡技術(shù)的知識點有哪些

可以說LVS-TUN方式基本上具有LVS-DR的優(yōu)點。在此基礎(chǔ)上又支持跨子網(wǎng)間穿透。

3-3、CDN技術(shù)

CDN技術(shù)Content Delivery Network:內(nèi)容分發(fā)網(wǎng)絡(luò)。為什么有時我們訪問互聯(lián)網(wǎng)上的視頻資源、圖片資源會比較慢,甚至訪問失敗。其中有一個重要的原因,是資源的物理位置離客戶端太遠了,可能其中有4層NAT設(shè)備(相當(dāng)于使用網(wǎng)通的線路訪問電信服務(wù)器上的資源)。

我們試想一下,如果將我們要訪問的資源放到離我們客戶端最近的一個服務(wù)上(例如在廣州的客戶端訪問的資源就在廣州的機房)。那么是不是就解決了這個問題(這個點稱為“邊緣節(jié)點”)。這就是CDN網(wǎng)絡(luò)解決的問題,如下圖所示:

負(fù)載均衡技術(shù)的知識點有哪些

目前CDN服務(wù)不需要我們進行開發(fā),市面上有很多公司都提供免費的/付費的 CDN服務(wù)(請直接在google或者百度上面輸入:CDN,就會有很多“推廣”信息了,在我的博文中不打廣告^_^)。當(dāng)然如果您想自行搭建CDN網(wǎng)絡(luò),可以參考以下技術(shù)方案:

Squid:Squid是一個緩存internet數(shù)據(jù)的一個軟件,它接收用戶的下載申請,并自動處理所下載的數(shù)據(jù)。目前,國內(nèi)很多CDN服務(wù)商的網(wǎng)絡(luò)都是基于Squid搭建的

利用Nginx的proxy_cache搭建:Nginx中的rewrite技術(shù)實際上就可以實現(xiàn)URL請求重寫,實現(xiàn)請求轉(zhuǎn)發(fā)。而Nginx中的proxy_cache組件可以使得從遠端請求的源數(shù)據(jù)保存在本地,從而實現(xiàn)一個CDN網(wǎng)絡(luò)的搭建。

自己寫:CDN網(wǎng)絡(luò)沒有特別復(fù)雜的技術(shù)門檻,如果您有特別的需求,可以自己寫一個。當(dāng)然上圖中所介紹的CDN網(wǎng)絡(luò)屬于第一代CDN網(wǎng)絡(luò),將第二代/第三代P2P技術(shù)加入到CDN原理中,可以形成第二代CDN網(wǎng)絡(luò):如下圖所示:

負(fù)載均衡技術(shù)的知識點有哪些

第三代P2P技術(shù)又被稱為混合型P2P技術(shù)主要是為了解決元數(shù)據(jù)服務(wù)器的處理壓力,加速資源的本地化速度。關(guān)于P2P技術(shù)我會在講完“業(yè)務(wù)系統(tǒng)設(shè)計”、“業(yè)務(wù)通信系統(tǒng)設(shè)計”后,專門做一個新的專題進行介紹。另外提一下,YouTube的P2P網(wǎng)絡(luò)就是自己做的。

3、負(fù)載均衡層技術(shù)匯總

3-4、Keepalived技術(shù)

在這些文章中從來沒有單獨介紹Keepalived。這是因Keepalived是為了監(jiān)控集群節(jié)點的工作狀態(tài),在因為某種原因不能正常提供服務(wù)的前提下,完成備機的切換。這里面有兩個關(guān)鍵點:監(jiān)控節(jié)點上提供的服務(wù)、完成網(wǎng)絡(luò)切換。keepalived本身是不提供業(yè)務(wù)服務(wù)的,只是監(jiān)控提供的服務(wù)是否正常工作,那么既然都沒有可以監(jiān)控的服務(wù),那么Keepalived有什么獨立使用的必要呢?

下圖是Nginx + Keepalived的工作結(jié)構(gòu)和LVS + Keepalived 的工作結(jié)構(gòu):

負(fù)載均衡技術(shù)的知識點有哪些

Nginx + Keepalived的工作方式

負(fù)載均衡技術(shù)的知識點有哪些

LVS + Keepalived + Nginx的工作方式

相關(guān)技術(shù)還有:

Heartbeat是Linux-HA計劃中的一個重要項目,它的功能比Keepalived更強大,安裝和管理也相對復(fù)雜。網(wǎng)絡(luò)上有很多資料介紹Heartbeat和Keepalived的優(yōu)缺點和使用對比。但就我自己的使用經(jīng)驗來說,個人更喜歡使用Keepalived,原因很簡單:Keepalived安裝和配置更簡單,而且夠用。另外Redhat Rhcs套件也可以搭建類似的HA集群,但是說實話本人沒有嘗試過。

3-5、DNS輪詢和智能DNS

//TODO DNS技術(shù)還沒有介紹

3-6、硬件負(fù)載

在這個系列的“負(fù)載均衡層設(shè)計方案”博文中,我們所提到的諸如Nginx、LVS等技術(shù),沒有詳細(xì)講述的Haproxy、Squid等技術(shù),都是基于軟件的負(fù)載技術(shù)。F5是一家公司,它的BIG-IP LTM技術(shù)是基于硬件負(fù)載的。硬件負(fù)載方案提供了軟件負(fù)載技術(shù)無法提供了性能空間,并且集成了NAT映射功能、SSL加速、Cookie加密、高速緩存、攻擊過濾、包過濾、動態(tài)Session保持等等很多軟件負(fù)載無法提供的功能(或者需要多個軟件組合使用才能提供的功能)。

但是硬件負(fù)載方案也有其缺點,主要就是建設(shè)費用比較高昂,它不像軟負(fù)載可以根據(jù)系統(tǒng)的吞吐量的持續(xù)增加進行持續(xù)擴展。當(dāng)然您可以根據(jù)系統(tǒng)的吞吐量需求,在前期采用軟負(fù)載,后期采用硬件負(fù)載的方案。除了F5公司提供的硬件負(fù)載技術(shù),還有Citrix公司的硬負(fù)載方案、A10公司的硬件負(fù)載方案。

負(fù)載均衡技術(shù)的知識點有哪些

4、常見負(fù)載均衡技術(shù)組合

這里我們在重新回顧一下這個系列博文中,提到的目前常用的負(fù)載均衡技術(shù)的組合方式。

4-1、獨立的Nginx/Haproxy

負(fù)載均衡技術(shù)的知識點有哪些

一般的WEB系統(tǒng),前段假設(shè)一個Nginx或者Haproxy服務(wù)器,基本上可以解決包括負(fù)載分發(fā)在內(nèi)的很多問題了。

4-2、Nginx + Keepalived 或 Haproxy + Keepalived 或 + Heartbeat

負(fù)載均衡技術(shù)的知識點有哪些

為了保證Nginx或者HaProxy服務(wù)器的穩(wěn)定性,可以使用Keepalived或者Heartbeat做一個簡單的熱備方案。

4-3、LVS + (Keepalived | Heartbeat) + (Nginx | Haproxy)

負(fù)載均衡技術(shù)的知識點有哪些

隨著訪問壓力的增大,我們開始采用多層負(fù)載方案,在Nginx或者Haproxy的前段架設(shè)LVS服務(wù),并通過Keepalived或者Heartbeat保證Keepalived的持續(xù)工作。

4-4、加如DNS輪詢技術(shù)或者智能DNS路由技術(shù)

負(fù)載均衡技術(shù)的知識點有哪些

技術(shù)方案擴展到這一步,日千萬級PV是完全可以支撐了。前提條件是:程序沒有問題^_^。

如果您站點的流量還要大甚至高出幾個數(shù)量級,那么恭喜您,您肯定是全球排名前100位互聯(lián)網(wǎng)公司工作;但是從另一個角度來說,您遇到的問題可能只能根據(jù)貴公司的業(yè)務(wù)特點,自己尋求解決方案了。這樣的例子有很多,例如YouTube發(fā)現(xiàn)市面上的商用CDN網(wǎng)絡(luò)無法滿足他們對視頻加速的需求,于是YouTube的工程師們自己動手寫了一專門針對自己業(yè)務(wù)的CDN加速技術(shù);再例如,淘寶發(fā)現(xiàn)市面上已經(jīng)沒有一款分布式文件系統(tǒng)能夠滿足他們對小文件存儲的需求,于是動手寫了一個TFS。

5、負(fù)載均衡技術(shù)的其他運用

在這個系列的文章中,我們?nèi)趯⒂糜诳蛻舳耸褂肏TTP協(xié)議請求服務(wù)器端進行處理的情況,這里的客戶端可以使最終用戶,也可以是某個一第三方系統(tǒng)。但實際上負(fù)載均衡技術(shù)在信息處理領(lǐng)域內(nèi),不是只有這樣的請求響應(yīng)層才使用,在其它的技術(shù)領(lǐng)域也大量使用,這個小節(jié),我們就來梳理這些技術(shù),作為一個擴展話題。

5-1、關(guān)系型數(shù)據(jù)庫系統(tǒng)的負(fù)載均衡

一說到關(guān)系型數(shù)據(jù)庫,大家自然會聯(lián)想到Oracle、MS SQL、DB2 和Mysql。在移動互聯(lián)網(wǎng)領(lǐng)域,通常很多公司在走去OEI的路程。這里我們不去討論去OEI是否是正確的,也不去討論怎樣走去OEI這條路才合理,一個不可爭辯的事實是,目前很多移動互聯(lián)網(wǎng)公司在使用Mysql數(shù)據(jù)庫。

單臺Mysql數(shù)據(jù)庫的處理能力確實趕不上Oracle,甚至趕不上MS SQL這些商用數(shù)據(jù)庫,但是我們可以為Mysql做集群來提高整個數(shù)據(jù)服務(wù)的性能。Mysql從5.1.X版本開始,就已經(jīng)支持單數(shù)據(jù)節(jié)點的“表分區(qū)”功能了,但這個支持僅限于每個節(jié)點的配置,提高單個Mysql上的讀寫性能(還要配合底層的塊存儲選型,例如DAS)。而想要實現(xiàn)整個Mysql集群性能,就需要從更高級別實現(xiàn)讀寫分離了。

其中有一種成熟的Mysql集群讀寫分離的做法,是一臺寫節(jié)點做成Master節(jié)點(Master節(jié)點單機性能可以做得較高,后端可以使用DAS系統(tǒng));然后多臺讀節(jié)點做成Salve節(jié)點,并接受來源于Master節(jié)點的同步日志(MySQL Replication技術(shù)),并通過另一個LVS進行讀請求的負(fù)載,而且可以再配合單個節(jié)點上的“表分區(qū)”功能。這個做法在80%以上都是讀請求的任何系統(tǒng)上,都可以大大增強數(shù)據(jù)庫系統(tǒng)的整體性能,如下圖所示:

負(fù)載均衡技術(shù)的知識點有哪些

從上圖可以看到,來源于程序的“寫”操作通過一個數(shù)據(jù)源提交給了Mysql Master,而所有的讀操作則通過LVS-DR模式分發(fā)給3個Mysql Salve。這里要說明幾個問題:

Mysql Master和Mysql Salve的數(shù)據(jù)同步是通過MySQL Replication同步技術(shù)來實現(xiàn)的,這是一種基于操作日志的異步同步,雖然響應(yīng)時間不能達到“毫秒”級,但是基本上還是很快很快的。如果不是銀行系統(tǒng)、或者“秒殺系統(tǒng)”基本上可以滿足事實性

MySQL Replication會降低Mysql Master節(jié)點的20%的工作性能,但是轉(zhuǎn)移了原來Mysql Master負(fù)責(zé)的所有讀操作。當(dāng)然,我們以后介紹“多主”方式和使用HiveDB橫向切分的時候,還會重點介紹如何提高Mysql的寫性能。

事實上正式的開發(fā)架構(gòu)中,我們不會給程序員兩個數(shù)據(jù)源,這樣既不利于代碼的管理,也增加了開發(fā)難度。我們會采用類似Mysql-Proxy、Amoeba之類的軟件實現(xiàn)數(shù)據(jù)源的整個。

后面在介紹數(shù)據(jù)存儲層架構(gòu)的時候,我還會介紹多種成熟的可靠的Mysql集群、Mysql讀寫分離、Mysql橫向擴展方式,和讀者討論如何實現(xiàn)幾十臺Mysql節(jié)點的運行和管理。

5-2、分布式存儲系統(tǒng)的負(fù)載均衡

分布式存儲系統(tǒng)目前有很多,Ceph、Swift、MFS、HDFS。他們有的是基于對象存儲的,有的是基于快存儲的(在《標(biāo)準(zhǔn)Web系統(tǒng)的架構(gòu)分層》這篇博文中,我對塊存儲、文件存儲和對象存儲做了較詳細(xì)的介紹,后文我們還將詳細(xì)介紹存儲系統(tǒng))。但是他們有一個或者多個主控節(jié)點(有的叫namenode、有的叫master、有的叫Metadata),無論怎么叫,他們都有一些相同的功能:

計算“數(shù)據(jù)該存儲在哪里”的問題

協(xié)調(diào)控制“數(shù)據(jù)是否正確存儲”的問題

監(jiān)控“數(shù)據(jù)節(jié)點”的健康狀態(tài)

轉(zhuǎn)移數(shù)據(jù)

回答客戶端“到哪里取數(shù)據(jù)”的問題

。。。。。

在處理問題的過程中,這些控制節(jié)點實際上起到的就是負(fù)載分發(fā)的作用,他們的基本原理都是通過“一致性hash算法”,對“數(shù)據(jù)該存儲在”哪里的問題進行分析(用來做hash的屬性依據(jù)不同而已):

負(fù)載均衡技術(shù)的知識點有哪些

5-3、更廣義的負(fù)載均衡系統(tǒng)

相同的客流量下,銀行多個窗口排隊的等待時間肯定比一個窗口排隊的時間短;同樣的車流量,8車道肯定比6車道的通過率高;把一個任務(wù)拆分成多個任務(wù)由多個人負(fù)責(zé)處理其中的一部分,肯定比一個人做一個大任務(wù)的時間短;

負(fù)載均衡的核心思想在于分流、關(guān)鍵問題在于如何分流、評價標(biāo)準(zhǔn)在于分流后的吞吐量。

關(guān)于“負(fù)載均衡技術(shù)的知識點有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

當(dāng)前題目:負(fù)載均衡技術(shù)的知識點有哪些-創(chuàng)新互聯(lián)
本文地址:http://bm7419.com/article26/cdijjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、營銷型網(wǎng)站建設(shè)、域名注冊、移動網(wǎng)站建設(shè)網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化