佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 淺談Python項目的服務(wù)器部署

淺談Python項目的服務(wù)器部署

熱門標(biāo)簽:語音系統(tǒng) 呼叫中心市場需求 電話運營中心 企業(yè)做大做強 Win7旗艦版 百度AI接口 客戶服務(wù) 硅谷的囚徒呼叫中心

關(guān)于Web服務(wù)器和應(yīng)用服務(wù)器

基本概念:

  • Web服務(wù)器主要功能就是存儲、處理、傳遞網(wǎng)頁,客戶端和服務(wù)器之間基于HTTP協(xié)議進(jìn)行通信。
  • 應(yīng)用服務(wù)器主要是處理動態(tài)請求,調(diào)用相應(yīng)的對象完成對請求的處理,返回響應(yīng)的結(jié)果。

兩者之間的區(qū)別:

  • Web服務(wù)器主要是以HTTP為核心,WEB UI為向?qū)У膽?yīng)用,處理一些靜態(tài)請求。
  • 應(yīng)用服務(wù)器雖然也支持HTTP協(xié)議,但應(yīng)用服務(wù)器可以通過很多協(xié)議為應(yīng)用程序提供商業(yè)邏輯。

Python項目部署架構(gòu)

在我們平時搭建一個Python Web項目時,比如Django框架的項目,這時候常見的服務(wù)端架構(gòu):

  1. Nginx服務(wù)器作為代理服務(wù)器,代理處理靜態(tài)資源(js,css,圖片)請求,以及動態(tài)請求(增刪改查)轉(zhuǎn)發(fā)以及返回處理結(jié)果。
  2. uWSGI服務(wù)器負(fù)責(zé)接受Nginx服務(wù)器,處理過后轉(zhuǎn)發(fā)給Django應(yīng)用,接受Django應(yīng)用處理返回的信息,在轉(zhuǎn)發(fā)給nginx
  3. Django應(yīng)用從uWSGI服務(wù)器接收請求,調(diào)用相應(yīng)的業(yè)務(wù)邏輯,處理數(shù)據(jù)渲染相應(yīng)的頁面并且返回給uWSGI服務(wù)器。

關(guān)于cgi、wsgi、uwsgi、http協(xié)議

接下來針對上文提到Django項目部署架構(gòu),聊聊這幾個協(xié)議在這過程中的作用:

  1. http協(xié)議:客戶端程序和Nginx服務(wù)器通信就是基于http協(xié)議,而Nginx服務(wù)器作為一個代理服務(wù)器,會根據(jù)HTTP請求返回靜態(tài)資源還是轉(zhuǎn)發(fā)動態(tài)請求。
  2. cgi協(xié)議:cgi協(xié)議是外部應(yīng)用程序和Web服務(wù)器之間的接口標(biāo)準(zhǔn),簡而言之,就是規(guī)定如何讓一個程序與Web服務(wù)器程序之間通信。
  3. wsgi協(xié)議:基于現(xiàn)存的CGI標(biāo)準(zhǔn)設(shè)計,一個Python web框架編寫的應(yīng)用程序和Web服務(wù)器之間通信的規(guī)范。
  4. uwsgi:uWSGI服務(wù)器獨有的協(xié)議,用于uWSGI服務(wù)器和其他Web服務(wù)器之間的數(shù)據(jù)通信

關(guān)于cgi、fastcgi、php-fpm、FastCGI(額外)

  1. CGI:是 Web Server 與 Web Application 之間數(shù)據(jù)交換的一種協(xié)議。
  2. FastCGI:同 CGI,是一種通信協(xié)議,但比 CGI 在效率上做了一些優(yōu)化。同樣,SCGI 協(xié)議與 FastCGI 類似。
  3. PHP-CGI:是 PHP (Web Application)對 Web Server 提供的 CGI 協(xié)議的接口程序。
  4. PHP-FPM:是 PHP(Web Application)對 Web Server 提供的 FastCGI 協(xié)議的接口程序,額外還提供了相對智能一些任務(wù)管理。

關(guān)于uWSGI、Nginx服務(wù)器

簡單來講,uWSGI也是一個Web服務(wù)器,他雖然同時實現(xiàn)了http、uwsgi、wsgi協(xié)議,但是更多被作為應(yīng)用服務(wù)器和應(yīng)用程序之間進(jìn)行通信。
那么這里就有個疑問了,為什么uWSGI都能直接處理http請求了,還需要Nginx服務(wù)器?這樣處理有幾點原因:

  1. 首先Nginx服務(wù)器在這過程中屬于代理服務(wù)器的角色,每當(dāng)一個http請求進(jìn)來,就需要經(jīng)過Nginx服務(wù)器,而Nginx服務(wù)器的優(yōu)勢就在于異步非阻塞的網(wǎng)絡(luò)模型,它能夠在單線程的情況下處理大量的請求,針對處理靜態(tài)資源請求;而對于動態(tài)請求,能夠通過緩存的功能,并且配合CDN進(jìn)行優(yōu)化,這樣能夠極大降低系統(tǒng)的負(fù)載,降低客戶端響應(yīng)時間。
  2. 其次,Nginx服務(wù)器能夠進(jìn)行負(fù)載均衡,啟用多個后端服務(wù)器,通過Nginx對HTTP請求進(jìn)行分配,這樣能夠極大優(yōu)化架構(gòu)的效率,提高處理的性能。
  3. 最后,Nginx有很多模塊支持一些比如白名單,黑名單功能,并且配合keepalive實現(xiàn)高可用的架構(gòu).

總而言之,Nginx服務(wù)器在處理http請求上,都有著uWSGI沒有的優(yōu)勢,所以在日常部署環(huán)境中,經(jīng)常會使用到Nginx+uWSGI。

uWSGI

安裝部署

uWSGI有兩種安裝方式,一種是通過pip安裝,一種是通過源碼安裝。這里就簡單介紹pip安裝方式,源碼安裝有興趣可以私下自己了解。

pip install uwsgi

相關(guān)文件

uWSGI服務(wù)器在啟動的過程中主要涉及到以下這幾個文件,其中uwsgi.sock還會涉及到Nginx相關(guān)部署的問題,在Nginx配置的時候回繼續(xù)展開講。

(venv) [root@mbb-48 uwsgi]# tree .
.
|-- uwsgi.ini       # uwsgi配置文件
|-- uwsgi.log       # uwsgi日志文件
|-- uwsgi.pid       # uwsgi運行進(jìn)程pid
|-- uwsgi.sock      # uwsgi socket
`-- uwsgi.status    # uwsgi狀態(tài)文件

配置示例

以下配置是自己一個項目中用到的,其中的配置參數(shù)都是比較常見通用。

[uwsgi]
chdir=/data/Novel/novel_test
module=novel_test.wsgi:application
home=/data/Novel/venv
static-map=/static=/data/Novel/novel_test/static
threads=8
http=0.0.0.0:23606
master=true
vacuum=true
thunder-lock=true
uid=root
gid=root
harakiri=30
post-buffering=4096
socket=%(chdir)/uwsgi/uwsgi.sock
stats=%(chdir)/uwsgi/uwsgi.status
pidfile=%(chdir)/uwsgi/uwsgi.pid
daemonize=%(chdir)/uwsgi/uwsgi.log

配置解析

  • chdir: 定義項目的目錄
  • module: 要使用的 WSGI 模塊,不同的Python web框架中使用方式也不太一樣。
  • home: 指定Python執(zhí)行環(huán)境,這個參數(shù)針對有不同Python運行環(huán)境,比如virtualenv創(chuàng)建獨立Python環(huán)境的情況。
  • static-map: 映射靜態(tài)目錄
  • threads: 線程數(shù)量
  • http: 指定啟動地址和端口
  • master: 啟用主進(jìn)程
  • vacuum: 退出時,清理產(chǎn)生的中間文件(sock,pid,stats)
  • thunder-lock: 序列化接收的內(nèi)容
  • uid: 指定啟動用戶
  • gid: 指定啟動組
  • harakiri: 設(shè)置服務(wù)器響應(yīng)時間
  • post-buffering: 啟用緩沖
  • socket: socket文件存放路徑
  • stats: stats文件存放路徑
  • pidfile: pid文件存放路徑
  • daemonize: 日志文件輸出文件路徑

額外配置

  • processes: 進(jìn)程數(shù)量
  • buffer-size: 設(shè)置緩沖大小
  • listen: 設(shè)置監(jiān)聽隊列大?。J(rèn)100)
  • max-requests: 每個工作進(jìn)程請求書的最高上限
  • procname-prefix-spaced: 工作進(jìn)程的前綴名
  • wsgi-file: 指定加載WSGI文件

常用命令

上面介紹了相關(guān)常用的配置參數(shù),當(dāng)設(shè)置uWSGI參數(shù)后,需要啟動指定配置文件,以及有關(guān)暫停,重啟的動作。

uwsgi --ini uwsgi.ini   # 啟動uWSGI
uwsgi --stop uwsgi.pid  # 暫停uWSGI
uwsgi --reload uwsgi.pid    # 重啟uWSGI

服務(wù)監(jiān)控

uWSGI之一Stats服務(wù)器機制,它能將uWSGI狀態(tài)作為一個JSON對象導(dǎo)出一個socket中,只需要像我們前面配置uWSGI配置文件一樣,添加stats選項,跟著一個有效的socket地址接口。

當(dāng)你配置完畢后,就可以通過客戶端連接到指定的socket地址,將會獲得一個包含uWSGI內(nèi)部統(tǒng)計數(shù)據(jù)的JSON對象。

uwsgi --connect-and-read uwsgi.status

執(zhí)行完這個命令后,讀取的返回的結(jié)果是一個json字符串,字符串中包括每個線程的狀態(tài),整個應(yīng)用的負(fù)載,版本,監(jiān)聽隊列等詳細(xì)的信息。

uwsgitop查看實時狀態(tài)
uwsgitop是一個開源的實時監(jiān)控uWSGI服務(wù)器狀態(tài)的工具,安裝也十分簡單:

pip install uwsgitop

具體uwsgitop像一個top命令,監(jiān)聽?wèi)?yīng)用程序并且使用socket地址進(jìn)行調(diào)用,查看進(jìn)程運行狀態(tài),運行詳細(xì)信息:

uwsgitop uwsgi/uwsgi.status
uwsgi-2.0.19.1 - Sun Sep 20 15:58:48 2020 - req: 6 - RPS: 0 - lq: 0 - tx: 67.6K
node: mbb-48 - cwd: /data/Novel/novel_test - uid: 0 - gid: 0 - masterpid: 15109
 WID    %       PID     REQ     RPS     EXC     SIG     STATUS  AVG     RSS     VSZ     TX      ReSpwn  HC      RunT    LastSpwn
 1	100.0   15144   6	0	0	0	idle    15ms    0	0	67.6K   1	0	125.449 15:48:08
  :2    16.7    -	1	0	-	-	idle    -	-	-	-	-
  :3    16.7    -	1	0	-	-	idle    -	-	-	-	-
  :0    33.3    -	2	0	-	-	idle    -	-	-	-	-
  :1    33.3    -	2	0	-	-	idle    -	-	-	-	-

具體有興趣的同學(xué)可以參考github地址:

https://github.com/xrmx/uwsgitop

總結(jié)

關(guān)于uWSGI服務(wù)器相關(guān)使用就總結(jié)到這里,因為在平時工作中會經(jīng)常接觸到,但是由于沒有應(yīng)用到一些高并發(fā)的場景,對于uwsgi調(diào)優(yōu)方面沒有多少經(jīng)驗,等待以后遇到此類問題再繼續(xù)總結(jié)性能調(diào)優(yōu)方面的問題。同時有關(guān)Nginx方面的配置留到下一篇文章繼續(xù)講,未完待續(xù)。。。。。

以上就是淺談Python項目的服務(wù)器部署的詳細(xì)內(nèi)容,更多關(guān)于python 服務(wù)器部署的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 如何把python項目部署到linux服務(wù)器
  • Django+python服務(wù)器部署與環(huán)境部署教程詳解
  • python+selenium定時爬取丁香園的新型冠狀病毒數(shù)據(jù)并制作出類似的地圖(部署到云服務(wù)器)
  • 基于騰訊云服務(wù)器部署微信小程序后臺服務(wù)(Python+Django)
  • Python Web程序部署到Ubuntu服務(wù)器上的方法
  • Linux下將Python的Django項目部署到Apache服務(wù)器
  • 在服務(wù)器端實現(xiàn)無間斷部署Python應(yīng)用的教程
  • Python實現(xiàn)根據(jù)指定端口探測服務(wù)器/模塊部署的方法

標(biāo)簽:海南 安康 喀什 山西 山西 崇左 濟(jì)南 長沙

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談Python項目的服務(wù)器部署》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    色达县| 衢州市| 西乌| 九寨沟县| 信阳市| 宜兴市| 洛南县| 安龙县| 唐河县| 大丰市| 墨玉县| 衡南县| 敖汉旗| 京山县| 乐业县| 南江县| 宁乡县| 霍山县| 股票| 西宁市| 大同市| 互助| 扎兰屯市| 周口市| 余干县| 江山市| 南投市| 江孜县| 六安市| 红河县| 三都| 唐山市| 融水| 乡宁县| 建宁县| 房山区| 神池县| 南川市| 陇西县| 南阳市| 祁东县|