負載均衡是一個大型網站發展必須解決的問題,目前公司的網站就面臨這樣的問題。在國內,已經有 新浪博客、新浪播客、網易新聞、六間房、56.com、Discuz!、水木社區、豆瓣、YUPOO、海內、迅雷在線 等多家網站使用 Nginx 作為Web服務器或反向代理服務器。下面兩張圖介紹了實現的大概思路,分為硬實現和軟實現。
方法一、NetScaler負載均衡交換機動靜分離系統架構圖(硬實現)
方法二、Nginx反向代理負載均衡器動靜分離系統架構圖(軟實現)
背景
假設您已經決定在設計或修改基礎結構層時使用群集,以便在能夠適應不斷變化的要求的同時保持良好的性能。
問題
在保持可接受的性能級別的同時,如何設計一個可適應負載變化的、可伸縮的基礎結構層?
影響因素
在設計可伸縮的基礎結構層時,請考慮下列影響因素:
•對于任何指定的應用程序來說,單獨的服務器會受到最大負載容量的限制。例如,如果單臺服務器將 Web 頁作為基于 Web 的應用程序的一部分提供給用戶,而且用戶或事務負載增加并超過了服務器的限制,則應用程序性能將降至預期值以下,在最壞的情況下還會變得不可用。
•單獨的服務器具有最大物理性能限制,包括總線速度、內存量、處理器數和任一服務器可以使用的外圍設備數等限制。例如,如果服務器只能容納四個處理器,則不能為了提高性能而添加第五個處理器。
•某些應用程序對于可以使用的 CPU 數有限制。
•服務器作為單獨的實體,在解決方案中是故障單點。如果只有一臺服務器負責在應用程序內傳遞組件的功能,則它的故障會導致應用程序運行失敗。
•添加服務器會增加管理和監視服務器硬件及其關聯軟件的復雜性。
解決方案
將服務或應用程序 安裝到多臺服務器上,并將這些服務器配置為共享工作負荷。這種類型的配置就是 Load-Balanced Cluster。負載平衡通過將客戶端請求分散在多臺服務器上,從而提高了基于服務器的程序(如 Web 服務器)的性能。負載平衡技術(通常稱為"負載平衡器")可以接收傳入請求,并根據需要將它們重定向到特定主機。有負載平衡功能的主機能夠同時響應不同客 戶端請求,甚至是來自同一客戶端的多個請求。例如,Web 瀏覽器有可能從群集中的不同主機獲得單個 Web 頁所包含的多個圖像。這就分散了負載,加快了處理速度,并縮短了對客戶端的響應時間。
負載平衡器使用不同的算法控制通信流量。這些算法用于以智能方式分散負載,并/或最大限度地利用群集內的所有服務器。這些算法中的一部分示例包括:
•循環法。循環算法將負載均衡地分配給每臺服務器,而不考慮當前的連接數或響應時間。循環法適合于群集中的服務器具有相同處理能力的情況;否則,一些服務器收到的請求可能會超過它們的處理能力,而其他服務器的處理能力則有富余。
•加權循環法。加權循環算法適合于每臺服務器具有不同處理能力的情況。管理員將性能權值手動分配給每臺服務器,而且按照服務器權值自動生成調度序列。然后,系統按照循環調度序列將請求定向到不同的服務器。
•最少連接。最少連接算法根據群集中哪臺服務器當前正在處理的連接數最少,從而將請求發送給該服務器。
•基于負載?;谪撦d算法先判斷群集中哪臺服務器當前的負載最低,然后將請求發送給該服務器。
此外,一些負載平衡器還具有故障檢測功能。平衡器可以跟蹤服務器或在服務器上運行的應用程序,并在出現服務器故障后停止向該服務器發送請求。圖 1 顯示負載平衡的基本組件。
圖 1:負載平衡組件
當負載平衡器收到來自客戶端的請求時,群集組中的一臺服務器將處理該請求。每臺服務器都能夠獨立地處理請求。如果任 何服務器因出現錯誤或正在維護而不可用,其他服務器仍然可以為請求提供服務而不會受到影響。因此,服務的總體可用性比由單臺服務器處理所有請求的方案要高 得多。但是,如果在一組軟件負載平衡服務器前面使用單個物理負載平衡器或單個網絡交換機,將會引入另一個故障單點??梢允褂萌哂嘭撦d平衡設備和/或交換機 來減少這類風險。
原文轉自:http://blog.sina.com.cn/s/blog_c34954a30101tkhl.html