W niedawnym komunikacie Pinterest ujawnił udaną migrację z protokołu HTTP/2 do HTTP/3. Oznaczało to znaczną poprawę infrastruktury sieciowej. Celem było zwiększenie komfortu użytkowania i poprawa krytycznych wskaźników biznesowych poprzez wykorzystanie możliwości nowoczesnego protokołu HTTP/3.
Podróż do HTTP/3
Wydajność sieci, taka jak niskie opóźnienia i wysoka przepustowość, ma kluczowe znaczenie dla doświadczenia Pinners.
W 2021 r. grupa entuzjastów sieci klienckich w Pinterest zaczęła myśleć o przyjęciu protokołu HTTP/3 dla Pinterest, od ruchu/CDN po aplikacje klienckie. Pracowali nad tym przez cały 2022 rok i osiągnęli cel na początku 2023 roku.
Jak pomaga HTTP/3?
Protokół HTTP jest podstawą komunikacji danych w sieci WWW.
Jeśli nie wiedzą Państwo, czym jest i jak działa protokół HTTP, proszę dowiedzieć się więcej tutaj przed przejściem dalej.
HTTP/3 to nowoczesny protokół HTTP, który ma wiele zalet w porównaniu do HTTP/2, w tym między innymi:
- Brak problemu blokowania nagłówka linii TCP w porównaniu do HTTP/2.
- Migracja połączeń między adresami IP, co jest dobre w przypadku zastosowań mobilnych.
- Możliwość zmiany/dostrojenia parametrów wykrywania utraconych połączeń i kontroli przeciążenia.
- Skrócony czas połączenia (0-RTT, podczas gdy HTTP/2 nadal wymaga trójstronnych uzgodnień TCP).
- Większa wydajność w przypadku dużych ładunków, takich jak pobieranie obrazów, strumieniowanie wideo itp.
Przyjrzyjmy się bliżej każdej z tych zalet, aby zrozumieć, co oznaczają i w jaki sposób pomagają Pinterestowi.
1. Blokowanie nagłówków
W protokole HTTP/2 i wcześniejszych wersjach może wystąpić problem zwany “blokowaniem nagłówka linii”. Head-of-line blocking to zjawisko spadku wydajności, w którym jedno żądanie HTTP blokuje przetwarzanie innych żądań.
Oznacza to, że jeśli jeden zasób (taki jak obraz lub skrypt) napotka opóźnienie w transmisji, może zablokować dostarczenie innych zasobów, nawet jeśli są one gotowe. Może to mieć wpływ na ogólny czas ładowania strony internetowej.
Dla przykładu, rozważmy scenariusz, w którym strona internetowa składa się z kilku zasobów: HTML, CSS, JavaScript i obrazu. Jeśli JavaScript ma większy rozmiar, zablokuje obraz żądany później, dopóki JavaScript nie dotrze.
Może to mieć wpływ na ogólny czas ładowania strony internetowej.
Aby temu zaradzić, HTTP/2 wprowadził Strumienie HTTP. Strumienie HTTP to abstrakcja, która umożliwia multipleksowanie różnych wymian HTTP w tym samym połączeniu TCP.
Strumienie nie muszą być wysyłane w kolejności i są niezależne od innych strumieni.
Eliminuje to blokowanie Head of Line w warstwie aplikacji. Jednak blokowanie Head Of Line nadal istnieje w warstwie transportowej TCP w HTTP/2.
HTTP/3 wykorzystuje QUIC zamiast TCP jako protokół transportowy, usuwając w ten sposób blokowanie TCP Head Offive Line w warstwie transportowej. QUIC został specjalnie zaprojektowany w celu optymalizacji korzystania z Internetu na urządzeniach mobilnych.
2. Migracja połączeń między adresami IP
QUIC umożliwia migrację połączenia, co oznacza, że jeśli adres IP klienta ulegnie zmianie (powszechne w scenariuszach mobilnych), połączenie może zostać utrzymane. Jest to korzystne w przypadku zastosowań mobilnych, zapewniając bardziej płynne przejście, nawet jeśli warunki sieciowe klienta ulegną zmianie.
Na przykład, proszę wziąć pod uwagę użytkownika, który korzysta z urządzenia mobilnego, takiego jak smartfon lub tablet, aby uzyskać dostęp do Pinterest, który opiera się na protokole HTTP/3 do komunikacji. Użytkownik decyduje się opuścić dom i zaczyna korzystać z danych komórkowych podczas podróży. Przejście to wiąże się z przełączeniem z domowej sieci Wi-Fi na sieć komórkową, w wyniku czego urządzenie uzyskuje nowy adres IP powiązany z siecią komórkową.
Zdolność HTTP/3 do migracji połączeń między adresami IP zapewnia płynne przejście podczas tego przełączania między sieciami.
3. Możliwość zmiany / dostrojenia wykrywania utraty i kontroli przeciążenia
HTTP/3 zapewnia możliwość zmiany i dostrojenia mechanizmów wykrywania utraty i kontroli przeciążenia. Pozwala to na dostosowanie w oparciu o konkretne przypadki użycia lub warunki sieciowe. Precyzyjne dostrojenie tych aspektów przyczynia się do lepszej wydajności i niezawodności.
W sieci “wykrywanie utraty” odnosi się do zdolności protokołu komunikacyjnego do identyfikacji, kiedy pakiety danych zostały utracone lub nie zostały pomyślnie dostarczone do zamierzonego odbiorcy.
Na przykład, proszę rozważyć scenariusz, w którym urządzenie mobilne doświadcza przerywanej łączności. W takim przypadku mechanizm wykrywania utraty połączenia w protokole HTTP/3 można dostroić tak, aby był bardziej tolerancyjny na krótkie zerwania połączenia, minimalizując niepotrzebne retransmisje i optymalizując transfer danych.
Kontrola przeciążenia jest podstawowym aspektem protokołów sieciowych, zapewniającym wydajną transmisję danych bez powodowania przeciążenia sieci. Algorytmy kontroli przeciążenia określają, w jaki sposób nadawca dostosowuje szybkość transmisji danych w oparciu o warunki sieciowe. HTTP/3 zapewnia możliwość zmiany lub dostrojenia mechanizmów kontroli przeciążenia.
Na przykład, proszę wyobrazić sobie sieć, która napotyka sporadyczne przeciążenia w godzinach szczytu. HTTP/3 umożliwia precyzyjne dostrojenie algorytmów kontroli przeciążenia, umożliwiając protokołowi inteligentne dostosowanie szybkości transmisji danych w oparciu o warunki sieciowe. Ta zdolność adaptacji zapewnia optymalną wydajność nawet w różnych scenariuszach przeciążenia.
Zdolność HTTP/3 do migracji połączeń między adresami IP zapewnia płynne przejście podczas przełączania między sieciami.
4. Skrócony czas połączenia (0-RTT, podczas gdy HTTP/2 nadal wymaga trójstronnych uzgodnień TCP)
Trójstronny uścisk dłoni to proces wykorzystywany przez TCP do ustanowienia niezawodnego i zorientowanego na połączenie kanału komunikacyjnego między klientem a serwerem. Ponieważ HTTP zazwyczaj działa za pośrednictwem protokołu TCP, trójstronne uzgadnianie jest istotne w kontekście ustanawiania połączenia TCP dla komunikacji HTTP. Obejmuje on następujące kroki:
1. SYN (Synchronizacja): Klient inicjuje połączenie wysyłając do serwera segment TCP z ustawioną flagą SYN. Wskazuje to na zamiar nawiązania połączenia przez klienta, a także zawiera początkowy numer sekwencji.
2. SYN-ACK (potwierdzenie synchronizacji): Po otrzymaniu segmentu SYN, serwer odpowiada segmentem TCP, który ma ustawione flagi SYN i ACK. Numer potwierdzenia jest ustawiony na jeden więcej niż otrzymany numer sekwencji klienta, a serwer wybiera również swój początkowy numer sekwencji.
3. ACK (potwierdzenie): Na koniec klient wysyła segment TCP z ustawioną flagą ACK. Numer potwierdzenia jest ustawiony na jeden więcej niż otrzymany numer sekwencji serwera. To kończy trójstronny uścisk dłoni, a obie strony są teraz świadome, że połączenie zostało nawiązane.
4. RTT (czas podróży w obie strony) obejmuje czas propagacji wiadomości do i z serwera. W kontekście wydajności sieci i stron internetowych, RTT jest krytycznym wskaźnikiem, ponieważ wpływa na szybkość reakcji aplikacji. Niższe wartości RTT wskazują na szybszą komunikację i mniejsze opóźnienia, co jest pożądane w przypadku aplikacji działających w czasie rzeczywistym, gier online i innych scenariuszy, w których niskie opóźnienia mają kluczowe znaczenie.
0-RTT jest godną uwagi cechą protokołu QUIC używanego przez HTTP/3.
Dzięki 0-RTT klient może wysyłać dane do serwera w pierwszej wiadomości połączenia, bez oczekiwania na czas RTT (round-trip time).
Osiąga się to poprzez wykorzystanie wcześniej ustalonych informacji o sesji lub wznowienie poprzedniej sesji. Pozwala to klientowi na zawarcie danych w początkowym żądaniu, poprawiając wydajność konfiguracji połączenia.
Wykorzystanie 0-RTT w HTTP/3 znacznie skraca czas potrzebny na początkową konfigurację połączenia. Klient może od razu rozpocząć wysyłanie danych, co prowadzi do szybszego ładowania stron internetowych i zasobów.
Jest to szczególnie korzystne w scenariuszach, w których minimalizacja opóźnień ma kluczowe znaczenie, takich jak szybkie ładowanie stron internetowych lub dostarczanie treści w czasie rzeczywistym, jak w przypadku Pinterest.
5. Większa wydajność w przypadku dużych obciążeń, takich jak pobieranie obrazów, przesyłanie strumieniowe wideo itp.
HTTP/3 jest bardziej wydajny dla przypadków użycia obejmujących duże ładunki, takie jak pobieranie obrazów lub strumieniowe przesyłanie wideo. Projekt protokołu jest dobrze przystosowany do obsługi scenariuszy, w których konieczne jest przesyłanie znacznych ilości danych, przyczyniając się do poprawy wydajności w środowiskach bogatych w treści multimedialne.
HTTP/3 posiada udoskonalone mechanizmy kontroli przepływu, które pozwalają na lepszą obsługę dużych ładunków. Kontrola przepływu jest niezbędna, aby zapobiec przytłoczeniu odbiornika zbyt dużą ilością danych naraz.
Wydajność HTTP/3 dla przypadków użycia dużego ładunku jest zakorzeniona w jego wydajnym multipleksowaniu, zmniejszonym opóźnieniu, ulepszonej kontroli przepływu i adaptacyjnej obsłudze połączeń. Funkcje te wspólnie przyczyniają się do lepszego doświadczenia użytkownika podczas korzystania z bogatych w multimedia treści w Internecie.
Multipleksowanie, 0-RTT, łatwe migracje połączeń wraz z ulepszoną kontrolą przepływu sprawiają, że HTTP/3 jest wydajny dla dużych ładunków.
Analiza przeprowadzona przez Pinterest wskazuje, że HTTP/3 poprawił opóźnienia i niezawodność w obie strony. Poprawa opóźnień/przepustowości ma krytyczne znaczenie dla dużych funkcji multimedialnych (takich jak wideo i obrazy). Szybsza i bardziej niezawodna sieć jest również w stanie poprawić wskaźniki zaangażowania użytkowników.
Wykres pokazuje opóźnienie żądania sieciowego w obie strony w milisekundach, przed i po HTTP/3, dla danych zebranych w ciągu tygodnia dla różnych ładunków.
Podsumowując, przyjęcie przez Pinterest protokołu HTTP/3 stanowi strategiczne posunięcie mające na celu wykorzystanie zaawansowanych funkcji protokołu i zwiększenie ogólnej wydajności sieci platformy. Korzyści, począwszy od zmniejszenia opóźnień po lepszą obsługę dużych ładunków, przyczyniają się do bardziej płynnego i wydajnego doświadczenia użytkownika na platformie Pinterest. Ponieważ branża nadal korzysta z protokołu HTTP/3, Pinterest stoi na czele innowacji, dostosowując swoją infrastrukturę sieciową do najnowszych osiągnięć w protokołach internetowych.