2011-08-13 3 views
1

높은 처리량으로 다수의 클라이언트 (동시 500K 이상)에 분산 된 Comet 기반 서버를 구축해야한다는 요구 사항이 있습니다. 나는 현재 Tornado를 사용하여 긴 폴링 요청 수가 많아 높은 효율을 낼 수 있는지 조사하고 있습니다.Distributed Tornado 기반 채팅 서버

내 관심사는 단일 Tornado 서버가 많은 수의 긴 폴링 클라이언트를 처리 할 수 ​​있는지 여부입니다. 실험으로 토네이도 채팅 데모 (https://github.com/facebook/tornado/tree/master/demos/chat)를 분산 환경으로 확장하고 싶습니다. 나는. 병렬로 실행되는 수많은 토네이도 채팅 서버를 가지고 있습니다. 각 서버는 변화하는 클라이언트 세트를 담당합니다.

나는 이러한 계획을 구현하는 것과 관련하여 귀하가 갖고있는 생각이나 관련 자료에 대한 참고 사항을 고맙게 생각합니다.

감사합니다.

답변

0

일반적으로 기본 채팅을 여러 토네이도 인스턴스에 분산 시키려면 분산 메시지 전달 메커니즘을 만들어야합니다. 가장 간단한 구현은 RabbitMQ (또는 경쟁자)와 같은 종류의 메시지 대기열을 사용하여 팬 아웃을 보내는 것입니다 모든 연결이 수신하는 동안 사용자가 무언가를 입력 할 때 메시지.

+0

이반,이 경우에 rabbitmq가 어떻게 유용할까요? – securecurve

+0

RabbitMQ는 하나의 토네이도 인스턴스 (chat.services.com:8001)가 제공하는 클라이언트의 메시지를 다른 토네이도 인스턴스 (chat.services.com:8002)가 서비스하는 다른 클라이언트에게 전달하는 것을 도와줍니다. 주요 도전 과제는 온라인, 오프라인, 유휴 여부와 같은 각 온라인 사용자 (상태)를 유지하는 것입니다. 예를 들어, Facebook은 유휴 전략 알고리즘을 개발했습니다. 사용자 활동을 1, 2, 5, 8, 11 초 동안 유휴 상태로 결정합니다. 네트워크로드를 크게 줄이고 뛰어난 처리량을 달성하는 데 도움이됩니다. –

0

내 초기 생각은 프론트 엔드에 Nginx 서버/리버스 프록시가 있고 뒤에서 토네이도가 여러 개있는 경우 프로세스마다 토네이도 인스턴스가 될 수 있으며 일부 벤치 마크 작업을 시도 할 수 있습니다. 시스템이 처리 할 수있는 여러 프로세스에서 실행중인 Tornado 인스턴스의 수를 확인하고 성능 저하를 확인한 후 다른 시스템에서 동일한 작업을 시작하십시오.

Nginx는 긴 폴링/토네이도 서버/인스턴스를 통해로드를 분산해야하는 모든 서버를 라운드 로빈 방식으로 사용합니다.

이 경우 rabbitmq가 어떻게 유용 할 지 잘 모르겠습니다.