Buduję system rozproszony, który składa się z potencjalnie milionów klientów, którzy wszyscy muszą zachować otwarte (najlepiej HTTP) połączenie, aby czekać na polecenie z serwera (który działa gdzie indziej) . Obciążenie wiadomości/poleceń nie będzie bardzo wysokie, może jeden komunikat/s/1000 klientów, co oznacza, że będzie to 1000 ms/s przy 1 milionie klientów. => zasadniczo chodzi o równoczesne połączenia.push serwera dla milionów współbieżnych połączeń
Wymagania są również proste. Jeden sposób przesyłania wiadomości (serwer-> klient), tylko 1 klient na "kanał".
Jestem całkiem otwarty pod względem technologii (xmpp/websockets/comet/...). Używam Google App Engine jako serwera, ale ich "kanały" nie będą działać dla mnie niestety (zbyt niskie limity i żaden klient Java). XMPP był opcją, ale jest dość drogi. Do tej pory korzystałem z pobierania URL-a & pubnub, ale właśnie zaczęły one pobierać opłaty za połączenia (czas duży).
Więc:
Czy ktoś wie o usługi, które obecnie nie może zrobić to za mnie w przystępny sposób? Najczęściej znalazłem ograniczenie lub wysokie opłaty za połączenia.
Jakieś doświadczenie z wdrożeniem takiego serwera samodzielnie? Już to zrobiłem i działa całkiem nieźle (na podstawie Tomcat & NIO), ale nie miałem jeszcze czasu, aby skonfigurować środowisko testowe dużego obciążenia (częściowo dlatego, że jest to nadal rozwiązanie awaryjne, wolałbym bitowy serwer msg). Jakiekolwiek doświadczenie, ilu użytkowników dostajesz na GB? Jakieś twarde ograniczenia?
Moja architektura umożliwia również fragment serwery MSG, ale chciałbym, aby zmaksymalizować równoczesnych połączeń, ponieważ napowietrznych przetwarzania CPU MSG jest minimalne.
Ten jest trudniejszy do zaakceptowania. Czy rozważałeś protokół bezpołączeniowy, taki jak UDP? Będziesz musiał napisać własne protokoły potwierdzenia, ale wtedy nie będziesz musiał utrzymywać połączeń i nie będziesz musiał ponosić kosztów połączenia. Napisałem kilka bardzo rozproszonych serwerów rozproszonych, ale nie klientów. – Gray
FYI, mam zaimplementowałem go za pomocą netty (zobacz odpowiedź poniżej). – Daniel
Cool @Daniel. Muszę to sprawdzić. Słyszałem dobre rzeczy o Netty, ale nigdy go nie użyłem. – Gray