Chciałbym zaimplementować jakiś serwer czatu. I chcę go skalować. Wydaje się, że to wielkie pytanie, więc myślę, że spodziewam się, że odpowiedzi będą kierunkowymi wskazówkami, rodzaj eksploracji.Strategia wdrożenia skalowalnego serwera czatowego
Klientami końcowymi są klient sieci lub telefon. Myślę, że jakaś implementacja websocket, taka jak Socket.IO, jest fajna.
Po stronie serwera chcę użyć Node.js. Chcę, aby architektura była skalowalna, aby liczba użytkowników nie była ograniczona (dobrze, w granicach rozsądku, szansa na duże trafienie nie jest oczekiwana, a jeśli tak, to szansa na to, aby mądrzejsi, doświadczeni ludzie mogli na niej pracować, jest rozsądna zamiast obecnie tylko kodowania) liczba użytkowników na czacie ma nadzieję, że nie jest ograniczona, lub może niektóre stałe dużą liczbę. Oznacza to, że muszę skalować w poziomie, używając kilku serwerów napisanych w węźle.
Załóżmy, że niektóre load balancer (i mam nadzieję, że w przyszłości nie będzie ani jednego punktu awarii, ale nie wiem, jak to osiągnąć, lub może po prostu przenieść się do AWS) wysyłają połączenia SocketIO od klientów końcowych do serwery czatu. Połączenie różnych użytkowników z różnymi serwerami może znajdować się w tym samym pomieszczeniu, więc wiadomości muszą być wysyłane do innych serwerów.
Jak mógłbym zrealizować coś takiego? Mam nadzieję, że nie jest zbyt skomplikowany.
Pytania: (1) Jeśli wszystkie serwery muszą obsługiwać wszystkie wiadomości, ponieważ użytkownicy mogą być zalogowani przez jeden z serwerów, czy ta skala? (2) Czy potrzebuję jakiejś kolejki wiadomości, aby serwery mogły między nimi rozmawiać? Czy Pub-sub z Rabbitmq nadaje się do tego? Lub, jeśli zera, w jaki sposób skalowałbym się z subem pub? Przewodnik Zeromq zawiera wyjaśnienia dotyczące skalowania do więcej niż jednego serwera z aplikacjami typu REQ/REP. Ale nie Pub Sub. (3) Czy powinienem zacząć od XMPP?
Mam nadzieję, że sprawię, że będzie to tak łatwe, jak to tylko możliwe.
Tak, redis jest jak MQ w tym przypadku. – huggie
Tak, obsługuje on PUB/SUB: http://redis.io/topics/pubsub – Tobi
Czy masz jakiś pomysł, jeśli chcę, aby wiadomości na czacie były przesyłane do MongoDB, w jaki sposób mogę to osiągnąć? Jeśli mam jeden serwer Node.js, który subskrybuje wszystko i po prostu loguje się do MongoDB, to nie wydaje się skalowalny. Ale jeśli mam dwa, nagrałbym to ... dwa razy? – huggie