網際網路架構設計漫談 3

2021-09-20 18:28:50 字數 3583 閱讀 1283

中小型網際網路公司在併發量不高的情況下可以選用軟體負載均衡作為**層,他們通常和更靠外的「接入層」的硬體負載均衡器合作,為使用者提供更好的服務。軟體負載均衡的特點是併發1-2w,基於作業系統,容易上手,費用較低。

要點什麼是軟體負載均衡?(了解)

有哪些流行的軟體負載均衡器?(了解)

網路負載均衡的發展與技術選型(熟悉)

軟體負載均衡的應用詳解(重點)

軟體負載均衡是指在一台或多台伺服器的作業系統上安裝乙個或多個軟體來實現負載均衡,它的優點是基於特定環境,配置簡單,使用靈活,成本低廉,可以滿足一般的負載均衡需求。

**層通常起到承上啟下的作用,上連「接入層」下接應用伺服器(上游伺服器),可以做反向**,快取,資料驗證,限流。本文會一一為各位介紹。

目前比較流行的有lvs,nginx 和 haproxy,逐個看看他們的特點。

lvs(linux virtual server) 是使用linux核心集群實現的乙個高效能、高可用的負載均衡伺服器,它具有很好的可伸縮性(scalability)、可靠性(reliability)和可管理性(manageability)。

lvs特點是:

haproxy實現了一種事件驅動,單一程序模型,此模型支援非常大的併發連線數。多程序或多執行緒模型受記憶體限制 、系統排程器限制以及無處不在的鎖限制,很少能處理數千併發連線。

haproxy特點是:

nginx是一款輕量級的web伺服器/反向**伺服器及電子郵件(imap/pop3)**伺服器,並在乙個bsd-like 協議下發行。

nginx特點是:

發展階段:企業業務從0到1,從無到有,資料量和訪問量都不大。nginx或haproxy進行單點的負載均衡就已經足夠了。這階段剛剛採用多台應用伺服器、資料庫,需要一定的負載均衡做支撐。由於業務量不大,所以沒有專業的維護團隊來維護,也沒有大規模的**部署的需求。因此nginx或haproxy是第一選擇,因為其上手快, 配置容易,在七層之上利用http協議就能滿足要求了。

擴張階段:隨著業務量增大,使用者訪問和交易量也在逐步增加。這時單點的nginx或haproxy已經無法滿足之前的需求了,使用lvs或者硬體負載均衡(f5/array)就是架構師需要考慮的問題了,nginx此時就作為lvs或者硬體負載均衡(f5/array)的節點來處理。軟體負載均衡+硬體負載均衡的架構配置在這個階段就需要考慮了,也是對架構設計者的挑戰。

成熟階段:隨著公司業務擴張到達頂峰,之前的網路服務已經公升級成主流服務產品,需要考慮在開源產品上進行業務定製,所以開源的lvs,已經成為首選。其在深度定製之後依舊會和硬體負載均衡器配合完成業務服務。

一提到負載均衡器,大家一定會想到反向**,其實還有其他的功能,特別是技術發展到今天資訊流轉的速度越來越快,資訊量以指數級的增長充滿整個網際網路。我們的技術架構也要隨之變化,緊跟發展的腳步。這裡以當下最流行的nginx 為例給大家講講,如何在網際網路架構設計中,把反向**,快取,驗證,限流這些功能應用起來,讓使用者的請求得到更快的反饋。

反向**與負載均衡

先看圖,了解一下客戶端請求是如何到達伺服器端的。

客戶端請求url給dns

dns將url轉化成對應的ip

通過ip找到伺服器

伺服器接受到請求的報文,轉交給接入層處理,接入層由於採用了硬體負載均衡器,所以能夠扛住大資料量

接入層把報文再次轉交給**層(併發在1-2w),**層的nignx收到報文再根據反向**的策略傳送給上游伺服器(應用伺服器)

負載均衡的演算法

以nignx 為例,介紹三個演算法。

動態負載均衡

一般上游伺服器都採用微服務的架構,那麼負載均衡會把資料報發給哪個服務呢?如果服務出現了問題如何通知負載均衡器呢?有新的服務註冊怎麼辦呢?

微服務首先會註冊到「服務註冊發現」中心,這裡的實現方式很多有consul,eureka,以後會為各位一一講解。

註冊中心有所有微服務的資訊,nignx 會定期從這裡拉取服務資訊。

獲取微服務資訊以後,nignx 收到資料報的時候就可以根據策略把這些資訊傳遞給對應的服務了。

限流

限流的工作可以在接入層用硬體負載均衡器來完成,也可以在**層來完成。限流的演算法也不少,有令牌桶演算法,漏桶演算法,連線數限制等等,這裡我們就介紹兩個在實際中的應用。一般實現可以通過nignx+lua 來實現,如果大家有興趣專門開篇給大家講解。

連線數限流:通過ngx_http_limit_conn_module 模組實現。設定最大的連線數以及共享記憶體的區域大小,請求的時候判斷是否超過了最大連線數,如果超過最大連線數就被限流,否則針對連線數就+1,請求結束以後會將連線數-1.

漏桶演算法:通過ngx_http_limit_req_module 模組實現。乙個固定容量的桶,資料報按照固定的速度流出。資料報可以按照任意的速度流入桶中,如果資料報的容量超過了桶的容量,再流入的資料報將會被丟棄。按照這個規則,需要設定限流的區域以及桶的容量,以及是否延遲。

快取

nignx 做快取可以利用nignx 本地快取機制,先看圖。

接入層傳送請求,如果能夠再nignx本地快取命中,直接返回快取資料,如果沒有命中回源到應用伺服器。快取更新伺服器定時更新nignx本地快取資訊。這些需要考慮資料的一致性,合適更新以及何時失效等情況。

還需要需求注意的是,哪些資料可以放在nignx本地快取的,一般是更新頻率不太高但是訪問頻率比較高的資料。例如:使用者基本資訊,以及一些靜態資訊。一般http head 中都帶有一些資訊更新的資訊。nignx 也可以通過epires,etag,if-modified-since 來實現瀏覽器快取的控制。

超時重試

其他

總結:**層中軟體負載均衡起到的作用,目前市面上有哪些常用的負載均衡器,他們的特點是什麼?作為用的比較多的nignx的功能有哪些,在負載均衡,反向**,限流,快取等方面的表現如何。

移動網際網路漫談(3)

wifi 是無線區域網的一種,全稱wireless fidelity 又稱802.11b 標準,它的最大優點就是傳輸速度較高,可以達到 11mbps 另外它的有效距離也很長,同時也與已有的各種 802.11 dsss 裝置相容。今夏最流行的 膝上型電腦 技術 迅馳技術就是基於該標準的。ieee 美國...

網際網路架構

網際網路架構,主要追求的是高可用,可擴充套件 這兩個特性 在這裡做了一些個人的總結,算是給2014年的工作做個總結。推陳出新 一定要做的,死守積累會逐漸丟失人才,但凡技術公司都會不斷更新技術 kiss原則 keep it stupid優秀的 都會很簡單,簡單理解,簡單更改,能把複雜的事情做簡單是一種...

網際網路架構

使用者在同一時間內大量的訪問伺服器,tomcat伺服器併發能力為 200 250左右 jvm調優為1000 硬體條件 物理伺服器處理能力 網路頻寬 2.1 分布式計算 由多個執行緒,共同來完成某項特定的任務,拆合問題 2.2 分布式系統 distributed system 是建立在網路之上的軟體系...