Django適合做大用戶量的系統嗎?
1. 首先,這其實是個技術選型題。
做技術選型的時候不能單純的考慮性能,應該優先考慮業務類型,以及團隊水平。另外的話,框架只是其中一環,還有配套呢。
如果是數據驅動型,尤其是要用到關系型數據庫,那麽選擇Django足以,ORM會比較省事,但是性能損耗是個很明顯的問題。不過還是看團隊,如果大家玩flask或者bottle都賊溜,那麽還要什麽Django,自己造就行了。(題外話,不過你得提防比較水的人破壞整體結構)
如果下遊是由很多微服務構成的,Tornado處理起來會有一定優勢,用它的異步模型。(而不是用同步的方式寫代碼23333,要是這麽用的話,你讓flask怎麽想,讓bottle怎麽想,讓村東頭的sanic怎麽想
在這裏還是要推薦下我自己建的Python開發學習群:725479218,群裏都是學Python開發的,如果你正在學習Python ,小編歡迎你加入,大家都是軟件開發黨,不定期分享幹貨(只有Python軟件開發相關的),包括我自己整理的一份2018最新的Python進階資料和高級開發教程,歡迎進階中和進想深入Python的小夥伴
2. Django能抗多少量?
上面選型如果定下來Django了,那麽剩下的就是“Where there is a will, there is a way”的問題。這個問題跟“Where there is a way, there is a will”的差別在於,並不是框架能支撐你到多大的並發量,而是你想要抗住很大的並發量,怎麽優化現有框架。
當你的項目大到一定程度,瓶頸基本不在框架上(換語言另說,有人不懂框架亂搞的另說)。
我們用Django開發對外的產品不多,量級10w 100w的都有,但是我們上線前的準備都是朝著要抗足夠高的流量目標的(誰沒有一顆抗萬億流量的心呢),並且要能夠通過增加機器提高承載能力。當然有些業務類型沒法通過簡單的增加機器來進行擴容,那只能通過其他途徑優化單機的TPS。所以最終壓測的結果都要遠高於真實流量。百萬量級的產品,扛起來並不費力。不過還是強調一下,看業務類型!
3. 用戶體驗問題
當量級變大之後,影響用戶體驗嗎?
用戶體驗分很多方面,包括交互,設計,前端,後端。這裏討論的是後端,那麽就說後端。後端對用戶體驗的影響只有一個——那就是響應時間。當你的網站或者接口有一個用戶訪問時,能在短時間內返回response,那麽,當用戶量達到10w時,是否能在同樣的時間內返回response呢?這是個問題。
對於後端來說,把響應時間控制在合理的範圍之內是很重要的。20ms和30ms或許差別不大,但是50ms跟100ms會有明顯差別。
怎麽衡量合理的返回時間呢?
這塊還是得說點細節,比方說Django的系統,一個用戶請求進來了,需要涉及多少次Redis查詢,平均每次響應時間是多少;涉及到多少次內網或者外網的HTTP請求,平均響應時間是多少;涉及到多少次MySQL查詢,平均響應時間是多少。
所以大家面試時都喜歡問一個問題:用戶輸入網址之後,到頁面展示出來的詳細過程是什麽?
當你知道了所有的細節之後,你就能知道,如果系統只涉及到Redis查詢,那應該多少ms內返回是合理的,如果你發現nginx日誌裏面的後端響應時間高於你的預期,那你就得排查下了。其他的也是類似。
所以當談論到後端上的用戶體驗時,我自己的看法就是,能多快就多快的給他數據。磨磨唧唧,妥妥拽拽的最招人煩。
Django適合做大用戶量的系統嗎?