部署負載均衡器后應用系統調整
部署負載均衡器有利于擴展,但應用系統和服務器也需要做一些相應的調整。
區分靜態內容和動態內容
這可能聽起來好像非常普遍,但能做到的仍很少。在許多應用系統中,大約有25%的請求是動態內容,剩下的75%為靜態內容。應用服務器上每個Apache+PHP進程會消耗15到50MB的內存。讓這個怪物通過互聯網傳送小圖標給用戶是絕對不正常的,所有的延遲和丟失的數據包保持其活動狀態較長時間。更壞的是如果用戶下載一個大文件如PDF此進程將獨占幾分鐘!
最簡單的解決方案就是在服務器群前部署一臺反向代理cache,直接返回緩存的內容給用戶而不需要查詢應用服務器。最簡要的解決方案是部署一臺輕量的HTTP服務器來提供靜態內容。它可以安裝在同一臺服務器上,使用其它的端口。最好是,有一臺單線程服務器如Lighttpd或Thttpd,因為它們每個會話的開銷都非常小。應用系統只要將靜態內容存放到一個容易識別的目錄下即可,如“/static”,以便前端的負載均衡器可以將訪問轉到這臺專用的服務器上。靜態服務器也可以使用一個完全不同的主機名稱,便于將這些服務器部署到靠近用戶的不同地區。
在服務器方面有哪些可以調整的--例如裝有Apache的服務器
在服務器上運用一些技巧,可以顯著提升其性能。運用下面介紹的技巧,在Apache+PHP服務器上不需要升級硬件就可以增加兩到三倍的并發用戶數。
首先,禁用keep-alive。這對于性能來說是最為嚴重的事情。其本來是設計用于運行由inetdfork出來的NCSAhttpd網站上。所有這些fork會被服務器結束,對于這種問題keep-alive是一種比較好的解決方案。現在情況已經不同了,每次連接時服務器不再需要fork,而且每次新連接的開銷也很小。應用服務器經常由于內存約束、文件描述符限制或鎖的開銷,對運行的線程或進程的數量有一定限制。如果有用戶獨占一個線程幾秒甚至幾分鐘而無所事事純粹就是浪費。
服務器不會使用太多的CPU,但會消耗大量的內存,用戶需要等待連接的釋放。如果keep-alive時間設置過短,就沒有起到應有的作用。如果過長,就意味著服務器要為每個并發用戶分配一個進程,這并沒有考慮實際上大多數瀏覽器通常會建立4個并發會話。
簡單的說,一個運行類Apache的網站啟用keep-alive,同時最多就只能承載幾千個用戶。
另外,要觀察每個進程的平均內存使用情況。變更“MaxClient”參數來調節并發進程的最大數量,以便服務器不會發生交換。如果進程差異很大,這意味著有些請求產生了大量數據集,這些數據集會保存在內存中,造成浪費。要解決這個問題,你需要通過調整“MaxRequestPerChild”讓Apache盡快結束相關進程。較高的值,消耗較多的內存。較低的值,消耗較多的CPU。通常,設置在30到300間可以達到最好的效果。設置“MinSpareServers”和“MaxSpareServers”的值與“MaxClient”的值接近,以便服務器在負載加重時不用花費太多的時間來fork出新的進程。
運用這些技巧,最近2GB內存的服務器能承載幾千個用戶,剩下的就是負載均衡的工作了。