日韩精品无码一区AAA片,无码视频一区二区三区,韩国三级高潮爽,日本妞XXXXXXXXX68

干貨分享 | 分布式系統(tǒng)的負載均衡

2019-08-08

1  了解負載均衡

      記得第一次接觸Nginx是在實驗室,那時候在服務器部署網站需要用Nginx。Nginx是一個服務組件,用來反向代理、負載平衡和HTTP緩存等。那么這里的負載均衡是什么?

      負載均衡簡稱LBLoad Balance),確切的說是一種技術解決方案,用于在多個資源(泛指服務器)中分配負載,達到最優(yōu)化資源使用,避免設備過載。

      資源等于每個服務實例的執(zhí)行操作單元,負載均衡就是將大量的數據處理操作分攤到多個操作單元進行執(zhí)行,用來解決互聯網分布式系統(tǒng)的大流量、高并發(fā)和高可用的問題。

那么,什么是高可用呢?

2  高可用的含義

      首先讓我們了解一下什么是高可用?

      高可用是CAP定理是分布式系統(tǒng)的基礎,也是分布式系統(tǒng)的3個指標:

High Availability-高可用是什么?

      高可用簡稱HA,是系統(tǒng)一種特征或者指標,通常是指提供一定性能上的服務運行時間,高于平均正常時間段。反之,消除系統(tǒng)服務不可用的時間。

      衡量系統(tǒng)是否滿足高可用,就是當一臺或者多臺服務器宕機的時候,系統(tǒng)整體和服務依然正常可用。


      比如下單服務,可以使用帶有負載均衡的多個下單服務實例,代替單一的下單服務實例,即使用冗余的方式來提高可靠性。

      總而言之,負載均衡(Load Balance)是分布式系統(tǒng)架構設計中必須考慮的因素之一。一般通過負載均衡,冗余同一個服務實例的方式,解決分布式系統(tǒng)的大流量、高并發(fā)和高可用的問題。負載均衡核心關鍵:在于是否分配均勻。


3 兩個負載均衡案例分享

案例1


      微服務架構中,網關路由到具體的服務實例hello


案例2


      微服務架構中,A服務調用B服務的集群。通過了Ribbon客戶端負載均衡組件:

 ● 負載均衡策略算法并不高級,最簡單的是隨機選擇和輪循。

4互聯網分布式系統(tǒng)解決方案


      常見的幾個互聯網分布式系統(tǒng)架構分層如下:


      一個請求從第1層到第4層,層層訪問都需要負載均衡。即每個上游調用下游多個業(yè)務方的時候,需要均勻調用。這樣整體系統(tǒng)來看,就比較負載均衡。

第 一 層

客戶端層 -> 反向代理層的負載均衡

      客戶端層 -> 反向代理層的負載均衡如何實現呢?

      答案是:DNS的輪詢。DNS可以通過AAddress,返回域名指向的IP地址)設置多個IP地址。比如這里訪問bysocket.comDNS配置了ip1ip2。為了反向代理層的高可用,至少會有兩條A記錄。這樣冗余的兩個ip對應的nginx服務實例,防止單點故障。

      每次請求bysocket.com域名的時候,通過DNS輪詢,返回對應的ip地址,每個ip對應的反向代理層的服務實例,也就是nginx的外網ip。這樣可以做到每一個反向代理層實例得到的請求分配是均衡的。


第 二 層

反向代理層 -> Web層的負載均衡

      反向代理層 -> Web層的負載均衡如何實現呢?

      是通過反向代理層的負載均衡模塊處理。比如nginx有多種均衡方法:

1請求輪詢

      請求按時間順序,逐一分配到web層服務,然后周而復始。如果web層服務down掉,自動剔除。



2ip 哈希

      按照ip的哈希值,確定路由到對應的web層。只要是用戶的ip是均勻的,那么請求到Web層也是均勻的。
還有個好處就是同一個ip的請求會分發(fā)到相同的web層服務。這樣每個用戶固定訪問一個web層服務,可以解決session的問題。


3weight權重、fair、url_hash


第 三 層

Web -> 業(yè)務服務層的負載均衡

      Web 層 -> 業(yè)務服務層的負載均衡如何實現呢?

      比如Dubbo是一個服務治理方案,包括服務注冊、服務降級、訪問控制、動態(tài)配置路由規(guī)則、權重調節(jié)、負載均衡。其中一個特性就是智能負載均衡:內置多種負載均衡策略,智能感知下游節(jié)點健康狀況,顯著減少調用延遲,提高系統(tǒng)吞吐量。

      為了避免單點故障和支持服務的橫向擴容,一個服務通常會部署多個實例,即Dubbo集群部署。會將多個服務實例成為一個服務提供方,然后根據配置的隨機負載均衡策略,在20Provider中隨機選擇了一個來調用,假設隨機到了第7ProviderLoadBalance組件從提供者地址列表中,使用均衡策略,選擇選一個提供者進行調用,如果調用失敗,再選另一臺調用。


Dubbo內置了4種負載均衡策略:

 ● RandomLoadBalance:隨機負載均衡。隨機的選擇一個。是Dubbo的默認負載均衡策略。

 ● RoundRobinLoadBalance:輪詢負載均衡。輪詢選擇一個。

 ● LeastActiveLoadBalance:最少活躍調用數,相同活躍數的隨機?;钴S數指調用前后計數差。使慢的Provider收到更少請求,因為越慢的Provider的調用前后計數差會越大。

 ● ConsistentHashLoadBalance:一致性哈希負載均衡。相同參數的請求總是落在同一臺機器上。

同樣,因為業(yè)務的需要,也可以實現自己的負載均衡策略。


第 四 層

業(yè)務服務層 -> 數據存儲層的負載均衡

      數據存儲層的負載均衡,一般通過DBProxy實現。比如MySQL分庫分表。

      當單庫或者單表訪問太大,數據量太大的情況下,需要進行垂直拆分和水平拆分兩個維度。比如水平切分規(guī)則:


      但伴隨著這塊的負載會出現下面的問題,需要解決:


      現狀分庫分表的產品方案很多,包括阿里的Cobar、當當sharding-jdbc等都是。

5小結

      對外看來,負載均衡是一個系統(tǒng)或軟件的整體。對內看來,層層上下游調用。只要存在調用,就需要考慮負載均衡這個因素。所以負載均衡(Load Balance)是分布式系統(tǒng)架構設計中必須考慮的因素之一??紤]主要是如何讓下游接收到的請求是均勻分布的:



文章來源于泥瓦匠:https://mp.weixin.qq.com/s/AdCtiXBLTJrWfcNV9LO2wA