国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
高性能服務(wù)器設(shè)計|高性能服務(wù)器,設(shè)計

高性能服務(wù)器設(shè)計

作者:      來源:xiaosuo.cublog.cn     發(fā)表時間:2007-01-30     瀏覽次數(shù):3170      字號:    

先后查看了haproxy,l7swlighttpd的相關(guān)源碼,無一例外,他們一致認(rèn)為多路復(fù)用是性能最好的服務(wù)器架構(gòu)。事實也確實應(yīng)該如此,進(jìn)程的出現(xiàn)一方面就是為了保存任務(wù)的執(zhí)行上下文從而簡化應(yīng)用程序設(shè)計,如果程序的邏輯結(jié)構(gòu)不是很復(fù)雜,那么用整個進(jìn)程控制塊來保存執(zhí)行上下文未免有些大材小用,加上進(jìn)程調(diào)度和其他的一些額外開銷,程序設(shè)計上的高效很可能會被執(zhí)行時的低效所抵消。代價也是有的:程序設(shè)計工作將更加具有挑戰(zhàn)性。

體系結(jié)構(gòu)選定之后,我們就要考慮更加細(xì)節(jié)的部分,比如說用什么操作系統(tǒng),用操作系統(tǒng)提供的那些API。在這方面,前輩們已經(jīng)做過很多,我們只需要簡單的“拿來”即可,如果再去枉費唇舌,簡直就是浪費時間,圖財害命。High-Performance Server Architecture從根本上分析了導(dǎo)致服務(wù)器低效的罪魁禍?zhǔn)祝簲?shù)據(jù)拷貝、(用戶和內(nèi)核)上下文切換、內(nèi)存申請(管理)和鎖競爭;The C10K Problem列舉并分析了UNIX、Linux甚至是部分Windows為提高服務(wù)器性能而設(shè)計的一些系統(tǒng)調(diào)用接口,這篇文檔的難能可貴之處還在于它一致保持更新;Benchmarking BSD and Linux更是通過實測數(shù)據(jù)用圖表的形式把BSD和Linux的相關(guān)系統(tǒng)調(diào)用的性能直觀地陳列在我們眼前,結(jié)果還是令人激動的:Linux 2.6的相關(guān)系統(tǒng)調(diào)用的時間復(fù)雜度竟然是O(1)。

簡單的總結(jié)如下:

  1. 操作系統(tǒng)采用Linux 2.6.x內(nèi)核,不僅因為它的高性能,更因為它大開源(這并不是說其他的UNIX或者是BSD衍生物不開源)給程序設(shè)計帶來的便利,我們甚至可以把服務(wù)做到內(nèi)核空間。
  2. 多路復(fù)用采用epoll的“電平觸發(fā)”(Level Triggered)模式,必要時可以采用“邊緣觸發(fā)”(Edge Triggered),但要注意防止數(shù)據(jù)停滯。
  3. 為避免數(shù)據(jù)拷貝可以采用sendfile系統(tǒng)調(diào)用發(fā)送小文件,或者是文件的小部分,注意避免sendfile因磁盤IO而導(dǎo)致的阻塞。
  4. 如果服務(wù)操作設(shè)計大量磁盤IO操作,應(yīng)選用Linux內(nèi)核提供的異步IO機(jī)制,其對應(yīng)的用戶空間庫為libaio,注意:這里提到異步IO庫并非目前glibc中附帶的異步IO實現(xiàn)。
  5. 如果同時有多個數(shù)據(jù)需要傳輸,采用writev/readv來減少系統(tǒng)調(diào)用所帶來的上下文切換開銷,如果數(shù)據(jù)要寫到網(wǎng)絡(luò)套接字文件描述符,這也能在一定程度上防止網(wǎng)絡(luò)上出現(xiàn)比較小幀,為此,還可以有選擇地開啟TCP_CORK選項。
  6. 實現(xiàn)自己的內(nèi)存管理,比如說緩存數(shù)據(jù),復(fù)用常用數(shù)據(jù)結(jié)構(gòu)等。
  7. 用多線程替代多進(jìn)程,線程庫當(dāng)然選擇nptl。
  8. 避免進(jìn)程/線程間非必要的同步,保持互斥區(qū)的短小。
上面這些瑣碎的細(xì)節(jié)在ESR看來可能都是過早優(yōu)化,他可能又會建議我們等待硬件的升級。哈哈,提醒還是不無道理的,算法的設(shè)計部分,我們更要下大力氣,因地制宜地降低算法的時間復(fù)雜度。為什么不提空間復(fù)雜度呢?內(nèi)存的價格還是相對低廉吧,不過還是不要忘記現(xiàn)在的計算機(jī)瓶頸多在內(nèi)存的訪問。

有一點需要提醒一下,目前SMP系統(tǒng)和多核心CPU比較常見,如果還是僅采用單進(jìn)程(線程)的多路復(fù)用模型,那么同一時間將只有一個CPU為這個進(jìn)程(線程)服務(wù),并不能充分發(fā)揮CPU的計算能力,所以需要至少CPU(CPU核心)數(shù)目個進(jìn)程(線程)來分擔(dān)系統(tǒng)負(fù)擔(dān)。有一個變通的解決方案:不用修改源碼,在服務(wù)器上運行兩個服務(wù)程序的實例,當(dāng)然這個時候服務(wù)端口應(yīng)該是不同的,然后在其前端放置負(fù)載均衡器將流量和連接平均分配到兩個服務(wù)端口,可以簡單的通過DNAT來實現(xiàn)負(fù)載均衡。其實,這個時候我們已經(jīng)把多CPU或者是多核系統(tǒng)看成了多個系統(tǒng)組成的集群。

為了提高服務(wù)器的性能,單純的依靠提高單個服務(wù)器的處理能力似乎不能奏效,況且配置越高的服務(wù)器花銷也就越高,為此人們經(jīng)常采用服務(wù)器集群的方式,通過把計算盡可能地分配到相對比較廉價的機(jī)器上單獨完成,籍此來提升服務(wù)器的整體性能,事實證明,這種體系結(jié)構(gòu)不僅是切實可行的,而且還能提高服務(wù)器的可用性,容錯能力也較強(qiáng)。在網(wǎng)絡(luò)服務(wù)器方面,Linux內(nèi)核中的由國人章文嵩先生設(shè)計的IP層負(fù)載均衡解決方案LVS比較有名,還有就是工作于應(yīng)用層的haproxy和剛剛起步的l7sw。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
服務(wù)器并發(fā)處理能力
如何提高服務(wù)器并發(fā)處理能力
CPU
Linux性能監(jiān)控(1)
?萬字詳文:Linux 常見的 CPU 性能問題及解決方案梳理
Python 中的進(jìn)程、線程、協(xié)程、同步、異步、回調(diào)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服