Tornado簡介與特性

一. Tornado簡介

  • Tornado全稱Tornado Web Server,是一個用Python語言寫成的Web服務器兼Web應用框架,由FriendFeed公司在自己的網站FriendFeed中使用,被Facebook收購以後框架在2009年9月以開源軟件形式開放給大衆。

特點:

  • 作爲Web框架,是一個輕量級的Web框架,類似於另一個Python web框架Web.py,其擁有異步非阻塞IO的處理方式。
  • 作爲Web服務器,Tornado有較爲出色的抗負載能力,官方用nginx反向代理的方式部署Tornado和其它Python web應用框架進行對比,結果最大瀏覽量超過第二名近40%。

二. Tornado的特性

1.HTTP服務器

  • Tornado爲了高效實現Comet/後端異步調用HTTP接口,是直接內嵌了HTTP服務器。
  • 前端無需加apache / lighttpd / nginx等也可以供瀏覽器訪問;但它並沒有完整實現HTTP1.1的協議,所以官方文檔是推薦用戶在生產環境下在前端使用nginx,後端反向代理到多個Tornado實例。
  • Tornado本身是單線程的異步網絡程序,它默認啓動時,會根據CPU數量運行多個實例;充分利用CPU多核的優勢。

2.單線程異步

  • 網站基本都會有數據庫操作,而Tornado是單線程的,這意味着如果數據庫查詢返回過慢,整個服務器響應會被堵塞。
  • 數據庫查詢,實質上也是遠程的網絡調用;理想情況下,是將這些操作也封裝成爲異步的;但Tornado對此並沒有提供任何支持。
  • 這是Tornado的設計,而不是缺陷。一個系統,要滿足高流量;是必須解決數據庫查詢速度問題的!
  • 數據庫若存在查詢性能問題,整個系統無論如何優化,數據庫都會是瓶頸,拖慢整個系統!
  • 異步並不能從本質上提到系統的性能;它僅僅是避免多餘的網絡響應等待,以及切換線程的CPU耗費。
  • 如果數據庫查詢響應太慢,需要解決的是數據庫的性能問題;而不是調用數據庫的前端Web應用。
  • 對於實時返回的數據查詢,理想情況下需要確保所有數據都在內存中,數據庫硬盤IO應該爲0;這樣的查詢才能足夠快;而如果數據庫查詢足夠快,那麼前端web應用也就無將數據查詢封裝爲異步的必要。
  • 就算是使用協程,異步程序對於同步程序始終還是會提高複雜性;需要衡量的是處理這些額外複雜性是否值得。
  • 如果後端有查詢實在是太慢,無法繞過,Tornaod的建議是將這些查詢在後端封裝獨立封裝成爲HTTP接口,然後使用Tornado內置的異步HTTP客戶端進行調用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章