2014-11-28 2 views
11

채팅 서버를 구현하려고합니다. 그리고 그것을 확장하기를 원합니다. 이것은 큰 질문처럼 보입니다. 그래서 나는 해답이 방향성 포인터가 될 것이라고 생각합니다. 일종의 탐색 적입니다.확장 가능한 채팅 서버를 구현하는 전략

최종 사용자 클라이언트는 웹 또는 전화 클라이언트입니다. 나는 Socket.IO와 같은 일종의 websocket 구현이 좋다고 생각한다.

서버 측에서 Node.js.를 사용하고 싶습니다. 나는 사용자의 수가 제한되지 않도록 아키텍처를 확장 가능하게하고 싶다. (물론, 대히트 내에서의 대히트 가능성은 기대되지 않는다. 그렇다면 더 똑똑하고 경험있는 사람들이 작업 할 기회가 합리적이다. 현재 나만 코딩하는 대신) chatroom 당 사용자 수는 제한이 없거나 고정 된 큰 수입니다. 그리고 이것은 Node에서 작성된 여러 서버를 사용하여 수평으로 확장해야한다는 것을 의미합니다.

로드 밸런서 중 일부 (예를 들어 단일 지점에서 장애가 발생하지는 않았지만이를 달성하거나 AWS로 옮기는 것이 좋음)가 최종 클라이언트의 SocketIO 연결을 채팅 서버. 서로 다른 서버에 연결하는 사용자가 같은 방에있을 수 있으므로 메시지를 다른 서버로 보내야합니다.

어떻게 이런 식으로 구현할 수 있습니까? 잘만되면 너무 복잡하지 않아야합니다.

질문 : (1) 사용자가 모든 서버를 통해 로그온 할 수 있기 때문에 모든 서버가 모든 메시지를 처리해야하는 경우이 배율이 적용됩니까? (2) 서버간에 대화하기 위해 어떤 종류의 메시지 큐가 필요합니까? Rabbitmq의 Pub-sub가이 용도로 사용할 수 있습니까? 아니면 zeromq 경우, 내가 어떻게 펍 서브와 함께 규모거야? Zeromq 가이드에는 REQ/REP 유형의 응용 프로그램이있는 둘 이상의 서버로 확장하는 방법에 대한 설명이 있습니다. 하지만 Pub Sub가 아닙니다. (3) 아니면 XMPP로 시작해야합니까?

나는 가능한 한 쉽게 작동시키기를 바라고 있습니다.

답변

8

Socket.io 사이트에 대한 설명이 있습니다.

그것은 HTTP로드 밸런서, 메시지 백엔드로 Node.js를의 (지속적인 세션 포함) 클러스터링 및 레디 스로의 Nginx를 사용하여 제안에서보세요.

여러분의 목표는 주어진 모듈과 구성 메커니즘만을 사용하여 코딩을 거의 또는 전혀하지 않고 달성 할 수 있어야한다고 생각합니다.

+0

그래서 redis는이 경우 MQ와 같습니다. – huggie

+0

예, PUB/SUB를 지원합니다 : http://redis.io/topics/pubsub – Tobi

+0

MongoDB에 채팅 메시지를 띄우고 싶다면 어떻게해야합니까? 모든 것을 구독하고 그냥 MongoDB에 로그인하는 하나의 Node.js 서버가 있다면 확장 성이없는 것 같습니다. 하지만 둘이 있다면 두 번 녹음 할거야 ... 두 번? – huggie

관련 문제