單臺(tái)服務(wù)器并發(fā)百萬級(jí)配置

責(zé)任編輯:vivian

2011-11-04 09:35:03

摘自:51CTO

本文主要介紹利用單臺(tái)PC服務(wù)器來實(shí)現(xiàn)可支持百萬級(jí)用戶并發(fā)訪問的WEB服務(wù)器的實(shí)踐工作。意在提出一些手段來發(fā)掘設(shè)備的潛力,充分利用設(shè)備資源,以求達(dá)到降低硬件投入成本和維護(hù)成本目的

隨著硬件技術(shù)的飛速發(fā)展,當(dāng)前單臺(tái)PC 服務(wù)器的性能得到了顯著提升,反之,硬件成本卻在快速下降。另一方面,多數(shù)門戶網(wǎng)站、大型社區(qū)在建設(shè)WEB服務(wù)、郵件服務(wù)等網(wǎng)絡(luò)服務(wù)時(shí),仍然傾向于通過簡(jiǎn)單地?cái)U(kuò)充并行服務(wù)器數(shù)量、存儲(chǔ)子系統(tǒng)來支持用戶請(qǐng)求,而沒有考慮深入挖掘服務(wù)器本身的性能潛力!即使單臺(tái)硬件成本足夠的低廉,數(shù)量巨大的基礎(chǔ)硬件及其維護(hù)費(fèi)用對(duì)任何企業(yè)而言仍然是一項(xiàng)沉重的負(fù)擔(dān)!

如果能夠在滿足大量用戶請(qǐng)求的同時(shí),通過盡量提升服務(wù)器的整體性能,從而減少服務(wù)器的保有量,也同時(shí)減少了設(shè)備維護(hù)費(fèi)用,企業(yè)是不是可以得到更大的收益呢?答案是肯定的!

就筆者看來,對(duì)于需要支持百萬級(jí)用戶并發(fā)訪問的WEB 服務(wù)而言,確實(shí)沒有必要采用多臺(tái)服務(wù)器,單單一臺(tái)普通的PC服務(wù)器就可以勝任! 個(gè)人認(rèn)為當(dāng)前許多WEB業(yè)務(wù)應(yīng)用都是對(duì)硬件投資的極大浪費(fèi)!為什么這樣說呢?第一,當(dāng)前PC服務(wù)器多數(shù)帶多個(gè)獨(dú)立的CPU,而且每個(gè)CPU還帶多個(gè)硬核,而許多WEB應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器軟件根本就沒有對(duì)多核處理器進(jìn)行支持和優(yōu)化,基本上是一個(gè)CPU在工作,其它都在休息,沒能充分發(fā)揮多CPU的能力;第二,雖然服務(wù)器安裝有高性能網(wǎng)卡,但是所采用的操作系統(tǒng)沒有對(duì)網(wǎng)絡(luò)吞吐進(jìn)行優(yōu)化,無法支持巨大的網(wǎng)絡(luò)IO請(qǐng)求,沒能發(fā)揮出高性能網(wǎng)卡的優(yōu)勢(shì);第三、服務(wù)器一般都支持4G或以上更大的內(nèi)存,而且在x86平臺(tái)下內(nèi)存條的價(jià)格就像大白菜,非常低廉。即使如此廉價(jià)豐富的內(nèi)存資源也沒有得到好好利用,多數(shù)應(yīng)用根本沒有考慮基于內(nèi)存的高速緩存方案,比如業(yè)務(wù)應(yīng)用中最常見的數(shù)據(jù)庫訪問操作,通常都是直接連接到數(shù)據(jù)庫進(jìn)行SQL操作,其處理性能上不去是顯而易見的了;第四,應(yīng)用程序本身不夠優(yōu)化。不管存在何種原因,公認(rèn)的一點(diǎn)是一個(gè)不優(yōu)化的業(yè)務(wù)應(yīng)用對(duì)系統(tǒng)整體性能表現(xiàn)有很大影響。高深的優(yōu)化技術(shù)我們不談,就舉兩個(gè)常見的優(yōu)化處理來說明,例子一,對(duì)于系統(tǒng)中保證唯一而且又不經(jīng)常變化的用戶ID,是否可以考慮不采用鏈表而采用MAP表存儲(chǔ)呢?后者比前者查詢快多了?。焕佣瑢?duì)于判斷一個(gè)表中是否存在某條記錄,通常使用這樣的SQL語句:“select * from xx_table where xx_id=xx”, 試問是否可以改成“select 1 from xx_table where xx_id=xx”?一字之差,在高頻度數(shù)據(jù)查詢過程中,后面的語句比前面的快很多呀。第五,一般服務(wù)器群前面都有一個(gè)或多個(gè)防火墻設(shè)備,用來進(jìn)行包過濾和端口映射。如果服務(wù)器的自身安全性很強(qiáng)的話,這些防火墻設(shè)備也是可以被省略的。

基于上述理由,筆者及同事設(shè)計(jì)并實(shí)現(xiàn)了一款只需要單臺(tái)PC 服務(wù)器就可以支持百萬級(jí)用戶并發(fā)訪問的WEB服務(wù)器(硬件采用MS-9188主板,帶兩顆Intel(R) Xeon(R) E5410 CPU,每個(gè)CPU含4個(gè)核, 8G內(nèi)存, 320G SATA 硬盤, 板載8個(gè)Intel 82571EB 千兆網(wǎng)卡,一款非常普遍的PC服務(wù)器)。

現(xiàn)就我們的工作做一簡(jiǎn)要介紹:

第一, 選用64位版本的Linux對(duì)稱多處理操作系統(tǒng),以便支持超過4G的內(nèi)存和多核心CPU。

第二,提高系統(tǒng)網(wǎng)絡(luò)IO性能。雖然Linux操作系統(tǒng)本身的網(wǎng)絡(luò)處理能力相對(duì)Windows系統(tǒng)表現(xiàn)更好,但要做到千兆級(jí)別的網(wǎng)絡(luò)吞吐還是力不從心。這一點(diǎn)可以通過Smartbits工具得到驗(yàn)證。要支持百萬級(jí)的用戶請(qǐng)求,首先要考慮提高服務(wù)器的網(wǎng)絡(luò)吞吐能力!我們做過實(shí)驗(yàn),通過精簡(jiǎn)內(nèi)核協(xié)議棧的方法是無法達(dá)到要求的,原因很簡(jiǎn)單,網(wǎng)絡(luò)接收包和發(fā)送包的過程都必須經(jīng)歷多次內(nèi)核與用戶空間的拷貝,這嚴(yán)重占用CPU的處理時(shí)間。因此,我們?cè)O(shè)計(jì)采用“零拷貝”技術(shù),利用DMA機(jī)制和內(nèi)存映射技術(shù),實(shí)現(xiàn)網(wǎng)絡(luò)報(bào)文在內(nèi)核空間與用戶空間之間的快速傳遞,這個(gè)過程徹底解放了CPU,使得數(shù)據(jù)收發(fā)與業(yè)務(wù)處理可以并行進(jìn)行。

第三,建立用戶空間TCP/IP協(xié)議棧,建立具有多級(jí)快速搜索能力的連接追蹤池,以滿足百萬級(jí)用戶并發(fā)訪問的要求。這是性能得以提升的關(guān)鍵所在。如果采用原始的 Linux操作系統(tǒng),單單打開百萬個(gè)文件描述符就是個(gè)耗時(shí)的操作!我們?cè)O(shè)計(jì)僅實(shí)現(xiàn)1~7層中必要的協(xié)議處理過程,去除原內(nèi)核中冗余的協(xié)議處理過程,實(shí)行 “精兵簡(jiǎn)政”策略。整個(gè)協(xié)議處理過程采用CPU親和等手段實(shí)現(xiàn)多CPU、多核并行處理,提高多CPU的利用率。

第四,修改WEB應(yīng)用服務(wù)器軟件。設(shè)計(jì)采用開源的Apache服務(wù)器,在其基礎(chǔ)上增加了對(duì)“零拷貝”網(wǎng)絡(luò)IO的支持、用戶請(qǐng)求的多CPU并行處理支持、靜態(tài)頁面臨時(shí)文件系統(tǒng)存儲(chǔ)、內(nèi)存數(shù)據(jù)庫支持等技術(shù),充分利用“時(shí)間局部性原理和空間局部性原理”,顯著提升WEB服務(wù)器軟件的性能。

第五,提升服務(wù)器自身安全性。采用用戶態(tài)協(xié)議棧后,我們實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)報(bào)文的全面控制,自己解包自己打包,并加入對(duì)各種DDos攻擊的防御,而且有針對(duì)性地對(duì)包進(jìn)行了內(nèi)容審查,其安全過濾標(biāo)準(zhǔn)遠(yuǎn)高于單純的包過濾,完全做到了對(duì)業(yè)務(wù)內(nèi)容的過濾。這樣防火墻設(shè)備就顯得多余了,畢竟基于應(yīng)用軟件漏洞的入侵才是當(dāng)前黑客攻擊的主要手段!而在這方面,包過濾防火墻基本上無所作為,反倒是一個(gè)網(wǎng)絡(luò)瓶頸!當(dāng)然,如果防火墻作為負(fù)載均衡設(shè)備來使用又另當(dāng)別論。

第六,基于具體的業(yè)務(wù)應(yīng)用進(jìn)行優(yōu)化。我們對(duì)應(yīng)用系統(tǒng)的優(yōu)化主要從磁盤IO、數(shù)據(jù)庫訪問、業(yè)務(wù)算法等方面進(jìn)行。一個(gè)精心優(yōu)化的業(yè)務(wù)系統(tǒng),其性能也會(huì)得到顯著提高。

由于我們采用了上述步驟,我們最終實(shí)現(xiàn)了利用一臺(tái)PC 服務(wù)器支持百萬WEB用戶并行訪問的要求。綜合來看,我們?cè)O(shè)計(jì)的思路主要是盡量提升系統(tǒng)潛能,通過采取多核并發(fā)、網(wǎng)絡(luò)吞吐優(yōu)化、業(yè)務(wù)系統(tǒng)優(yōu)化等手段,多管齊下來提升系統(tǒng)的整體性能,以求做到用好設(shè)備、用精設(shè)備的理念,最終達(dá)到在滿足用戶需求的前提下,減少設(shè)備投入,節(jié)約成本的目的。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)