guicorn 是什麼

guicorn 是什麼?

在回答問題以前咱們先來看看  web服務器的典型過程[1]
1. 創建連接:若是沒有鏈接,要創建鏈接
2. 接收請求:對客戶端發來的請求進行解析。
3. 處理請求:轉發給預約義的處理器。
4. 訪問資源、處理資源:
                    訪問資源 處理器根據請求訪問資源,資源可能存在於數據庫中或文件系統中等。
                    處理資源 返回數據,一般根據取出的數據對模板進行渲染(填充模板的過程)而後將渲染了的內容返回
5. 構建響應:構建http響應報文,包括響應狀態碼,響應頭和響應實體。響應實體中包含了數據。
6. 發送響應:將響應發送給客戶端,能夠作 關閉鏈接 
7. 日誌記錄
 
 
咱們知道像 djangoflasktornado這些web 應用框架(web framework) 負責數據庫鏈接存取,
頁面、數據的生成,session的管理, url dispatch等。也就是說,這些web應用框架主要在作第3 第4件事情。
那麼1. 2. 5. 中這些相對底層的事情——對http 協議的處理是誰來作的呢?是http服務器。
那麼http服務器如何與web 應用 之間框架溝通呢?這就須要 WSGI了。
 
 
WSGI 相似一種協議,定義了http服務器 和 web 應用 之間的 互相溝通的方式。
第2步到第3步,http 請求從http服務器給了web應用,中間須要經過WSGI的溝通,
一樣,由第4步到第5步,web應用將響應給了http服務器,中間也須要經過WSGI溝通。
此處若是以爲博主理解得不許,請參考  PEP3333 
 
 
顯然,它的 好處是 web應用框架與 http服務器的解耦。
另外,經過提供統一的接口,使得程序員沒必要關心http協議的底層處理細節,而專一於 業務邏輯上的開發。
 
 
回到問題,guicorn是什麼呢? 它實現了WSGI,同時它仍是http服務器。
由於gunicorn實現了WSGI, flask 在 gunicorn 上能跑,在其餘實現了WSGI的服務器上 也能愉快地運行。
 
 
爲啥要用它呢?
django 是有 本身的wsgi的,把gunicorn作django的WSGI服務器,能夠很靈活地配置worker數量,以提升併發量;
當web應用長時間未響應,會重啓worker進程,有『臨時』起死回生的功效;其餘特性。
 
 以上講了gunicorn的做用,下面就順便講一下gunicorn的配置吧:) 
 

gunicorn的配置

bind 綁定的ip以及端口號。部署後可經過訪問該ip及端口號可訪問web服務。
可是一般會在gunicorn前加 nginx 作爲反向代理。
 
workers 對應 處理進程的數目。是重要的配置。
經過命令 ps aux | grep 'gunicorn' 能夠看到進程的數目與配置文件中的數目相符。
有推薦 (2*cpu核數)+1的,實際要看具體狀況,請求量小徹底不用這麼配,以減小沒必要要的內存消耗。
 
timeout 超時參數,若是web應用服務器超過了此時間仍未響應那麼將重啓worker,顯然,重啓期間 服務不可用。
假如web應用服務器在重啓前 阻塞住了,那麼重啓以後阻塞 可能 消失,此時服務可用。但若是阻塞緣由 沒有消除
那麼web應用服務器 遲早仍是會阻塞,阻塞時間太長了,引發worker再次重啓。這就是所謂的 『臨時』起死回生
 
daemon 是否爲守護進程。
pythonpath python路徑。
preload_app 配成 True 可在worker 進程fork前加載代碼,推薦一試。
其餘參數參考 這個
  
講完了gunicorn的配置,再講講guicorn的 部署吧!
 

啓動gunicorn 

舉例html

/home/venv/bin/python /home/venv/bin/gunicorn -c start_gunicorn.py wsgi:app

其中 -c 指定配置文件python

wsgi.py文件中寫web 應用程序,請注意下wsgi文件的路徑nginx

博主不太懂的地方,在於奇怪的冒號。冒號左邊的部分表示定義程序的包或者模塊,冒號右邊的部分表示包中程序實例的名字 [2]
貌似,沒有冒號也是能夠的;)參考  gunicorn with django
 
 
題外話
web後端 最最簡單粗暴的理解:拿到請求,查查數據庫,扔回給客戶端 (博主遁走
 
觀點
1. guicorn = WSGI服務器 + http服務器。
2. 對django來說,它是一個更好的WSGI服務器( 能起多個worker 等),另外 它還能處理http請求。
3. 想充分了解WSGI 看  PEP3333.
 
參考 
[1] http權威指南, 第五章;  redis 實戰, 第二章
[2] http://www.jianshu.com/p/7bc34e56fa39
 
若是講的不許, 歡迎拍磚 ;)
2016年5月5號
相關文章
相關標籤/搜索