Ile zasobów systemowych zostanie zatrzymanych, aby utrzymać otwarty 1 000 000 websocket? [Zamknięte]


122

Websocket jest dobry, ale czy byłby w stanie obsłużyć 1 000 000 jednoczesnych połączeń?
Ile zasobów systemowych zostanie zatrzymanych, aby utrzymać otwarty 1 000 000 websocket?

Odpowiedzi:


65

Zaktualizowana odpowiedź

Krótka odpowiedź : tak, ale jest droga.

Długa odpowiedź :

To pytanie nie jest unikalne dla WebSockets, ponieważ WebSockets są zasadniczo długowiecznymi gniazdami TCP z uzgadnianiem podobnym do HTTP i minimalnym ramkami dla wiadomości.

Prawdziwe pytanie brzmi: czy pojedynczy serwer mógłby obsłużyć 1 000 000 równoczesnych połączeń przez gniazdo i jakie zasoby serwera by to wymagało? Odpowiedź komplikuje kilka czynników, ale dla systemu o odpowiedniej wielkości (dużo procesora, pamięci RAM i szybka sieć) oraz ze dostrojonym systemem serwera i zoptymalizowanym oprogramowaniem serwera możliwe jest 1.000.000 jednoczesnych połączeń przez gniazdo.

Liczba połączeń nie jest głównym problemem (jest to głównie kwestia dostrojenia jądra i wystarczającej ilości pamięci), jest to przetwarzanie i wysyłanie / odbieranie danych do / z każdego z tych połączeń. Jeśli połączenia przychodzące są rozłożone na długi okres i są przeważnie bezczynne lub rzadko wysyłają małe fragmenty danych statycznych, prawdopodobnie możesz uzyskać znacznie więcej niż nawet 1000000 jednoczesnych połączeń. Jednak nawet w takich warunkach (powolne połączenia, które w większości są bezczynne) nadal będziesz mieć problemy z sieciami, systemami serwerów i bibliotekami serwerów, które nie są skonfigurowane i nie są zaprojektowane do obsługi dużej liczby połączeń.

Zobacz odpowiedź Alessandro Alinone na temat przybliżonego wykorzystania zasobów dla 500 000 połączeń.

Oto kilka starszych, ale wciąż odpowiednich zasobów, w których można przeczytać, jak skonfigurować serwer i napisać oprogramowanie serwera do obsługi dużej liczby połączeń:


1
W jednej maszynie JVM możliwych jest około 12 milionów połączeń gniazd. Zobacz, jak to zrobili mrotaru.wordpress.com/2013/10/10/…
Jacques Koorts

@JacquesKoorts thx
BG BRUNO

159

We współczesnych systemach obsługa 1 miliona jednoczesnych połączeń TCP nie stanowi problemu.

Mogę to potwierdzić na podstawie naszych własnych testów (pełne ujawnienie: jestem CTO w Lightstreamer).

Kilkakrotnie musieliśmy zademonstrować niektórym naszym klientom, że na jednym urządzeniu można osiągnąć 1 milion połączeń (niekoniecznie na super-potwornej maszynie). Ale pozwólcie mi podsumować konfigurację, w której testowaliśmy 500 tys. Jednoczesnych połączeń, ponieważ jest to znacznie nowszy test przeprowadzony na Amazon EC2.

Zainstalowaliśmy Lightstreamer Server (który jest między innymi serwerem WebSocket) na instancji m2.4xlarge. Oznacza to 8 rdzeni i 68,4 GiB pamięci.

Uruchomiliśmy 11 maszyn klienckich, aby utworzyć 500 000 jednoczesnych połączeń z serwerem Lightstreamer. Test został skonfigurowany tak, aby łączna przepustowość wychodząca z serwera wynosiła 90 000 aktualizacji / s, co skutkowało szczytową przepustowością wychodzącą 450 Mbit / s.

Serwer nigdy nie używał więcej niż 13 GiB pamięci RAM, a procesor był stabilny na poziomie około 60%.

Mając co najmniej 30 GiB pamięci RAM, możesz obsłużyć 1 milion równoległych gniazd. Wymagany procesor zależy od wymaganej przepustowości danych.


7
Zakładam, że to był jakiś smak Linuksa. Czy mógłbyś podzielić się dodatkowymi informacjami o tym, jak dostrojono jądro? maksymalne deskryptory plików / rozmiary okien tcp itp.?
quixver

14
To był waniliowy Amazon Linux. Zwiększono maksymalną liczbę deskryptorów plików. Bufor wysyłania TCP został zredukowany do 1600 bajtów (domyślnie wykonywany przez Lightstreamer, chociaż można go dostroić ręcznie). MSS był domyślny.
Alessandro Alinone

Czy ten program jest całkowicie darmowy, czy też wymaga jakiejś opłaty, aby z niego korzystać?
Avtandil Kavrelishvili

@AvtandilKavrelishvili: Dostępna jest zarówno wersja bezpłatna, jak i płatna.
Alessandro Alinone

Czy byłoby łatwiej na serwerze, gdybym zamiast websocketów użył zwykłego odpytywania?
Michel Feinstein,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.