2017-10-16 5 views
0

django-channels私のアプリケーションにはHTTP2 & WebSocketを追加しています。私は、チャンネルをどのようにスケールするかについて多くの文書を見つけることができませんでした。以下は私のnginx構成で、同じマシン上で異なるポート上で実行されているdaphneの複数のインスタンスの負荷を分散します。これは正しい方法ですか?それとともにロードバランサの背後にあるdaphneの複数のインスタンスを実行しています:django-channels

upstream socket { 
    least_conn; 
    server 127.0.0.1:9000; 
    server 127.0.0.1:9001; 
    server 127.0.0.1:9002; 
    server 127.0.0.1:9003; 
} 

server { 
    listen 80; 
    server_name 127.0.0.1; 

    location = /favicon.ico { access_log off; log_not_found off; } 

    location /static/ { 
     root /home/niscp/home-screen; 
    } 

    location /nicons/ { 
     root /home/niscp/home-screen; 
    } 

    location/{ 
     include uwsgi_params; 
     uwsgi_pass unix:/home/niscp/home-screen/home-screen.sock; 
    } 

    location /ws/ { 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_pass http://socket; 
    } 
} 

、私は次のように個々のチャンネルを聞くworkersの個々のインスタンス実行している:私はすべてのHTTPを処理するためにuwsgiを持っている

python manage.py runworker --only-channels=websocket.connect 
python manage.py runworker --only-channels=websocket.receive 
python manage.py runworker --only-channels=websocket.disconnect 

ことdjangoは通常、それらを処理する方法を要求。 daphneworkersはすべてハンドルWebSocketです。 これはスケール可能な方法ですか?django-channels、またはもっと良い方法がありますか?

答えて

1

ここにはいくつかのものがあります。まず、さまざまなプロセスで異なるタイプのリクエストを実行することで、多くの利益を得ることはないと思います。あなたの切断ハンドラはおそらく非常に軽いものになるでしょう - クリーンアップ以外にはあまり効果がありません。 Connectはどちらもあまり重大ではないかもしれません。

あなたは、--threadsパラメータを使用して複数のスレッドを開始しています。現在のセットアップでは、ハンドラの種類ごとに1つのスレッドしか実行されません。

runworkerの仕組みは、あなたのチャンネル層(Redisから)でDaphneと通信することです。すべてのワーカーが待ち行列を聞いています。リクエストが来たら、1人のワーカーがそれを処理します。そのワーカーがリクエストを処理している間、他のワーカーは後続のリクエストを待って処理します。彼らは彼らの応答を送信した後、待ち行列を聞くことに戻ります。 --only-channelsが指定されていない場合は、各プロセスが要求を引き出し、可能な限り速やかに処理し、待機することはありません。

複数のプロセスと--threadsパラメータを実行することによって、スレッド/ワーカーのバランスを最大限に引き出すことができます。また、大量のチャンネル用に予約された従業員を雇って、サイトを破壊しないようにすることもできます。

複数のDaphneインスタンスを持つと役立ちます。しかし、サーバーとワーカーの間でメッセージを送信するだけなので、4つのサーバーを実行する利点はありません。

+0

私たちは少なくとも50kオープンして通信するソケットのために展開しています。だから、私たちは、より多くのトラフィックが発生しやすいチャネルを聞いている労働者の数を増やすと思います。ありがとう:) –

関連する問題