flask
gunicorn 部署flask專案
分布式更多的乙個概念,是為了解決單個物理伺服器容量和效能瓶頸問題而採用的優化手段。
該領域需要解決的問題在不同的技術層面上,又包括:分布式檔案系統、分布式快取、分布式資料庫、分布式計算等,一些名詞hadoop、zookeeper、mq等都跟分布式有關。
從理念上講,分布式的實現有兩種形式:
高併發可以通過分布式技術去解決,將併發流量分到不同的物理伺服器上。
但除此之外,還可以有很多其他優化手段:比如使用快取系統,將所有的嗎,靜態內容放到cdna等;還可以使用多執行緒技術將一台伺服器的伺服器能量最大化。
在這個『雲』的時代,提高分布式系統併發能力的方式,方**上主要有兩種:垂直擴充套件(scale up)與水平擴充套件(scale out)。
水平擴充套件,只要增加伺服器數量,就能線性擴充系統效能。虛擬化技術的出現,讓水平擴充套件變得輕鬆且簡單。現在的雲主機幾乎是虛擬機器,而不是物理主機。這樣的話,線性擴充也是分分鐘的事,前提是有足夠的物理主機支撐。
高併發的三個經典問題:
多執行緒是指從軟體或者硬體上實現多個執行緒併發執行的技術,它更多的是解決cpu排程多個程序的問題,從而讓這些程序看上去是同時執行(實際是交替執行的)。
在這幾個概念中,多執行緒解決的問題是最明確的,手段也是比較單一的,基本上遇到的最大問題就是執行緒安全。
使用flask自帶的伺服器,可以完成web服務的啟動。在生產環境中flask自帶的伺服器,無法滿足效能需求,需要採用gunicorn做wsgi容器,來部署flask程式。gunicorn(綠色獨角獸)是乙個python wsgi的http伺服器。從ruby的獨角獸(unicorn)專案移植。該gunicorn伺服器與各種web框架相容,實現非常簡單,輕量級的資源消耗。
wsgi(web server gateway inte***ce)web伺服器閘道器介面,是一種規範,它是web伺服器和web應用程式之間的介面。它的作用就像是橋梁,連線在web伺服器和web應用框架之間。
gunicorn是基於pre-fork模型的,有乙個中心管理程序(master process)用來管理worker程序集合。master從不知道任何關於客戶端的資訊。所有的請求和響應處理都是由worker程序來處理的。
主程式是乙個簡單的迴圈,監聽各種訊號以及相應的響應程序。master管理著正在執行的worker集合,通過監聽各種訊號比如ttin,ttou和chld。ttin和ttou響應的增加和減少worker的數目。chld訊號表明乙個子程序已經結束了,在這種情況下master會自動的重啟失敗的worker。
gunicorn實現了乙個unix的預分發web的服務端。
為了提高使用gunicorn時的效能,需理解3種併發方式。
pip3 install gunicorn --user
檢視程式是否執行起來,如果執行起來會有兩個程序
fuser -v -n tcp 埠號
結束程序
kill -
9 程序號
# coding=utf-8
# /usr/bin/env python
"""author: buty
date: 2019/9/17 下午1:36
description: gunicorn config
"""import gevent.monkey
gevent.monkey.patch_all()
import multiprocessing
#server socket
bind = '0.0.0.0:4000'
#worker
# workers = multiprocessing.cpu_count() * 2 + 1
workers = 4
threads = 1
# worker_class = 'gunicorn.workers.ggevent.geventworker'
# worker_class = 'gthread'#gevent
worker_class = 'sync'
debug = true
# daemon = true
worker_connections = 100
#log
pidfile = 'log/gunicorn.pid'
accesslog = 'log/gunicorn_access.log'
# errorlog = 'log/gunicorn_error.log'
loglevel = 'debug'
access_log_format = '%(h)s %(l)s %(u)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
# 新增配置檔案後的啟動方式
pstree -ap|grep gunicorn
最小的一級是worker程序,它們的上一級是gunicorn程序。使用kill -hup [gunicorn 程序id]
可以殺掉程序。如果該程序還存在上一級程序,使用kill -9 [程序id]
將其徹底關閉。
報告總體分為dashboard和charts兩部分
dashboard
request summary:請求的通過率(ok)與失敗率(ko),百分比顯示。
statistics:資料分析,基本將summary report和aggregate report的結果合併。
errors: 錯誤情況,依據不同的錯誤型別,將所有錯誤結果展示。
top 5 errors by sampler:top5錯誤資訊取樣。
chart分為三大模組:時間維度資訊(over time)、吞吐量(throughput)、響應時間(response times)。
多執行緒學習筆記 執行緒
thread類 常用屬性 currentthread 獲取當前正在執行的執行緒 isalive 指示當前執行緒的執行狀態 isbackground 指示是否為後台執行緒 isthreadpoolthread 指示是否屬於託管執行緒池 managedthreadid 獲取執行緒識別符號 name 獲取...
多執行緒學習筆記
多執行緒的相關概念 什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的...
多執行緒學習筆記
多執行緒是實現多工的一種方式,多個程序多個執行緒。建立執行緒 1.繼承thread類 子類覆蓋父類中的run方法,將執行緒執行的 存放在run中。2.建立子類物件的同時執行緒也被建立。3.通過呼叫start方法開啟執行緒。執行緒的各種狀態 1.建立狀態 在程式中用構造方法建立了乙個執行緒物件後,新的...