2008-09-16 14 views
8

Podczas pisania niestandardowego serwera, jakie są najlepsze praktyki lub techniki ustalania maksymalnej liczby użytkowników, którzy mogą łączyć się z serwerem w danym momencie?Ile połączeń sieciowych może obsługiwać komputer?

Zakładam, że wszystkie możliwości sprzętu komputerowego, pojemności sieci i protokołu serwera będą ważnymi czynnikami.

Czy uważasz, że dobrą praktyką jest ograniczenie liczby połączeń sieciowych do określonej maksymalnej liczby użytkowników? A może serwer nie powinien ograniczać liczby połączeń sieciowych i pozwalać na obniżenie wydajności, dopóki czas reakcji nie będzie bardzo wysoki?

Odpowiedz

7

Dan Kegel ułożyła podsumowanie technik do obsługi dużych ilości połączeń sieciowych z jednego serwera, tutaj: http://www.kegel.com/c10k.html

+0

że papier wygląda bardzo stary (1999) i nie bardzo aktualne. Na przykład, ulimit pod Linuksem (przynajmniej Ubuntu) jest ustawiony na nieograniczoną ... więc ustawienie go na 32768 nie jest prawdopodobnie konieczne? –

5

Ogólnie nowoczesne serwery mogą obsługiwać bardzo dużą liczbę jednoczesnych połączeń. Pracowałem nad systemami mającymi ponad 8000 jednocześnie otwartych gniazd TCP/IP.

Potrzebny jest wysokiej jakości interfejs serwisowy do obsługi tego rodzaju ładunku, sprawdź libevent lub libev.

0

Jedną z największych komplikacji w połączeniach o wysokiej współbieżności są faktycznie używane routery. Domowe routery zorientowane na użytkownika zazwyczaj mają małą tablicę NAT, co uniemożliwia routerowi rzeczywistą obsługę serwera połączeń.

Należy również sprawdzić konfigurację routera/infrastruktury sieciowej.

0

Myślę, że nie powinieneś ograniczać liczby połączeń, na które pozwala twój serwer - po prostu łap i obsługuj poprawnie wszystkie wyjątki, które mogą wystąpić podczas przyjmowania i zamykania połączeń, i powinieneś być w porządku. Powinieneś pozostawić programowanie niższego poziomu na podstawowych warstwach systemu operacyjnego - w ten sposób możesz ułatwić portowanie swojego serwera itp.

0

To naprawdę zależy od twojego systemu operacyjnego.

Różne smaki Unix będzie wspierać „nieograniczony” liczby uchwytów plików/gniazda inni mają wysokie wartości jak 32768.

Typowa granica użytkownik jest 8192, ale może zazwyczaj być wyższa.

Myślę, że Windows jest bardziej ograniczony, ale wersja serwera może mieć wyższe limity.

4

To jest dobre pytanie i zdecydowanie jest sytuacyjne. Jaki jest twój komputer? Czy masz 4-gniazdową maszynę z czterordzeniowymi procesorami Xeon, 128 GB pamięci RAM i łącznością Fibre Channel (jak para kupionych przez nas Dell R900)? A może używasz p3 550 z 256 MB pamięci RAM i modemem 56K? Ile obciążenia ma każde połączenie na twoim serwerze? Jaka odpowiedź jest akceptowalna?

Oto pytania, na które należy odpowiedzieć. Myślę, że najlepszym sposobem znalezienia odpowiedzi jest testowanie obciążenia. Utwórz test jednostkowy oczekiwanych (i być może niektórych nieoczekiwanych) ścieżek, które twój kod wykona na serwerze. Znajdź ramy testowania obciążenia, które pozwolą Ci symulować 10, 100, 1000, 10000 użytkowników wykonujących te zadania w tym samym czasie.

Dzięki temu dowiesz się, ile połączeń obsługuje Twój komputer.

Wspaniałą rzeczą w scenariuszu testowym obciążenia/jednostki jest to, że można przewidzieć czas reakcji w testach jednostkowych i zwiększyć obciążenie, dopóki nie upłynie czas reakcji. Jeśli masz wymóg obsługi X liczby użytkowników z Y drugą odpowiedzią, będziesz w stanie to zademonstrować za pomocą testów obciążenia.

Powiązane problemy