上一篇文章,“小程序創(chuàng)業(yè)最低配置部署,騰訊云折扣秒殺阿里云!”介紹了小程序項目啟動時的最低配置服務(wù)器選擇,但當(dāng)項目良好發(fā)展時,還是要把服務(wù)器配置調(diào)整到標(biāo)準(zhǔn)水平,承受住日益增長的流量訪問。
隨著Python的流行,直接用Python來部署Web服務(wù)器變成一個需求。但Python自帶的Flask或傳統(tǒng)的DJango都是基于阻塞io模型實現(xiàn),性能上往往達不到生產(chǎn)環(huán)境大規(guī)模跑用戶的需求。Tornado在底層io處理機制上和django以及flask有著根本的區(qū)別,采用了非阻塞io模型,也特別適合小程序用python實現(xiàn)服務(wù)端時的部署。
1. 確定Tornado的部署架構(gòu)
下圖是一般Tornado用作生產(chǎn)環(huán)境的標(biāo)準(zhǔn)部署架構(gòu)。核心思想是在一臺服務(wù)器上要運行多個tornado實例,然后使用nginx作反向代理服務(wù)器,nginx會把客戶端請求中轉(zhuǎn)到適當(dāng)?shù)膖ornado服務(wù)器進程。
運行多個Tornado進程實例的原因是同步請求時,在應(yīng)用處理過程中(如數(shù)據(jù)庫查詢,磁盤訪問),服務(wù)器進程不能接受新請求,所以需要運行多個服務(wù)器進程實例。而在異步請求時,在應(yīng)用處理時,服務(wù)器進程是非阻塞的,可以接受新請求,因此tornado的非阻塞架構(gòu)本身就很好地解決這個問題。

2. 云服務(wù)器比較
一般建議每個Tornado進程實例對應(yīng)1個CPU,所以建議購買4核8G或者是8核16G的服務(wù)器。我們比較了騰訊云和阿里云的服務(wù)器價格,都是按照優(yōu)惠價格比較,依然是騰訊云秒殺阿里云。
騰訊云的“云服務(wù)器三折起”優(yōu)惠活動對4核8G和8核16G的服務(wù)器有超劃算的優(yōu)惠。見下圖,左邊選擇“8核16G”,右邊選擇“重慶”,1年付可以拿到3.8折,才3149.59元。
左邊如果選擇“4核8G”的話,1年付將是2000元左右更優(yōu)惠。一般情況下4核8G配置也已足夠,但考慮“8核16G”只貴了1000元1年,在有預(yù)算的時候,不妨選擇“8核16G”,當(dāng)有突發(fā)負(fù)載時更有緩沖的余量。

與之相對應(yīng)的阿里云,“性能級主機2-5折”是目前在搞的ECS優(yōu)惠活動。類似的“8核16G”將需要4466元/年。如果只有3000元預(yù)算的話,只有購買4核8G云服務(wù)器,或者是“8核16G”的突發(fā)型實例(即負(fù)載不能一直跑滿100%)。

3. NGinx配置
NGinx的反向代理安裝和配置是運維標(biāo)配了。我們這里著重兩個環(huán)節(jié),a) 反向代理到4個Tornado實例;b) 配置SSL。
下面所列的NGinx配置示例主要就考慮了這兩點,重點關(guān)注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進程。
詳細(xì)操作可以參見這篇文章,使用python3+supervisor+nginx部署tornado。
更多省錢秘笈,請看: