為什麼 Nginx 已經這麼成熟,Python 還有各種如 web.py 等 web 架構?

來源:互聯網
上載者:User

回複內容:

nginx是伺服器,web.py是web應用程式框架。

簡言之,前者封裝對網路io的處理,後者負責具體應用的邏輯,解決的問題是不一樣的。形象點呢,一個請求來了,nginx先把請求攔下來,發現要的是現成的東西(靜態檔案),它就直接把現成的靜態檔案返回給用戶端,這樣速度非常快,如果是其他的請求,再交給web.py解決,web.py解決完了之後,只是產生要返回的內容,並不自己做網路io,而是由nginx處理的。

這樣多好,一個安心處理網路、並發,順便把遇到簡單的請求直接ko掉。另一個專心處理應用的邏輯。

當然nginx能做的不只是這些,而為了開發方便web.py等架構都是內建簡單的web伺服器的。

至於tornado,它裡面既有web應用程式框架,也有web伺服器,而且這個伺服器用的還是高效能單線程非阻塞非同步模型,是個例外。Nginx 是以靜態內容和前端代理為主的伺服器,Python 的各種架構用來實現動態邏輯。

常見搭配是 Nginx 監聽用戶端串連,直接響應靜態請求(圖片、css、js 等),然後將動態請求通過 FastCGI (web.py) 或者 proxy (Tornado) 轉寄給後端的伺服器進行處理。Nginx 本身是 C 寫的,代碼效率高,支援動態平衡,比直接用 Python 面對大規模請求要穩定高效一些。

Web.py 這些架構有時候會內建一個伺服器用作開發,但是這個伺服器(與 Python 標準庫的 SimpleHTTPServer 一樣)無法很好應對高負載情況,不應用於生產環境。

真正與 Nginx 形成競爭關係的是 Tornado 和基於 Twisted 的一些伺服器。這些伺服器本身就是為直接連接用戶端設計的,並且支援 WebSocket 等一些 Nginx 反向 Proxy不支援的協議。在一個足夠複雜的、模組繁多的項目中,可能出現 Nginx 支援靜態檔案,Tornado 支援 comet 服務,然後某一端代理更多的商務邏輯的組合形式。nginx更多想做代理和均衡負載,而不大可能執行過於強大的邏輯。它就像一個家長,只有權力但是不具體做事情,然後它做好家長的角色。

而衆多邏輯實現的架構比如web.py就是具體在後面跑的兒子,處理各種業務邏輯。

爲什麼nginx不也把兒子的事情做了呢?估計做不好,因爲很難用一個程式來解決所有的業務,那時候就變成另外一個語言解釋器了……龐大而複雜,不大可行。而兒子也不大可能做了家長的事情,因爲處理業務邏輯重要的是擴展性和表達力。

所以他們就分開了。。。。一般使用 flask 或者 django這種 應用程式框架都會使用uswgi這種 伺服器部署,但是uswgi本身並沒有對 直連用戶端做最佳化,因此一般都會nginx+uswgi,使用nginx串連用戶端向uswgi分發請求提高效率,這樣對uswgi來說就不存在 慢io問題,也可以做動靜分離等等各種。關於Tornado之類高排名答案也說清楚了。網頁伺服器? nginx 的作者要哭了!!!!!!人家是一個好效能的io的東西把內建的開發用的伺服器當成生產用的了?
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.