日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

负载均衡(转)

發(fā)布時間:2023/12/31 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 负载均衡(转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

概述

  在分布式系統(tǒng)中,負載均衡(Load Balancing)是一種將任務分派到多個服務端進程的方法。例如,將一個HTTP請求派發(fā)到實際的Web服務器中執(zhí)行的過程就涉及負載均衡的實現(xiàn)。一個HTTP請求到達Web服務器,這中間涉及多個過程,也存在多種不同負載均衡的方法。本文講述負載均衡的基本原理與派發(fā)策略,下圖1是負載均衡的基本原理圖,圖1中客戶端的請求請求經過達負載均衡器(Load Balancer)的分派,被指定的服務器進程進行處理。

圖1:負載均衡基本原理

?

  實現(xiàn)負載均衡主要有兩個目的。第一個目的是將任務的處理負載均攤到不同的進程,以減少單一進程的負載,以達到處理能力水平擴容的目的。第二個目的則是提高容錯能力。我們知道,在線上正式環(huán)境中,機器宕機或者進程異常導致服務不可用是常有的現(xiàn)象。在實現(xiàn)負載均衡的系統(tǒng)中,多個服務器進程提供同樣的服務,一個進程不可用的情況下,任務會被負載均衡器派發(fā)到其他可用的進程,以達到高可用的目的。在多臺不同的服務器中部署相同的服務進程,通過負載均衡對外提供服務,這組進程也稱為“集群”(cluster)。

?

?

負載均衡實現(xiàn)策略

常見的負載均衡實現(xiàn)策略有以下幾種:?
- 均勻派發(fā)(Even Task Distribution Scheme)?
- 加權派發(fā)(Weighted Task Distribution Scheme)?
- 粘滯會話(Sticky Session Scheme)?
- 均勻任務隊列派發(fā)(Even Size Task Queue Distribution Scheme)?
- 單一隊列(Autonomous Queue Scheme)

?

均勻派發(fā)(Even Task Distribution Scheme)

均勻派發(fā)是實現(xiàn)負載均衡最簡單的策略,均衡派發(fā)的意思是指任務將均勻地派發(fā)到所有的服務器進程。在實現(xiàn)時,可以使用隨機派發(fā)或者輪流派發(fā)(Round Robin)。

圖2:均勻派發(fā)策略

均勻派發(fā)策略假設集群內所有進程具有相同的處理能力,且任務處理用時相同。但實際上,由于進程部署環(huán)境的不同,其處理能力一般不同,任務處理時間也不盡相同。因此均勻派發(fā)的策略并不能很好地將任務負載均灘到各個進程中。

DNS負載均衡

我們知道,DNS提供域名解析服務,當我們訪問某個站點時,實際上首先需要通過該站點域名的DNS服務器來獲取指向該域名的IP地址,在這過程中,DNS服務器完成了域名到IP地址的映射。由于這一映射可以是一對多的關系,因此DNS服務器可以充當負載均衡器的作用,DNS服務器在派發(fā)IP地址時,正是使用輪流派發(fā)的方式來實現(xiàn)的。

?

?

加權派發(fā)(Weighted Task Distribution Scheme)

加權派發(fā)策略在派發(fā)任務時,會賦予服務器進程一個權值,即不同的進程會接受不同數量的任務,具體數量為權值確定。

?

圖3:加權派發(fā)策略?

?

例如,三個進程的處理任務的能力比率為3:3:2,那么可以賦予這三個進程3:3:2的權值,即每8個任務中,3個發(fā)派給第一個進程,3個發(fā)派給第二個進程,2個分派給第三個進程。?
加權派發(fā)策略考慮了進程處理能力的不同,因此更接近實際的應用。可是,加權派發(fā)策略也沒有考慮任務處理的要求。

?

粘滯會話(Sticky Session Scheme)

前面兩種負載均衡策略并沒有考慮任務之間的依賴關系,在實際中,后面的任務處理常常會依賴于前面的任務。例如,對于同一個登錄的用戶的請求,用戶購買的請求依賴于用戶登錄的請求,如果用戶的登錄信息保存在進程1中,那么,如果購買請求被分派到進程2或者進程3,那么購買請求將不能正確處理。這種請求間的依賴關系也稱為粘滯會話(Sticky Session),負載均衡策略需要考慮粘滯會話的情況。

圖4:粘滯會話策略

粘滯會話的派發(fā)策略要求屬于同一個會話的任務將會被分派到同一個進程中。雖然這可以正確處理任務,但是卻帶來任務派發(fā)不均勻的問題,因為一些會話可能包含更多的任務,一些會話包含更少的任務。?
粘滯會話的另一種處理策略是使用數據庫或者緩存,將所有會話數據存儲到數據庫或者緩存中。集群內所有進程都可以通過訪問數據庫或者緩存來獲取會話數據,進程內存都不保存會話數據,這樣,負載均衡器便可以使用前面介紹的策略來派發(fā)任務。

?

均勻任務隊列派發(fā)(Even Size Task Queue Distribution Scheme)

均勻任務隊列派發(fā)策略跟加權派發(fā)策略類似,都考慮了進程的處理能力,不過其實現(xiàn)方式不同。在均勻隊列派發(fā)策略下,負載均衡器為每個進程都創(chuàng)建一個大小相等的任務隊列,這些任務隊列包含了對應進程需要處理的任務。任務處理快的進程,其隊列也會減少得快,這樣負載均衡器會派發(fā)更多的任務給這個進程;相應地,任務處理慢的進程,其隊列也會減少得慢,這樣負載均衡器會派發(fā)更少的任務給這個進程。因此,通過這些任務隊列,負載均衡器在派發(fā)任務時將進程處理任務的能力因素考慮了進去。

?

圖5:均勻任務隊列派發(fā)策略

?

單一隊列(Autonomous Queue Scheme)

與上面的均勻隊列策略一樣,單一隊列策略也使用了隊列來實現(xiàn)負載均衡。不同的是,單一隊列策略只使用了一個隊列。圖6是單一隊列策略的原理圖。

圖6:單一隊列策略

?

單一隊列策略中,實際上并沒有負載均衡器的存在。所有的服務器進程從隊列中取出任務執(zhí)行,如果某個進程出現(xiàn)宕機的情況,那么其他進程仍然可以繼續(xù)執(zhí)行任務。這樣一來,任務隊列并不需要知道服務進程的情況,只需要服務進程知道自己的任務隊列,并不斷執(zhí)行任務即可。?
單一隊列策略實際上也考慮到進程的處理能力,進程處理任務得越快,其從隊列取出任務的速度也越快。

?

總結

由于負載均衡為系統(tǒng)提供了水平擴展的能力以及提高了系統(tǒng)的高可用性,因此,負載均衡在分布式系統(tǒng)中的作用可謂十分重要。在實際使用中,我們可以充分利用一些已有的負載均衡硬件或者軟件為我們實現(xiàn)負載均衡。硬件方面有F5,A10,軟件方面有Nginx,HAProxy,LVS等。即使是自己實現(xiàn),也可以考慮現(xiàn)有的開源軟件,比如任務隊列可以使用RabbitMQ,等。與其重復造輪子,不如先站在巨人的肩膀上:)

?

參考資料

  • http://tutorials.jenkov.com/software-architecture/load-balancing.html
  • http://www.oschina.net/news/77156/load-balance
  • http://nginx.org/en/docs/http/load_balancing.html
  • 構建高性能Web站點,第十二章,郭欣著,2012年6月,第二版
  • 總結

    以上是生活随笔為你收集整理的负载均衡(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。