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