Tornado vs Django選型分析

前言

項目中開發的幾個服務一直使用tornado做爲http服務器,本人也曾提出過疑問,爲何是tornado,獲得的答案是比較tornado,flask,django,tornado的併發性能最好,並且最爲輕量級。今天好不容易有點空餘時間,忽然強迫症發做,想搞清楚tornado真的併發比django強嗎?爲何django的中間件的優點就被忽略了呢?python


1. Tornado vs Django

總體思路就是列舉收集到的框架優缺點,而後進行驗證,從其餘帖子收集到的優缺點彙總以下:web

Tornado:
優勢:輕量、異步非阻塞IO處理方式、出色的抗負載能力、協程帶來優異的處理性能
缺點:沒有ORM,提供的支持和模板少,缺乏後臺支持,對小型項目來講開發速度沒有django快
分析:tornado所謂的「缺點」是由它的設計理念決定的,設計上就決定它是一個小而精的http服務器+輕量級web框架,高併發處理纔是它真正擅長的sql

Django:
優勢:大而全的框架,全自動化的管理後臺帶來超高的開發效率,豐富的組件
缺點:厚重,與他本身的ORM高耦合
分析:Django提供的方便,也意味着Django內置的ORM跟框架內的其餘模塊耦合程度高。應用程序必須使用Django內置的ORM,不然就不能享受到框架內提供的種種基於其ORM的便利;理論上能夠切換掉其ORM模塊,但這就至關於要把裝修完畢的房子拆除從新裝修,倒不如一開始就去毛胚房作全新的裝修。Django的賣點是超高的開發效率,其性能擴展有限django


2. Django的性能表現

前兩天有寫一篇django的帖子:傳送門
使用jmeter對鑑權接口加壓,看django的性能表現。
使用的是雙核,8G內存的centos機器,200併發的測試結果:flask

clipboard.png

tps只有2.6,最大時延到了77ssegmentfault


3. Tornado的性能表現

詳情見我另一個帖子:傳送門
固然,被測環境資源徹底一致,這裏只貼結果:centos

clipboard.png

最大時延484ms,TPS達到了126服務器


4. 選型結論

併發性能差距這麼多,固然與django使用默認的sqlite也有關係,但也必定程度上反應django的orm+模板的機制,在提供豐富功能模板的同時,在性能上也作出了犧牲.不過有帖子貼出的性能對比,django的併發數量竟然超過了tornado,不知道數據是否靠譜.併發

5. 寫在最後

原本還想引入sanic的性能表現,但sanic只支持python3.5+版本,手頭的環境不知足要求,升級起來比較麻煩,這裏先留一個坑,後續有環境再測試對比.
看其餘帖子的數據,sanic的 併發性能可能會超過tornado,待後續驗證框架

相關文章
相關標籤/搜索