はじめに1.1 gunicorn
1、Gunicorn
1. Gunicornが直接HTTPサービスを提供し、PythonのWSGIサーバを使用して実装、およびwoker、gevent、eventletこれらの支持体上でのさまざまなオプションを提供しています
同じ時間でのマルチ最大化ワーカー2. CPUは、あなたはまた、より有利なネットワークIO集約型のサービスの同時サポートを提供するためにコルーチンを使用することができます。
説明:
1)Gunicornも容易にそのような労働者のクラスを書き換えるドージェとして、TCPベースのサービスに転換しています。
2)不均一な負荷を避けるために、長いサービス、最高のオープンreuse_port、ワーカープロセスのために接続した場合。
2、uWSGIとGunicorn
Gunicorn異なる1は、uWSGIは、ワーカープロセスは、システムインタフェースを実現するためにC言語を使用して、そのソケットは、作成開始FD、Cで書かれています
プロセスワーカー処理ループ2.は、HTTP要求が生成Pythonが環境オブジェクトCインタフェースを使用して解析しました
パラメータが露出WSGIアプリケーション機能を詰め3.次に、このオブジェクトを呼び出します。
4.そして、Cプログラムでこのすべてが、Pythonの仮想マシンのアプリケーションを呼び出すための要求に対処します。
5.完全にC言語を使用してのメリットを実現パフォーマンスが良くなるです。
Gunicornと3、uWSGIの性能比較
1)説明
ABテストのためのツールを試験応力は、売却の静的ファイルnginxのフロントは、
両方とも2process + 2thread、圧力100〜1000を使用しています。
2)試験結果
参考ブログ:https://jinzhao.me/archives/470
;貧しい人々にはほとんどかかり1. Aの合計は、この差は何も証明しない
2.両方のすべての要求を完了した、2000年の2つの方法で崩壊するために選ばれた1000年についてはこちらを備え、
uwsgiは勝つ3.平均時間ここでの違いは明白ではないですが、また、ショーはuwsgiの全体的なパフォーマンスが徹底的行うこと;
4.接続時間は、両方の1000年に大幅に苦労しているが、uwsgiは、より良い実行、私は、独自のプロトコルでも関係を持って使用するC uwsgiに加えて考えます;
最後に5.、そして最も重要なのは、有意に優れた高度同時、uwsgiパフォーマンスで、
6 gunicornの手は、80%以下が、その効果の通常の流れで、より良い範囲が重要であることは興味深い
7 100msのかなり印象的な、私はこれが私達がすべてそれにgunicorn主な理由だと思います。
1.2ジャンゴ+ Gunicorn + nginxの生産の展開
図1に示すように、環境のpython3のCentOSのに装着されている7
#1、ソースヤムヤム更新 更新YUM #2、Pythonの3.7インストールまたはインストールが必要後はPIP3パッケージ依存しない yumをインストールZLIB-develのBZIP2-develの OpenSSLの-develののncurses-develのSQLiteの-develのreadlineの-develのTK-develのlibffi- メイクのgccのdevel #3、必要なバージョンをダウンロードするための公式ウェブサイトは、ここでの3.7.0バージョンです wgetのhttps://www.python.org/ftp/3.7.0/Python-3.7.0.tgz
#1、ソースヤムヤム更新 更新YUM #2、Pythonの3.7インストールまたはインストールが必要後はPIP3パッケージ依存しない yumをインストールZLIB-develのBZIP2-develの OpenSSLの-develののncurses-develのSQLiteの-develのreadlineの-develのTK-develのlibffi- develのメイクgccの #3、必要なバージョンをダウンロードするための公式ウェブサイトは、ここでの3.7.0バージョンである wgetのhttps://www.python.org/ftp/3.7.0/Python-3.7 .0.tgz 2は、Pythonのインストール #1、抽出 のPython-3.7 -xvfタール.0.tgzを #2、編集の構成を CD-のPython 3.7 0.0 。のpython3のに/設定--prefix =は/ usr / local / #コンパイルパス構成(本明細書で命名は、コンパイルと--prefixフォルダにインストールされている) は./configure --enable-最適化は、 #コードを実行した後、コンパイラがインストールされます/ usr / local / binに/、ソフトリンクや環境変数を追加していない メイク&& make installをします LNのpython3に-sを/ usr / local / / binに/へのpython3は/ usr / binに/のpython3のに #柔軟な接続を追加 LNのpython3に-sを/ usr / local / / binに/ PIP3は/ usr / binに/ PIP3 #3、は/ usr / local /のpython3 / binには、PATHに追加 [TestProj @ルートのLinuxノード1] #のVimは/ etc / profileの #は、ファイルの末尾に追加された エクスポートPATH = $ PATH:のpython3 /には/ usr / local / binに [Linuxの@ルートは TestProj -node1] #ソースは/ etc / profileを#変更した後、構成情報に環境変数を作成する必要が、コマンドを実行します
2、Djangoプロジェクトを初期化します
[ルート@のlinux-ノード1 /] #のPIP3インストールジャンゴ== 2.0.4 [ルート@のlinux-ノード1 /] #のMKDIR /コード/ [ルート@のlinux-ノード1 /] #のCD /コード/ [ルート@のlinux-node1のtestProj ] #ジャンゴ-adminのstartprojectのmmcsite のlinux-node1のtestProj] @ [ルート#のCD /コード/ mmcsite [linuxの-node1の@ルートtestProj] #のpython3 manage.pyのrunserver 0.0.0.0:8000 #页面中访问ます。http://192.168 .56.11:8000 /
3、インストールしてサービスを開始Gunicorn uWSGIを使用
[Linuxベースのノード1 @ mmcsiteルート] # PIP3はgunicorn#Gunicornをインストールするインストール [Linuxのルート・ノード1 mmcsite @] #ラインをテストするgunicorn mmcsite.wsgi 0.0.0.0:8000 -w -b#コマンドを3 〜C #はプロファイルを指定します(PYファイル) -b #指定されたソケットにバインド -D #Gunicornプロセスを実行しているデーモンの形では、実際には、背景にこのサービスが実行する -w #のプロセスに仕事の数 -k #の作業プロセスの種類を、 。同期(デフォルト)、eventlet、gevent、またはトルネード、GThread、gaiohttpの #の参照:HTTP://docs.gunicorn.org/en/latest/settings.html [Linuxの-node1のmmcsite @ルート] # PS -ef | grepを#ビューgunicornプロセスがすでに実行されているgunicorn
[ルート@のlinux-node1のmmcsite] # vimの/code/mmcsite/gunicorn_config.py#Gunicorn配置文档 #gunicorn_config.py インポートログ 輸入logging.handlersで から logging.handlersでは、インポートWatchedFileHandler インポートのOS インポートマルチプロセッシングを バインド = ' 0.0.0.0:8000 ' #バインディングIPアドレスとポート = 512のバックログ #を聞くキュー のchdir = ' /コード/ mmcsite ' #の作業ディレクトリ・オブジェクトへのスイッチへのgunicorn タイムアウト= 30 #タイムアウト worker_class = ' GEVENT ' #同期モードを使用することができる、geventモードを使用して、デフォルトの同期モードは、 労働 = multiprocessing.cpu_count()。1つの* 2 + #プロセスの数 = 2スレッド #プロセスオープンあたりのスレッドの指定された数 のLogLevel = 「情報」 #ログレベルは、エラーログのレベルを意味するログレベルは、アクセスログのレベルが提供されていない access_log_format = ' %(T)S%(P)S%(H)は%(S) "%(R&LT)はS" S %S(L)S%(B)%S(F)S "" %(A)S " ' ACCESSLOG = " /code/mmcsite/gunicorn_access.log " #のアクセス・ログ・ファイルの エラーログ= " /コード/ mmcsite / gunicorn_error .logに「 #のエラーログファイル
[ルート@ Linuxの-node1のmmcsite] # gunicorn mmcsite.wsgi -D -c gunicorn_config.py バックグラウンドでGunicorn実行を使用して#プロジェクト [ルート@をLinuxの-node1のmmcsite] # PS -ef | grepをgunicorn #ビューGunicornプロセスがすでに実行されてい ます。http: //192.168.56.11:8000/
4、インストール構成nginxの
'' ' 設定nginxのYUMソース' '' [ルート@ Linuxの -node1 /] Vimの/etc/yum.repos.d/ nginx.repo `` ` [nginxの】 名前 = nginxのレポ #のような独自のオペレーティングシステムに応じて変更され、次のラインのCentOS、:OS / rehel #6は、Linuxシステムのバージョンである、あなたはのURLを通じて正しいパスを表示することができ //nginx.org/packages/centos:BASEURL = HTTP / 7 / $ basearch / gpgcheck = 0 有効 = 1 `` ` '' ' 2. nginxのをインストールしてください' '' [Linuxの@ルートのyum -Yインストールnginxの-node1 /]
[Linuxの-node1の@ルートをmmcsite] #Vimの/etc/nginx/conf.d/dj_gunicorn.conf #設定nginxのプロキシGunicorn サーバー{ 聞く 8005 ; ルート / WWW / デモ。 SERVER_NAME 127.0.0.1 ; 位置 / { proxy_set_header X -Real- IP $ REMOTE_ADDR。 proxy_set_header X -Forwarded- のために$ proxy_add_x_forwarded_for。 proxy_set_headerホスト$ HTTP_HOST。 HTTP proxy_pass: // localhostを:8000 /; #バインドされたポート番号gunicorn } #設定静的の静的ファイル: LOCATION〜^ \ /静的\ /.* $ { ルート / WWW / デモ。 } } [ルート@ Linuxの -node1 mmcsite] # gunicorn mmcsite.wsgi -D -c gunicorn_config.py バックグラウンドでGunicorn実行を使用して#プロジェクト [ルート@をLinuxの-node1のmmcsite] # PS -ef | grepをgunicorn #ビューGunicornプロセスがすでに実行されてい ます。http: //192.168.56.11:8005/