gunicorn初探_第1頁
gunicorn初探_第2頁
gunicorn初探_第3頁
gunicorn初探_第4頁
gunicorn初探_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Gunicorn初探初探Robby Zhou WSGIl WSGI,全稱 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是為 Python 語言定義的 Web 服務(wù)器和 Web 應(yīng)用程序或框架之間的一種簡單而通用的接口。l WSGI 是作為 Web 服務(wù)器與 Web 應(yīng)用程序或應(yīng)用框架之間的一種低級別的接口,以提升可移植 Web 應(yīng)用開發(fā)的共同點(diǎn)。WSGI 是基于現(xiàn)存的 CGI 標(biāo)準(zhǔn)而設(shè)計的。l 很多框架都自帶了 WSGI server ,比如 Flask,webpy,Django、CherryPy等等

2、。當(dāng)然性能都不好,自帶的 web server 更多的是測試用途,發(fā)布時則使用生產(chǎn)環(huán)境的 WSGI server或者是聯(lián)合 nginx 做 uwsgi 。 WSGI的作用的作用l WSGI有兩方:“服務(wù)器”或“網(wǎng)關(guān)”一方,以及“應(yīng)用程序”或“應(yīng)用框架”一方。服務(wù)方調(diào)用應(yīng)用方,提供環(huán)境信息,以及一個回調(diào)函數(shù)(提供給應(yīng)用程序用來將消息頭傳遞給服務(wù)器方),并接收Web內(nèi)容作為返回值。l 所謂的 WSGI中間件同時實現(xiàn)了API的兩方,因此可以在WSGI服務(wù)和WSGI應(yīng)用之間起調(diào)解作用:從WSGI服務(wù)器的角度來說,中間件扮演應(yīng)用程序,而從應(yīng)用程序的角度來說,中間件扮演服務(wù)器。 Whats Gunicor

3、nlGunicorn()是一個 Python WSGI UNIX 的 HTTP 服務(wù)器, 是基于”pre-fork worker”模型,從 Ruby 的獨(dú)角獸(Unicorn)項目移植。l Gunicorn 服務(wù)器與各種 Web 框架兼容,只需非常簡單的執(zhí)行,輕量級的資源消耗,以及相當(dāng)迅速。 Gunicorn的特點(diǎn)的特點(diǎn)l 支持 Django,paster,wsgi程序l 非常容易配置(相比較而言)l 自動管理多個worker進(jìn)程l 可以采用不同的后臺擴(kuò)展接口(sync, gevent, tornado等)l 原生并發(fā)訪問性能不高,與 uWSGI, Bjoern等有一定

4、的性能差距l(xiāng) HA的方案還不夠完善 Gunicorn的設(shè)計的設(shè)計l Gunicorn是基于”pre-fork worker”模型,這就意味著有一個中心主控master進(jìn)程,由它來管理一組worker進(jìn)程l Worker進(jìn)程可以支持不同的IO方式(sync, gevent, eventlet, tornado, meinheld 等) Gunicorn的的源碼結(jié)構(gòu)l 從 Application.run() 開始,首先初始化配置,從文件讀取,終端讀取等等方式完成 configurate。然后啟動 Arbiter,Arbiter 是實質(zhì)上的 master 進(jìn)程的核心,它首先從配置類中讀取并設(shè)置,然后

5、初始化信號處理函數(shù),建立 socket。然后就是開始 spawn 工作進(jìn)程,根據(jù)配置的工作進(jìn)程數(shù)進(jìn)行 spawn。然后就進(jìn)入了輪詢狀態(tài),收到信號,處理信號然后繼續(xù)。這里喚醒進(jìn)程的方式是建立一個 PIPE,通過信號處理函數(shù)往 pipe 里 write,然后 master 從 select.select() 中喚醒。l 工作進(jìn)程在 spawn 后,開始初始化,然后同樣對信號進(jìn)行處理,并且開始輪詢,處理 HTTP 請求,調(diào)用 WSGI 的應(yīng)用端,得到 resopnse 返回。然后繼續(xù)。 Geventl Gevent是一種基于協(xié)程的Python網(wǎng)絡(luò)庫,它用到Greenlet提供的協(xié) 程,封裝了libe

6、vent事件循環(huán)的高層同步APIl Gevent實現(xiàn)了WSGI,可以很方便的當(dāng)作python的web server服務(wù) 器使用 Gevent的優(yōu)點(diǎn)的優(yōu)點(diǎn)l Gevent最明顯的特征就是它驚人的性能,尤其是當(dāng)與傳統(tǒng)線程解決方案對比的時候。在這一點(diǎn)上,當(dāng)負(fù)載超過一定程度的時候,異步I/O的性能會大大的優(yōu)于基于獨(dú)立線程的同步I/O這幾乎是常識了。l Gevent提供了看上去非常像傳統(tǒng)的基于線程模型編程的接口,但是在隱藏在下面做的是異步I/O。更妙的是,它使得這一切透明。你可以繼續(xù)使用這些普通的Python模塊,比如用urllib2去處理HTTP請求,它會用Gevent替換那些普通的阻塞的Socket

7、操作。 Gevent的性能的性能 Gevent的不足之處的不足之處l Gevent不能支持多進(jìn)程。這意味著如果你要完全用到多核,你需要在多個端口上運(yùn)行多個監(jiān)聽進(jìn)程。可能需要運(yùn)行類似于Nginx的東西去在這些服務(wù)監(jiān)聽進(jìn)程中分發(fā)請求。l 國內(nèi)使用得比較少,相關(guān)資料比較匱乏。 Meinheldl Meinheld 是一個高性能的兼容WSGI的web服務(wù)器,其有效利用了 greenlet和picoev的優(yōu)勢,能夠以一種輕量級的方式支持異步網(wǎng)絡(luò)IO Meinheld的特點(diǎn)的特點(diǎn)l 并發(fā)性能好,基本可以接近nginxl 能夠很好地支持gunicornl HTTP協(xié)議的完善支持l 相關(guān)資料比較少,國內(nèi)外成熟使用案例較少 幾種流行的幾種流行的Web Server壓力測試對比壓力測試對比l hello world輸出l ab c 100 n 100000 Gunicorn的幾種的幾種worker模式性能模式性能l sync 同步IO,性能較差l

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論