![高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕_第1頁](http://file4.renrendoc.com/view/78198d948f09c869a9fcf22b2df466fb/78198d948f09c869a9fcf22b2df466fb1.gif)
![高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕_第2頁](http://file4.renrendoc.com/view/78198d948f09c869a9fcf22b2df466fb/78198d948f09c869a9fcf22b2df466fb2.gif)
![高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕_第3頁](http://file4.renrendoc.com/view/78198d948f09c869a9fcf22b2df466fb/78198d948f09c869a9fcf22b2df466fb3.gif)
![高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕_第4頁](http://file4.renrendoc.com/view/78198d948f09c869a9fcf22b2df466fb/78198d948f09c869a9fcf22b2df466fb4.gif)
![高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕_第5頁](http://file4.renrendoc.com/view/78198d948f09c869a9fcf22b2df466fb/78198d948f09c869a9fcf22b2df466fb5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕ideawu百度服務(wù)器研發(fā)高級工程師./高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第1頁!內(nèi)容簡介NotApache/Lighttpd/Nginxsourcecode理論,基礎(chǔ),通用代碼(核心內(nèi)幕)如何進(jìn)化高性能Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕高性能網(wǎng)絡(luò)服務(wù)器的實(shí)現(xiàn)原理Web服務(wù)器的實(shí)現(xiàn)socket基礎(chǔ),先學(xué)會走再學(xué)會飛高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第2頁!理論結(jié)合實(shí)踐,實(shí)踐結(jié)合理論“理論要結(jié)合實(shí)踐”,是對理論的貶低嗎?Linus不喜歡低級的試錯(cuò)別告訴我哪個(gè)對(錯(cuò)),告訴我那一個(gè)為什么對(錯(cuò))理論和實(shí)踐理論不結(jié)合實(shí)踐-書呆子實(shí)踐不結(jié)合理論-業(yè)余者理論結(jié)合實(shí)踐-科學(xué)家實(shí)踐結(jié)合理論-專業(yè)者三樓能進(jìn)行理論創(chuàng)新的人二樓掌握了理論的人一樓閱讀了XX源碼的人普通碼農(nóng)高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第3頁!最原始的網(wǎng)絡(luò)服務(wù)器網(wǎng)絡(luò)IO的基礎(chǔ)ssize_tread(intfd,void*buf,size_tcount);ssize_twrite(intfd,constvoid*buf,size_tcount);特點(diǎn):阻塞serv=tcp_socket();listen(serv);sock=accept(serv);read(sock,data);write(sock,data);close(sock)一次性服務(wù)無協(xié)議短連接如何重復(fù)服務(wù)?高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第4頁!帶有協(xié)議的網(wǎng)絡(luò)服務(wù)器如何讀取報(bào)文?盡可能多地讀取(read)數(shù)據(jù)到用戶緩沖區(qū)中,即使是固定長度報(bào)文,也不要讀取指定長度.判斷用戶緩沖區(qū)中的數(shù)據(jù)是否包含至少一個(gè)報(bào)文serv=tcp_socket();listen(serv);sock=accept(serv);packet_read(sock,packet);packet_write(sock,packet);close(sock)Packet是協(xié)議的報(bào)文
能不能使用TCP報(bào)文的格式?UDP?IP?ICMP?高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第5頁!可以處理多個(gè)連接的網(wǎng)絡(luò)服務(wù)器在外層加一個(gè)循環(huán)while(1){ sock=accept(serv); while(1){ packet_read(sock,request); if(request==EXIT){ break; } response=handle_packet(request); packet_write(sock,response); //close(sock);//短連接 } close(sock);//長連接}缺點(diǎn):必須等一個(gè)連接關(guān)閉或者退出后,才能處理下一個(gè)連接,不是并發(fā)服務(wù)器.高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第6頁!阻塞while(1){ //可能阻塞 sock=accept(serv); while(1){ //可能阻塞 packet_read(sock,request); if(request==EXIT){ break; } //可能阻塞 response=handle_packet(request); //可能阻塞 packet_write(sock,response); } close(sock);}至少要有一個(gè)阻塞,所以可以在accept()之后進(jìn)行“解阻塞”.奇跡=>...高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第7頁!原始多線程并發(fā)網(wǎng)絡(luò)服務(wù)器(續(xù))缺點(diǎn):線程的數(shù)量無法得到控制.如果是短連接,創(chuàng)建線程的成本可能相對請求處理的成本更大要解決的問題:如何控制線程的數(shù)量?如何避免創(chuàng)建線程對性能的影響高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第8頁!IO多路復(fù)用(IOMultiplex)前面的架構(gòu)瓶頸在哪?把IO委托給操作系統(tǒng)內(nèi)核操作系統(tǒng)告知是否可讀或者可寫輪詢等通知(select,epoll,kqueue)可讀/寫表示只能最多成功調(diào)用一次read/write而不阻塞IO多路復(fù)用只能解決IO阻塞,阻塞的類型還有很多種!高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第9頁!委托給網(wǎng)絡(luò)服務(wù)回顧避免阻塞(解阻塞)的方法:使用非阻塞的接口來替代IO多路復(fù)用找出阻塞的地方,委托出去.委托給操作系統(tǒng)內(nèi)核sendfile()委托給多線程/多進(jìn)程(后面不討論多進(jìn)程)委托給網(wǎng)絡(luò)服務(wù)如Apache/Lighttpd/Niginx把請求通過fastcgi(網(wǎng)絡(luò))委托給php-cgi進(jìn)程(網(wǎng)絡(luò)服務(wù)器).委托給網(wǎng)絡(luò)服務(wù),這是一個(gè)遞歸過程高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第10頁!Web服務(wù)器的一般架構(gòu)Web服務(wù)器將客戶端的請求委托給PHPFastCGI進(jìn)程(是一個(gè)獨(dú)立的網(wǎng)絡(luò)服務(wù))處理Web服務(wù)器從FastCGI進(jìn)程讀取數(shù)據(jù)后,返回給瀏覽器如果不是獨(dú)立的FastCGI服務(wù),也可以是嵌入到Web服務(wù)器內(nèi)的線程/進(jìn)程(如Apachemod_php).高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第11頁!靜態(tài)文件請求的處理文件IO會阻塞委托給線程避免文件IO-內(nèi)存緩存委托給操作系統(tǒng)–sendfile()高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第12頁!FastCGI委托給網(wǎng)絡(luò)高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第13頁!FAQIT牛人.udpwork./高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第14頁!網(wǎng)絡(luò)協(xié)議協(xié)議包含兩個(gè)部分語法(報(bào)文格式)語義(指令的處理,交互時(shí)序等)最重要的TCP協(xié)議是流式協(xié)議,但幾乎所有的應(yīng)用協(xié)議都是基于報(bào)文的協(xié)議TCP的”粘包”和”分包”報(bào)文分隔用連接關(guān)閉來表示報(bào)文結(jié)束.如,HTTP/1.0的響應(yīng)固定長度的報(bào)文.如,TFTP的數(shù)據(jù)報(bào)文.帶自描述長度的固定長度首部的變長報(bào)文.如IP包,TCP分段,nshead(是協(xié)議嗎?).帶結(jié)束符.如,行協(xié)議,HTTP協(xié)議.逐字節(jié)解析和數(shù)據(jù)轉(zhuǎn)義的影響.高層文本,帶結(jié)束符底層二進(jìn)制,固定長度高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第15頁!單個(gè)連接的連續(xù)服務(wù)(長連接)在一個(gè)循環(huán)里不斷得讀取請求,處理,然后發(fā)送響應(yīng).serv=tcp_socket();listen(serv);sock=accept(serv);while(1){ packet_read(sock,request); if(request==EXIT){ break; } response=handle_packet(request); packet_write(sock,response);}close(sock)高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第16頁!并發(fā)網(wǎng)絡(luò)服務(wù)器并發(fā)服務(wù)器是指,同時(shí)處理多個(gè)請求的服務(wù)器.并發(fā)的原理:多核(多線程,多進(jìn)程)分片(請求處理的切分)并發(fā)的基本實(shí)現(xiàn)–避免阻塞(解阻塞)!使用非阻塞的接口來替代IO多路復(fù)用找出阻塞的地方,委托出去.委托給操作系統(tǒng)內(nèi)核sendfile()委托給多線程/多進(jìn)程(后面不討論多進(jìn)程)委托給網(wǎng)絡(luò)服務(wù)委托有時(shí)候也叫做"異步".高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第17頁!原始多線程并發(fā)網(wǎng)絡(luò)服務(wù)器while(1){ //可能阻塞 sock=accept(serv); RUN_IN_NEW_THREAD{ while(1){ //可能阻塞 packet_read(sock,packet); if(packet==EXIT){ break; } //可能阻塞 response=handle_packet(packet); //可能阻塞 packet_write(sock,response); } close(sock); }}"RUN_IN_NEW_THREAD"表示創(chuàng)建線程,這個(gè)線程叫做"工作線程".高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第18頁!線程池并發(fā)網(wǎng)絡(luò)服務(wù)器初始化時(shí)創(chuàng)建線程池主進(jìn)程中accept()之后,把socket傳給工作線程但又帶來了一個(gè)問題:雖然可以不斷地接受連接,但畢竟工作線程有限,還是會出現(xiàn)連接排隊(duì)等線程的情況.當(dāng)連接數(shù)少時(shí)是線程等連接,但當(dāng)連接數(shù)多時(shí)是連接等線程.怎么解決?調(diào)優(yōu)工作線程的數(shù)量.硬件問題,不是軟件所能解決的,增加機(jī)器.改變服務(wù)器架構(gòu),tobecontinued...高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第19頁!IO多路復(fù)用函數(shù)介紹前面的架構(gòu)瓶頸在哪?基本IO多路復(fù)用函數(shù):intselect(intn,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout);簡化:(rfds_out,wfds_out)=select(rfds_in,wfds_in,timeout);功能:判斷rfds_in和wfds_in兩個(gè)列表中的socket連接,只要有至少一個(gè)可讀或者可寫,就返回.或者超時(shí)返回.rfds_in:要測試的是否可讀的socket列表wfds_in:要測試的是否可寫的socket列表rfds_out:返回可讀的socket列表wfds_out:返回可寫的socket列表timeout:超時(shí)時(shí)間,-1表示不永超時(shí)高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第20頁!HTTP服務(wù)器(Web服務(wù)器)報(bào)文解析:實(shí)現(xiàn)packet_read()用抓包工具抓一個(gè)HTTP請求報(bào)文和一個(gè)HTTP響應(yīng)報(bào)文對照著RFC上面兩步就是理論結(jié)合實(shí)踐,實(shí)踐結(jié)合理論語義實(shí)現(xiàn):實(shí)現(xiàn)handle_packet()靜態(tài)文件大文件小文件腳本處理,以php為例CGIFastCGIApachemod_php相對來說,報(bào)文的發(fā)送比較通用.高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第21頁!報(bào)文解析./person/pyhttp/使用Python的基本socket接口和字符串處理能力,實(shí)現(xiàn)了基本的HTTP協(xié)議報(bào)文的解析和協(xié)議實(shí)現(xiàn).為IO復(fù)用預(yù)留了接口高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第22頁!CGI多進(jìn)程用環(huán)境變量來傳遞請求的HTTP報(bào)頭信息和服務(wù)器信息用stdin傳遞請求的HTTP報(bào)體用stdout發(fā)送響應(yīng)報(bào)頭(部分)和報(bào)體缺點(diǎn):由于使用環(huán)境變量來通信,擴(kuò)展性受限一個(gè)進(jìn)程的生命周期只處理一個(gè)請求高性能并發(fā)Web服務(wù)器實(shí)現(xiàn)核心內(nèi)幕共25頁,您現(xiàn)在瀏覽的是第23頁!補(bǔ)充話題IO多路復(fù)用模型中,為什么不能用標(biāo)準(zhǔn)IO庫的行讀取函數(shù)fgets()來讀取HTTP的首部.因?yàn)閒gets()調(diào)用可能多于一次read(),是可阻塞的文本協(xié)議和二進(jìn)制協(xié)議如何取舍報(bào)文的格式只是協(xié)議的其中一項(xiàng)內(nèi)容,語義
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國表面肌電測試系統(tǒng)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國一次鋰亞硫酰氯電池行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國動(dòng)態(tài)圖像粒度粒形分析系統(tǒng)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2023年全球及中國無人駕駛接駁小巴行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025小飯店員工的勞動(dòng)合同范本
- 出境旅游合同書
- 2025辦公室裝修合同書集錦
- 房產(chǎn)股權(quán)轉(zhuǎn)讓合同
- 存量房買賣合同合同范本
- 陸路貨物運(yùn)輸合同承運(yùn)人定義年
- 2023學(xué)年度第一學(xué)期高三英語備課組工作總結(jié)
- 臨建標(biāo)準(zhǔn)化圖集新版
- 安監(jiān)人員考核細(xì)則(2篇)
- 生活老師培訓(xùn)資料課件
- 2020年新概念英語第一冊lesson97-102單元檢測
- 腹主動(dòng)脈瘤(護(hù)理業(yè)務(wù)學(xué)習(xí))
- 注射用醋酸亮丙瑞林微球
- 大學(xué)生就業(yè)指導(dǎo)PPT(第2版)全套完整教學(xué)課件
- 家具安裝工培訓(xùn)教案優(yōu)質(zhì)資料
- 湖南大一型抽水蓄能電站施工及質(zhì)量創(chuàng)優(yōu)匯報(bào)
- envi二次開發(fā)素材包-idl培訓(xùn)
評論
0/150
提交評論