Web-HighLoad — jak zarządzamy ruchem dziesiątek tysięcy domen

Legitymny ruch w sieci DDoS-Guard niedawno przekroczył sto gigabitów na sekundę. Obecnie 50% całego naszego ruchu generują usługi internetowe klientów. To dziesiątki tysięcy domen, bardzo różnorodnych i w większości przypadków wymagających indywidualnego podejścia.

Poniżej przedstawiamy, jak zarządzamy węzłami frontowymi i wydajemy Certyfikaty SSL dla setek tysięcy stron internetowych.

Web-HighLoad — jak zarządzamy ruchem dziesiątek tysięcy domen

Skonfigurowanie frontu dla jednej strony, nawet bardzo dużej, jest proste. Bierzemy nginx lub haproxy lub lighttpd, konfigurujemy zgodnie z przewodnikami i zapominamy. Jeśli trzeba coś zmienić — robimy reload i znowu zapominamy.

Wszystko zmienia się, gdy na bieżąco przetwarzasz duże ilości ruchu, oceniasz legitymację zapytań, kompresujesz i buforujesz treści użytkowników, a jednocześnie zmieniasz parametry kilka razy na sekundę. Użytkownik chce widzieć wyniki na wszystkich zewnętrznych węzłach natychmiast po tym, jak zmienił ustawienia w panelu sterowania. A ponadto użytkownik może przesłać przez API kilka tysięcy (a czasem nawet dziesiątki tysięcy) domen z indywidualnymi parametrami przetwarzania ruchu. Wszystko to również musi działać natychmiast, zarówno w Ameryce, w Europie, jak i w Azji — zadanie nie jest proste, mając na uwadze, że w samej Moskwie jest kilka fizycznie rozproszonych węzłów filtracyjnych.

Dlaczego potrzeba wielu dużych, niezawodnych węzłów na całym świecie?

  • Jakość obsługi ruchu klientów — zapytania z USA muszą być przetwarzane właśnie w USA (w tym do obrony przed atakami, parsowaniem i innymi anomaliami), a nie wysyłane do Moskwy lub Europy, co nieprzewidywalnie zwiększa opóźnienie przetwarzania.
  • Ruch atakujący musi być lokalizowany — operatorzy tranzytowi mogą ulegać degradacji podczas ataków, których objętość często przekracza 1 Tbps. Transportowanie ruchu atakującego przez transatlantyckie lub transazjatyckie łącza — to nie najlepszy pomysł. Mieliśmy rzeczywiste przypadki, kiedy operatorzy Tier-1 mówili: „Wielkości ataków, które przyjmujecie, są dla nas niebezpieczne”. Dlatego przyjmujemy przychodzące strumienie jak najbliżej ich źródeł.
  • Surowe wymagania dotyczące ciągłości usług — centra danych nie powinny zależeć od siebie nawzajem ani od lokalnych wydarzeń w naszym szybko zmieniającym się świecie. Wyłączono wszystkie 11 pięter MMTS-9 na tydzień? — to nie problem. Żaden klient, który nie ma fizycznego połączenia w tej lokalizacji, nie ucierpi, a usługi internetowe nie zostaną w żaden sposób dotknięte.

Jak tym zarządzać?

Konfiguracje usług muszą jak najszybciej (idealnie natychmiast) rozprzestrzeniać się na wszystkich frontowych węzłach. Nie można po prostu edytować plików konfiguracyjnych i restartować demonów przy każdej zmianie — nginx utrzymuje działające procesy (worker shutting down) przez jeszcze kilka minut (a czasem i godzin, jeśli są długie sesje websocket).

Podczas restartu konfiguracji nginx często wygląda to następująco:

Web-HighLoad — jak zarządzamy ruchem dziesiątek tysięcy domen

W zakresie wykorzystania pamięci:

Web-HighLoad — jak zarządzamy ruchem dziesiątek tysięcy domen

Stare workery zużywają pamięć, która nie jest liniowo zależna od liczby połączeń — to normalne. Po zamknięciu połączeń klientów ta pamięć zostanie uwolniona.

Dlaczego to nie było problemem, gdy nginx dopiero zaczynał się rozwijać? Nie było ani HTTP/2, ani WebSocket, ani masowych długich połączeń keep-alive. 70% naszego ruchu internetowego to HTTP/2, a więc są to bardzo długie połączenia.

Rozwiązanie jest proste — nie używać nginx, nie zarządzać frontami na podstawie plików tekstowych, a tym bardziej nie przesyłać spakowanych plików konfiguracyjnych przez transoceaniczne łącza. Kanały są wprawdzie gwarantowane i zarezerwowane, ale nie zmienia to ich transkontynentalnego charakteru.

Mamy własny serwer frontowy-balonując, o wnętrzach którego opowiem w kolejnych artykułach. Najważniejsze, co potrafi — stosować tysiące zmian konfiguracji na sekundę w trybie on-the-fly, bez restartów, przeładowań, skokowego wzrostu zużycia pamięci i tym podobnych. To bardzo przypomina Hot Code Reload, na przykład w Erlang. Dane są przechowywane w geodystrybucyjnej bazie key-value i odczytywane od razu przez wykonawcze mechanizmy frontowe. Tzn. załadowałeś certyfikat SSL za pomocą interfejsu webowego lub API w Moskwie, a po kilku sekundach już jest gotowy do pracy w naszym centrum czyszczenia w Los Angeles. Jeśli nagle wybuchłaby wojna światowa i Internet zniknąłby na całym świecie, nasze węzły będą działać autonomicznie i naprawią problem split-brain, gdy tylko jeden z wydzielonych kanałów Los Angeles-Amsterdam-Moskwa, Moskwa-Amsterdam-Hongkong-Los Angeles lub chociaż jeden z rezerwowych kanałów GRE stanie się dostępny.

Ten sam mechanizm pozwala nam natychmiast wydawać i przedłużać certyfikaty Let’s Encrypt. Bardzo uproszczony sposób działania wygląda tak:

  1. Gdy tylko zauważymy jeden HTTPS-zapytanie dla domeny naszego klienta bez certyfikatu (lub z przestarzałym certyfikatem), zewnętrzny węzeł, który przyjął zapytanie, informuje o tym wewnętrzne centrum certyfikacji.

    Web-HighLoad — jak zarządzamy ruchem dziesiątek tysięcy domen

  2. Jeśli użytkownik nie zabronił wydawania Let’s Encrypt, centrum certyfikacji tworzy CSR, otrzymuje od LE token potwierdzający i rozsyła go do wszystkich frontów przez zaszyfrowany kanał. Teraz każdy węzeł może potwierdzić valicyzujące zapytanie od LE.

    Web-HighLoad — jak zarządzamy ruchem dziesiątek tysięcy domen

  3. Po kilku chwilach otrzymamy poprawny certyfikat i prywatny klucz, a w ten sam sposób rozsyłamy je do frontów. Ponownie bez restartowania demonów.

    Web-HighLoad — jak zarządzamy ruchem dziesiątek tysięcy domen

  4. Na 7 dni przed datą wygaśnięcia inicjowana jest procedura ponownej aktywacji certyfikatu.

W tej chwili w czasie rzeczywistym rotujemy 350k certyfikatów całkowicie przejrzysto dla użytkowników.

W kolejnych artykułach cyklu opowiem o innych szczegółach przetwarzania dużego ruchu webowego w czasie rzeczywistym — na przykład o analizie RTT na podstawie niepełnych danych w celu poprawy jakości usług klientów tranzytowych oraz ogólnie o ochronie ruchu tranzytowego przed atakami terabitowymi, o dostarczaniu i agregacji informacji o ruchu, o WAF, prawie nieograniczonym CDN i licznych mechanizmach optymalizacji dostarczania treści.

Tylko zarejestrowani użytkownicy mogą brać udział w ankiecie. Zaloguj się, proszę.

O czym chcielibyście się dowiedzieć w pierwszej kolejności?

  • 14,3%Algorytmy klastrowania i analizy jakości ruchu sieciowego<3
  • 33,3%Wnętrza balansujących DDoS-Guard7
  • 9,5%Ochrona ruchu transitowego L3/L4 2
  • 0,0%Ochrona stron internetowych przed ruchem tranzytowym 0
  • 14,3%Zapora Aplikacji Webowych 3
  • 28,6%Ochrona przed parsowaniem i klikaniem6

Głosowało 21 użytkowników. 6 użytkowników wstrzymało się.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster