Windows平台分布式架構實踐:負載平衡

來源:互聯網
上載者:User

概述

最近.NET的世界開始鬧騰了,微軟官方終於加入到了對.NET跨平台的支援,並且在不久的將來,我們在VS裡面寫的代碼可能就可以通過Mono直接在Linux和Mac上運行。那麼大家(開發人員和企業)為什麼那麼的迫切的希望.NET跨平台呢?第一個理由是便宜,淘寶號稱4萬多台伺服器全部運行在Linux,Linux平台下還有免費的MySql,這些都是免費的,這些省下來直接就是利潤呀,做企業的成本可以降低又沒有任何損失,何樂而不為呢?第二個理由是在Linux系統下還有很多非常優秀的構架(當然同樣也是免費的),分布式緩衝Memcached, 大資料處理構架Hadoop等等,這些都為一些大型的分布式系統提供了很好的支撐,當然還有諸如Liniux系統本身的一些安全和網路方面的優勢,等等。 所以也難怪大佬們都紛紛不約而同的沒有選擇.NET。

但是如果.NET也支援跨平台之後,那這樣的格局可能就要發生變化了。上面所有的優勢依然可以保留,並且加上它文法的優越性,以及快速的開發效率等,還是會為其爭得一席之地的。

但是,是不是Windows平台下就不能實現這些大型的分布式系統呢?我相信這個問題已經被廣泛討論過,但是至少我沒有看到比較清晰的,完整的案例。帶著這些問題,我決定升級我的機器,自己從頭到尾在windows平台下搭建一個高可擴充性的分布式網站出來。我經驗尚淺,很多的東西還處於摸索階段,所以如果有錯誤,還請大師多多指點。

什麼是負載平衡

負載平衡可以幫我們解決兩個方面的問題,第一個即提高可用性。這裡面的可用性主要是從WEB伺服器,的角度來講的,如果說我們只有一台Web伺服器,而它遇到了某種未知的錯誤導致IIS無法啟動,那麼我們的網站就無法訪問了,這就是一種比較低的可用性。那麼利用負載平衡,放在我們Web伺服器的前面,由它來收集所有的請求,然後轉寄給我們的Web伺服器, 這時候我們就可以添加兩台Web伺服器,如果其中有一台壞了,至少還有另一台在工作,也不至於導致我們的網路無法訪問。

當然,有人可能會問,如果那台Load balancer壞了怎麼辦?那不是還是訪問不了網站嗎?我們這裡討論的是提高可用性,在做到365天*24小時不間斷的服務,需要有另外的組件來支撐,我們留在後面討論。除了可用性以外,負載平衡還可以協助我們提高可擴充性,當然這個可擴充性同樣是指的Web伺服器層面。從網站效能的角度來講,好幾個程式員花上好幾天的時間做了一些最佳化所帶來的效果有時候可能還沒有直接加一根記憶體條來的快。記憶體加完了沒什麼影響,我們還可以換更好的CPU,CPU換完了,我們還可以用固態硬碟,甚至很多公司已經開始直接把資料放到記憶體中了(註:具體情境具體對待)。 如果這些都不可以再加了呢?那就再加機器吧,一台伺服器可以處理1000個並發,那麼兩台理論上是2000了,所以這就有了我們的橫向擴充。

負責均衡器分發請求的類型

所有的請求首先全部到達Load balancer,再由它轉寄到具體的Web伺服器,轉寄的方式分為以下幾種:

輪轉調度(Round-robin):最簡單的方式,這種方式基本上不能算是負載平衡。第一個請求給web1,下一個給web2,再下一個給web3... 不會考慮某 一個伺服器是不是負荷太重等等。

基於權重的分配(Weight-based): 可以配置每一台伺服器處理請求資料的比例,特別適合那種有某台伺服器配置不一樣的情境。比如說某台伺服器配置特別好,那我們可以讓它多處理一些請求。

隨機(Random): 隨機分配。

粘性session(Sticky Session): Load balancer會跟蹤請求,確保同一個session id的請求都交給同一樣伺服器。

最空閑優先(Least current request)將最新的請求轉寄給當前處理請求數量最小的那個伺服器。

響應時間優先(Response time):哪台伺服器當前回應時間最短就給哪台。

使用者或URL參數選擇(User or URL information)部分負載平衡器還提供根據一些參數來決定哪台伺服器來處理,比如說根據使用者資訊,地址位置,URL參數,cookie資訊等 。

我們還可以根據負載平衡器所使用的技術將它們分為以下幾類:

反向 Proxy:負載平衡器作為一個代理,同時維持著兩個TCP請求,從用戶端接收請求,然後將請求轉寄給相應的Web 服務器,等Web返回Response的時候是返回給了Proxy 伺服器,然後再由Proxy 伺服器轉交給真正的用戶端。這樣就會導致有一些功能不可用,比如在WEB伺服器環境查看請求的來源IP實際上成了我們Proxy 伺服器的IP等。

透明反向 Proxy:和上面的Proxy 伺服器一樣,只不過WEB伺服器從Request中擷取到的資訊是真正用戶端的資訊,就是好像沒有使用代理一樣的。

伺服器直接回傳:通過更改WEB伺服器的MAC 位址來實現分發請求,在這種方式下,WEB伺服器不會像上面使用Proxy 伺服器一樣,請求處理完之後是直接返回給用戶端的,所有相對於反向 Proxy來說這種方式的效能會更快一些。

NAT 負載平衡:NAT(Network Address Translation網路位址轉譯),將網路包(可以理解成TCP包)中的目標IP地址變成實現要處理這個請求的WEB伺服器的地址。

Microsoft 網路負載平衡:Windows 內建的負載平衡組件,一會我們就用它來做測試。

不使用負載平衡的測試結果

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.