Sieci wewnętrzne często używają połączeń 1 Gb / s lub szybszych. Połączenia światłowodowe lub łączenie umożliwiają znacznie większą przepustowość między serwerami. Teraz wyobraź sobie średni rozmiar odpowiedzi JSON z API. Ile takich odpowiedzi można przesłać przez połączenie 1 Gb / s w ciągu jednej sekundy?
Zróbmy matematykę. 1 Gb / s to 131 072 KB na sekundę. Jeśli średnia odpowiedź JSON wynosi 5 KB (co jest całkiem sporo!), Możesz wysłać 26 214 odpowiedzi na sekundę przewodowo za pomocą tylko jednej pary maszyn . Nie jest tak źle, prawda?
Dlatego połączenie sieciowe zwykle nie stanowi wąskiego gardła.
Innym aspektem mikrousług jest to, że można łatwo skalować. Wyobraź sobie dwa serwery, jeden hostujący interfejs API, a drugi go wykorzystujący. Jeśli kiedykolwiek połączenie stanie się wąskim gardłem, wystarczy dodać dwa inne serwery i można podwoić wydajność.
To wtedy nasze wcześniejsze 26 214 odpowiedzi na sekundę stają się zbyt małe dla skali aplikacji. Dodajesz pozostałe dziewięć par i możesz teraz obsłużyć 262 140 odpowiedzi.
Wróćmy jednak do naszej pary serwerów i dokonajmy porównań.
Jeśli przeciętne niebuforowane zapytanie do bazy danych zajmuje 10 ms, masz do 100 zapytań na sekundę. 100 zapytań. 26 214 odpowiedzi. Osiągnięcie prędkości 26 214 odpowiedzi na sekundę wymaga dużej ilości buforowania i optymalizacji (jeśli odpowiedź faktycznie wymaga zrobienia czegoś pożytecznego, na przykład zapytania do bazy danych; odpowiedzi w stylu „Hello World” nie kwalifikują się).
Na moim komputerze, DOMContentLoaded dla strony głównej Google stało się 394 ms. po wysłaniu zapytania. To mniej niż 3 żądania na sekundę. Dla strony głównej Programmers.SE stało się to 603 ms. po wysłaniu zapytania. To nie są nawet 2 żądania na sekundę. Nawiasem mówiąc, mam połączenie internetowe 100 Mbps i szybki komputer: wielu użytkowników będzie czekać dłużej.
Jeśli wąskim gardłem jest szybkość sieci między serwerami, te dwie witryny mogą dosłownie wykonywać tysiące połączeń z różnymi interfejsami API podczas wyświetlania strony.
Te dwa przypadki pokazują, że sieć prawdopodobnie nie będzie twoim wąskim gardłem w teorii (w praktyce powinieneś zrobić rzeczywiste testy porównawcze i profilowanie, aby określić dokładną lokalizację wąskiego gardła twojego konkretnego systemu hostowanego na określonym sprzęcie). Czas poświęcony na wykonanie rzeczywistej pracy (czy byłyby to zapytania SQL, kompresja itp.) I wysłanie wyniku do użytkownika końcowego jest znacznie ważniejszy.
Pomyśl o bazach danych
Zazwyczaj bazy danych są hostowane oddzielnie od aplikacji internetowej, która je używa. Może to budzić obawy: co z szybkością połączenia między serwerem obsługującym aplikację a serwerem obsługującym bazę danych?
Wydaje się, że w niektórych przypadkach prędkość połączenia staje się problematyczna, to znaczy, gdy przechowujesz ogromne ilości danych, które nie muszą być przetwarzane przez samą bazę danych i powinny być teraz dostępne (czyli duże pliki binarne). Ale takie sytuacje są rzadkie: w większości przypadków szybkość przesyłania nie jest tak duża w porównaniu do szybkości przetwarzania samego zapytania.
Rzeczywista prędkość transferu ma znaczenie wtedy, gdy firma hostuje duże zestawy danych na serwerze NAS, a dostęp do NAS ma wielu klientów jednocześnie. Tutaj SAN może być rozwiązaniem. Biorąc to pod uwagę, nie jest to jedyne rozwiązanie. Kable kategorii 6 mogą obsługiwać prędkości do 10 Gb / s; Łączenie można również wykorzystać do zwiększenia prędkości bez zmiany kabli lub kart sieciowych. Istnieją inne rozwiązania, obejmujące replikację danych na wielu serwerach NAS.
Zapomnij o prędkości; pomyśl o skalowalności
Ważnym punktem aplikacji internetowej jest możliwość skalowania. Chociaż rzeczywista wydajność ma znaczenie (ponieważ nikt nie chce płacić za mocniejsze serwery), skalowalność jest o wiele ważniejsza, ponieważ pozwala wrzucić dodatkowy sprzęt w razie potrzeby.
Jeśli masz niezbyt szybką aplikację, stracisz pieniądze, ponieważ będziesz potrzebować mocniejszych serwerów.
Jeśli masz szybką aplikację, której nie można skalować, stracisz klientów, ponieważ nie będziesz w stanie odpowiedzieć na rosnące zapotrzebowanie.
W ten sam sposób maszyny wirtualne były dziesięć lat temu postrzegane jako ogromny problem z wydajnością. Rzeczywiście, hostowanie aplikacji na serwerze w porównaniu z hostowaniem jej na maszynie wirtualnej miało istotny wpływ na wydajność. Choć luka jest dziś znacznie mniejsza, nadal istnieje.
Pomimo tej utraty wydajności środowiska wirtualne stały się bardzo popularne ze względu na elastyczność, jaką zapewniają.
Podobnie jak w przypadku szybkości sieci, może się okazać, że VM jest wąskim gardłem, a biorąc pod uwagę faktyczną skalę, zaoszczędzisz miliardy dolarów, hostując aplikację bezpośrednio, bez maszyn wirtualnych. Ale nie dzieje się tak w przypadku 99,9% aplikacji: ich wąskie gardło występuje gdzie indziej, a wadę utraty kilku mikrosekund z powodu maszyny wirtualnej łatwo kompensują korzyści wynikające z abstrakcji sprzętu i skalowalności.