2013-06-06 9 views
20

W jaki sposób serwer WWW obsługuje wiele żądań przychodzących w tym samym czasie na jednym porcie (80)?W jaki sposób serwer WWW może obsługiwać przychodzące żądania wielu użytkowników jednocześnie na jednym porcie (80)?

Przykład: Jednocześnie 300k użytkownicy chcą zobaczyć obraz z www.abcdef.com, któremu przypisano adres IP 10.10.100.100 i port 80. Jak więc może www.abcdef.com obsługiwać przychodzące obciążenia użytkowników?

Czy jeden serwer (który ma przypisany adres IP 10.10.100.100) obsługuje tak dużą liczbę przychodzących użytkowników? Jeśli nie, to w jaki sposób można przypisać jeden adres IP do więcej niż jednego serwera do obsługi tego obciążenia?

Odpowiedz

10

Od tcpipguide

Ta identyfikacja połączeń wykorzystujących zarówno klienta, jak i gniazd serwer jest co zapewnia elastyczność, umożliwiając wielu połączeń pomiędzy urządzeniami, które bierzemy za pewnik w Internecie. Na przykład, procesy zajętego serwera aplikacji (takie jak serwery WWW) muszą obsługiwać połączenia z więcej niż jednego klienta, albo sieć World Wide Web byłaby praktycznie bezużyteczna. Ponieważ połączenie jest identyfikowane za pomocą gniazda klienta, a także serwera, nie stanowi to problemu. W tym samym czasie, gdy serwer sieci Web utrzymuje połączenie wymienione powyżej, może łatwo mieć inne połączenie, powiedzmy, port 2199 na adres IP 219.31.0.44. To jest reprezentowany przez identyfikator połączenia:

(41.199.222.3:80, 219.31.0.44:2199). 

W rzeczywistości, możemy mieć wiele połączeń z tego samego klienta na tym samym serwerze. Każdemu procesowi klienta zostanie przypisany inny, efemeryczny numer portu, więc nawet jeśli wszyscy spróbują uzyskać dostęp do tego samego procesu serwera (na przykład proces serwera WWW pod adresem 41.199.222.3:80), wszyscy będą mieli inne gniazdo klienta i będą reprezentować unikatowe znajomości. Dzięki temu możesz złożyć kilka jednoczesnych żądań do tej samej witryny z komputera.

Znowu, TCP śledzi każde z tych połączeń niezależnie, więc każde połączenie jest nieświadome innych. TCP może obsłużyć setki lub nawet tysiące jednoczesnych połączeń. Jedynym ograniczeniem jest pojemność komputera z uruchomionym TCP i przepustowość fizycznych połączeń z nim - im więcej połączeń jest uruchomionych jednocześnie, tym więcej każdy musi dzielić ograniczone zasoby.

+3

Niska jakość, całkowicie pomieszana między gniazdami i gniazdami. Połączenia są identyfikowane za pomocą adresu IP i * portów, * nie przez gniazda. – EJP

9

Port to tylko magiczna liczba. To nie odpowiada sprzętowi. Serwer otwiera gniazdo, które "nasłuchuje" na porcie 80 i "akceptuje" nowe połączenia z tego gniazda. Każde nowe połączenie jest reprezentowane przez nowe gniazdo, którego portem lokalnym jest również port 80, ale którego zdalny port ip: jest zgodny z klientem, który się połączył. Więc się nie mieszają. Dlatego nie potrzebujesz wielu adresów IP, a nawet wielu portów na końcu serwera.

+0

Jest to również dobra odpowiedź w połączeniu z pierwszą odpowiedzią. –

+0

@ManoharReddyPoreddy Lepiej, ponieważ najmniej nie ma zamieszania, o którym wspomniałem. – EJP

+0

Zgadzam się, ale ma również więcej informacji, które są istotne, np. "Jedynym ograniczeniem jest pojemność komputera z uruchomionym TCP i przepustowość fizycznych połączeń z nim", więc proponuję, aby ktoś podał odpowiedź 1, a następnie teraz 1 odpowiedź jako druga. –

0

odpowiedź brzmi: wirtualnych hostów, HTTP Header jest nazwa domeny, więc serwer WWW wiedzieć, które pliki uruchomić lub wysłać do klienta

+1

Nic w pytaniu o wiele domen. – EJP

2

TCP dba o identyfikacji klienta
Jak ja powiedziałem, TCP dba o identyfikację klienta, a serwer widzi tylko "gniazdo" na klienta.
Powiedzmy, że serwer o numerze 10.10.100.100 nasłuchuje portu 80 dla przychodzących połączeń TCP (HTTP jest budowany przez TCP). Przeglądarka klienta (w 10.9.8.7) łączy się z serwerem za pomocą portu klienta 27143. Serwer widzi: "klient 10.9.8.7:27143 chce się połączyć, czy akceptujesz?". Aplikacja serwera akceptuje i otrzymuje "uchwyt" (gniazdo) do zarządzania całą komunikacją z tym klientem, a uchwyt zawsze wysyła pakiety do 10.9.8.7:27143 z odpowiednimi nagłówkami TCP.

Pakiety nie są jednoczesne
Teraz, fizycznie nie jest na ogół tylko jeden (lub dwa) połączenia łączące serwer do internetu, więc pakiety mogą przyjechać tylko w kolejności. Powstaje pytanie: jaka jest maksymalna przepustowość przez światłowód i ile odpowiedzi serwer może obliczyć i wysłać w zamian. Poza czasem pracy procesora lub wąskimi gardłami pamięci podczas odpowiadania na żądania serwer musi także utrzymywać przy życiu niektóre zasoby (co najmniej 1 aktywne gniazdo na klienta) do czasu zakończenia komunikacji, a zatem zużywać pamięć RAM. Przepustowość osiąga się poprzez pewne optymalizacje (nie wykluczające się wzajemnie): nie blokujące gniazda (w celu uniknięcia opóźnień potokowych/gniazdowych), wielowątkowość (w celu wykorzystania większej liczby rdzeni procesorów/wątków).

Poprawa żądania przepustowości dalej: równoważenie
i ostatni serwer na „front-side” stron internetowych z reguły nie wykonać całą pracę samodzielnie (szczególnie bardziej skomplikowane rzeczy, jak zapytań bazy obciążenie, obliczenia itp.) i odraczać zadania, a nawet przekazywać żądania HTTP do rozproszonych serwerów, podczas gdy oni nadal obsługują trywialnie (np. przekazywanie) jak najwięcej żądań na sekundę, jak tylko mogą. Dystrybucja pracy na kilku serwerach nosi nazwę load-balancing.

Powiązane problemy