動態規劃DP
阿新 • • 發佈:2020-08-08
中文文件 、淘寶網頁書籍、安裝https://www.cnblogs.com/fengff/p/8892590.html
// 預設是以後臺程序的方式啟動 sudo nginx // 如果是編譯安裝 // sudo /opt/soft/nginx/start/nginx // 檢視啟動程序id ps -ef|grep nginx // 和諧關閉 sudo nginx -s stop // nginx根據指定配置檔案啟動專案,一般先測試,測試通過在啟動部署 sudo nginx -t -c ***/nginx.conf // nginx啟動專案,此時只能訪問靜態資源(nginx充當HTTP伺服器), // 要想訪問動態資源還需配置uwsgi(nginx充當代理伺服器) sudo nginx-c ***/nginx.config
// nginx配置檔案nginx.conf,放在專案根目錄下 # nginx使用者名稱 user www-data; # nginx工作的程序數量 worker_processes auto; # nginx執行時儲存自己pid的檔案。nginx是通過將自己的pid記錄下來的方式,然後當給nginx發訊號時, # 它會去nginx.pid檔案內找啟動的程序號,然後給當前nginx啟動的程序號發訊號 pid /run/nginx.pid; # 工作模式 events { # 最大連結數 worker_connections 768;# multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## # 訪問日誌和錯誤日誌,一般越來越大的檔案會放在var目錄下 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## # 開啟gzip gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; server { # nginx代理服務啟動的ip地址以及埠號(供客戶端訪問的ip埠),default_server預設是localhost listen 80 default_server; listen [::]:80 default_server; # 專案的跟路徑 root /home/liuwei/PycharmProjects/DjangoProDemo/DjangoDemo; # Add index.php to the list if you are using PHP # index index.html index.htm index.nginx-debian.html; server_name _; # 匹配靜態目錄路由 location /static { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. # try_files $uri $uri/ =404; alias /home/liuwei/PycharmProjects/DjangoProDemo/DjangoDemo/static; } # 匹配除了靜態檔案的路由[動態資源需要使用反向解析,指定對接伺服器,和python最和掐的nginx提供了uwsgi] # / 表示匹配所有 location / { # 載入uwsgi的一些引數 include /etc/nginx/uwsgi_params; # nginx將請求轉發給監聽如下地址的伺服器處理,然後nginx將其他伺服器處理的結果在交給客戶端 uwsgi_pass 0.0.0.0:8888; } } }
# nginx對接uwsgi # 安裝uwsgi sudo apt-get install python3-dev // 如果不安裝這個直接安裝uwsgi會報錯Command "/home/liuwei/PycharmProjects/DjangoProDemo/venv/bin/python pip install uWSGI # uwsui啟動專案(可以訪問靜態資源,但是不能訪問靜態資源) uwsgi --ini ****/uwsgi.ini # 關閉專案 uwsgi --stop uwsgi.pid # 檢視uwsig 啟動資訊 ps 17331
# 使用預設方式安裝完系統之後,不要急著裝conda和配置pip映象源,裝了conda就很難在裝上python3-dev # 先去更新以下 sudo apt-get update sudo apt-get upgrade sudo apt-get install python3-dev # 先去裝python3-dev,這就沒報錯說安不上python3-dev,少依賴啥的錯誤了。 之前在安裝uwsgi報錯: Building wheel for uwsgi (setup.py) ... error ERROR: Command errored out with exit status 1: command: /home/liuwei/mycode/py/envs/structappenv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-x_v8_6dt/uwsgi/setup.py'"'"'; __file__='"'"'/tmp/pip-install-x_v8_6dt/uwsgi/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-9flg0dwl --python-tag cp36 cwd: /tmp/pip-install-x_v8_6dt/uwsgi/ Complete output (163 lines): /home/liuwei/.conda/envs/py366/lib/python3.6/distutils/dist.py:261: UserWarning: Unknown distribution option: 'descriptions' warnings.warn(msg) running bdist_wheel # 自己後來又研究了一下,在虛擬環境virtualenvwrapper下: # 不配置pip阿里映象源,直接在虛擬環境裡安裝uwsgi,能成功!(會使用之前安裝的python3-dev去編譯?) # 配置pip阿里映象源,安裝uwsgi他會自動下載再次編譯,就會報上面的錯誤。(不會使用之前安裝的python3-dev去編譯?) # 我在想,如果我不使用conda或許就不會出現這個問題。
// uwsgi配置檔案uwsgi.ini,放在專案根目錄下 [uwsgi] # 如果是使用Nginx連線使用: socket = 0.0.0.0:8888 # 如果是直接作為web伺服器使用: # http=127.0.0.1:8080 # 配置工程目錄 chdir=/home/liuwei/PycharmProjects/DjangoProDemo/DjangoDemo # 配置專案的wsgi目錄,相對於工程目錄。相對路徑相對於chdir目錄 wsgi-file=DjangoDemo/wsgi.py #配置程序、執行緒資訊,這取決於伺服器的配置 processes=2 threds=2 # 是否開啟多執行緒模式 enable-threads=True # 是否開啟主從結構 master=True # 程序id儲存檔案,相對於當前檔案路徑,啟動時會自動建立 pidfile=uwsgi.pid # 日誌檔案 daemonize=uwsgi.log
// nginx 對接uwsgi location / { include /etc/nginx/uwsgi_params; uwsgi_pass 0.0.0.0:8888; } // nginx也可以直接對接runserver,作為反向代理 location / { # runserver啟動埠http://127.0.0.1:9000 proxy_pass http://127.0.0.1:9000; }
Nginx伺服器單臺最多處理50000併發。負載均衡是有一臺專門的伺服器作請求分發【當然還可以繼續巢狀,一個主負載,多個從負載】,請求分發給多個業務邏輯伺服器去處理業務。
- 負載均衡模組,通過一個簡單的排程演算法來實現客戶ip到後端伺服器的負載均衡 - 配置 upstream myproject { ip_hash; server 192.1.10.113:8000 weight=5; server 192.1.10.117:8000 down; server 192.110.1.118:8000 weight=2; server 192.45.178.125:8000 backup; # fair; } - 負載均衡演算法 weight 負載權重,權重越高,分的請求越多 down 當前server不參與負載均衡 backup 其他機器全down掉或滿載使用此服務 ip_hash 按每個請求的hash結果來分配,session不會亂 fair 按後端響應時間來分 (第三方的)
http { upstream myproject { server 127.0.0.1:8000 weight=3; server 127.0.0.1:8001; server 127.0.0.1:8002; server 127.0.0.1:8003; } server { listen 80; server_name www.domain.com; location / { proxy_pass http://myproject; } } }
- 安裝ApacheBench sudo apt install apache2-utils - 使用ApacheBeanch - 檢視使用文件 ab - 訪問網站 ab http://www.baidu.com/