上一篇文章,「小程序創業最低配置部署,騰訊雲折扣秒殺阿里雲!」介紹了小程序項目啓動時的最低配置服務器選擇,但當項目良好發展時,仍是要把服務器配置調整到標準水平,承受住日益增加的流量訪問。php
隨着Python的流行,直接用Python來部署Web服務器變成一個需求。但Python自帶的Flask或傳統的DJango都是基於阻塞io模型實現,性能上每每達不到生產環境大規模跑用戶的需求。Tornado在底層io處理機制上和django以及flask有着根本的區別,採用了非阻塞io模型,也特別適合小程序用python實現服務端時的部署。html
1. 肯定Tornado的部署架構python
下圖是通常Tornado用做生產環境的標準部署架構。核心思想是在一臺服務器上要運行多個tornado實例,而後使用nginx做反向代理服務器,nginx會把客戶端請求中轉到適當的tornado服務器進程。nginx
運行多個Tornado進程實例的緣由是同步請求時,在應用處理過程當中(如數據庫查詢,磁盤訪問),服務器進程不能接受新請求,因此須要運行多個服務器進程實例。而在異步請求時,在應用處理時,服務器進程是非阻塞的,能夠接受新請求,所以tornado的非阻塞架構自己就很好地解決這個問題。數據庫
2. 雲服務器比較django
通常建議每一個Tornado進程實例對應1個CPU,因此建議購買4核8G或者是8核16G的服務器。咱們比較了騰訊雲和阿里雲的服務器價格,都是按照優惠價格比較,依然是騰訊雲秒殺阿里雲。flask
騰訊雲的「雲服務器三折起」優惠活動對4核8G和8核16G的服務器有超划算的優惠。見下圖,左邊選擇「8核16G」,右邊選擇「重慶」,1年付能夠拿到3.8折,才3149.59元。小程序
左邊若是選擇「4核8G」的話,1年付將是2000元左右更優惠。通常狀況下4核8G配置也已足夠,但考慮「8核16G」只貴了1000元1年,在有預算的時候,不妨選擇「8核16G」,當有突發負載時更有緩衝的餘量。服務器
與之相對應的阿里雲,「性能級主機2-5折」是目前在搞的ECS優惠活動。相似的「8核16G」將須要4466元/年。若是隻有3000元預算的話,只有購買4核8G雲服務器,或者是「8核16G」的突發型實例(即負載不能一直跑滿100%)。架構
3. NGinx配置
NGinx的反向代理安裝和配置是運維標配了。咱們這裏着重兩個環節,a) 反向代理到4個Tornado實例;b) 配置SSL。
下面所列的NGinx配置示例主要就考慮了這兩點,重點關注upstream和ssl的配置。
user nginx;
worker_processes 5;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
proxy_next_upstream error;
upstream tornadoes {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 443;
ssl on;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/cert.key;
server_name www.example.org *.example.org;
location /static/ {
root /var/www/static;
if ($query_string) {
expires max;
}
}
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://tornadoes;
}
}
4. 利用Supervisor管理部署tornado進程。
詳細操做能夠參見這篇文章,使用python3+supervisor+nginx部署tornado。
更多省錢祕笈,請看: