2017-10-16 12 views
0

django-channels을 사용하여 HTTP2 & WebSocket을 내 응용 프로그램에 추가합니다. 채널을 확장하는 방법에 대한 많은 문서를 찾을 수 없었습니다. 아래는 동일한 기계에서 다른 포트에서 실행중인 daphne의 여러 인스턴스의로드 밸런스를 조정하는 내 nginx 구성입니다. 이것을 올바른 방법일까요? 그와 함께 로드 밸런서 뒤에 다중 인스턴스 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의 개별 인스턴스를 실행하고 있습니다 : 내가 처리 할 수 ​​ 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 

모든 HTTP 길 django은 일반적으로 그들을 처리하는 요청 . daphneworkers do는 모두 WebSocket 핸들입니다. 이 방법은 django-channels을 확장하는 실행 가능한 방법입니까, 아니면 더 잘할 수있는 방법이 있습니까?

답변

1

여기에 몇 가지가 있습니다. 시작하려면 여러 프로세스에서 서로 다른 유형의 요청을 실행하면 많은 이점을 얻지 못할 것이라고 생각합니다. 연결 해제 핸들러는 아마도 매우 가벼워 질 것입니다. Connect는 많은 일을하지 않을 것이고 수신은 대부분의 부하를 얻을 것입니다.

--threads 매개 변수를 사용하고 여러 스레드를 시작하여 돈을 벌 수 있습니다. 현재 설정은 각 유형의 핸들러에 대해 하나의 스레드 만 실행합니다.

runworker의 작동 원리는 채널 층 (예 : Redis)을 통해 Daphne과 통신한다는 것입니다. 모든 근로자가 대기열을 듣고 있습니다. 요청이 들어 오면 한 명의 작업자가 처리합니다. 해당 작업자가 요청을 처리하는 동안 다른 작업자는 후속 요청을 기다리고 처리합니다. 일단 응답을 보내면 대기열 청취로 돌아갑니다. --only-channels을 지정하지 않으면 각 프로세스가 요청을 처리하고 가능한 빨리 처리하며 아무도 대기하지 않습니다.

여러 프로세스와 --threads 매개 변수를 실행하여 스레드/작업자의 최상의 균형을 찾을 때까지 다릅니다. 무거운 채널을 위해 예약 된 직원을 배치하여 사이트를 파괴하지 않도록 할 수도 있습니다.

여러 개의 Daphne 인스턴스가 있으면 도움이됩니다. 그러나 그들이하는 일은 서버와 작업자간에 메시지를 보내는 것이므로 4 명을 실행하는 이점을 볼 수 없습니다.

+0

우리는 최소 50k 개방형 및 통신용 소켓을 위해 배치하고 있습니다. 따라서 트래픽이 많이 발생하는 채널을 청취하는 직원의 수를 늘릴 것으로 예상됩니다. 감사 :) –