Wymagania: mieć praktyczne rozwiązanie, które działa w chmurze lub w dowolnym środowisku, w którym nie ma dostępu do sprzętowych mechanizmów równoważenia obciążenia, protokołów BGP i tym podobnych.
Numer wniosku o dochód aplikacji jest nieznany, ale powinien być na tyle wysoki, aby bez obawy spełniać zwiększone oczekiwania dotyczące obciążenia.
Znajdźmy aplikację o podobnym charakterze obciążenia, na przykład rejestrowanie sklepu i aplikację do wyszukiwania. Znalazłem jeden .
Czego chcą:
- Zrównoważyć obciążenie kolektorów
- Oferuj odporność na uszkodzenia, co pozwala nam kontynuować pobieranie danych, jeśli jeden z kolektorów umrze lub wystąpią problemy
- Skaluj w poziomie wraz ze wzrostem naszych objętości kłód
Czego się nauczyli o ELB:
- Nie działa zgodnie z oczekiwaniami
- Problemy z opóźnieniami spowodowane zwiększonym obciążeniem
- Za mało możliwości monitorowania
- Zbyt wiele ograniczeń (liczba otwartych portów i protokołów)
Dlaczego wybrali z Route53:
- „Round Robin jest dość podstawowym równoważeniem obciążenia, ale działa dobrze dla nas z punktu widzenia wydajności”
- „Korzystamy z kontroli stanu pracy awaryjnej Route 53”.
- „Jeśli wystąpi problem z kolektorem, Route 53 automatycznie wyłącza go z usługi; nasi klienci nie zauważą żadnego wpływu”.
- W przypadku trasy 53 nie jest wymagane wstępne rozgrzewanie
Route 53 okazała się najlepszym sposobem dla Loggly na skorzystanie z naszych wysokowydajnych kolektorów, biorąc pod uwagę nasze ogromne objętości kłód, nieprzewidziane zmiany i ciągły rozwój naszej działalności. Jest on zgodny z podstawowymi celami kolektorów: do zbierania danych z prędkością linii sieciowej przy zerowej utracie i pozwala nam korzystać z elastyczności wszystkich usług AWS, z których korzystamy w Loggly.
Ten konkretny przykład pokazuje, że w niektórych scenariuszach (moduł gromadzący dzienniki, usługa reklamowa itp.) Moduł równoważenia obciążenia jest zbędny, a „rozwiązanie sprawdzania poprawności DNS za pomocą okradzin” działa bardzo dobrze.
Zobaczmy, co AWS mówi o przełączeniu awaryjnym DNS:
Dzięki funkcji DNS Failover Route 53 może wykryć awarię Twojej witryny i przekierować użytkowników końcowych do wskazanych przez ciebie alternatywnych lub zapasowych lokalizacji. Przełączanie awaryjne DNS trasy 53 polega na sprawdzaniu kondycji - regularnym przesyłaniu żądań internetowych do punktów końcowych aplikacji z wielu lokalizacji na całym świecie - w celu ustalenia, czy każdy punkt końcowy aplikacji jest w górę, czy w dół.
Ta technika sprawia, że ELB (niewymagany, tylko dla notatki) jest bardziej niezawodny, ponownie opiera się na RR + Health Check:
Przełączanie awaryjne DNS Route 53 obsługuje wszystkie te scenariusze awarii, integrując się z ELB za kulisami. Po włączeniu Route 53 automatycznie konfiguruje i zarządza sprawdzeniami kondycji poszczególnych węzłów ELB.
Zobaczmy teraz, jak to działa za sceną. Oczywistym pytaniem jest, jak radzić sobie z buforowaniem DNS:
Jednak buforowanie DNS może nadal stanowić problem (patrz nasz poprzedni post, w którym omówiono problem z „długim ogonem”), jeśli TTL nie jest przestrzegane przez wszystkie warstwy między twoim klientem a trasą 53. Możesz wtedy zastosować technikę „pomijania pamięci podręcznej”: wysłać zapytanie do unikalnej domeny
("http://<unique-id>.<your-domain>")
i zdefiniuj symbol wieloznaczny
Record "*.<your-domain>" to match it.
Algolia wprowadziła „strategię ponownych prób klienta”, która działa całkiem dobrze, jeśli twój klient (JS w twoim przypadku) może sobie z tym poradzić:
W końcu wdrożyliśmy podstawową strategię ponownych prób w naszych klientach API. Każdy klient API został opracowany tak, aby mieć dostęp do trzech różnych maszyn. Trzy różne rekordy DNS reprezentowały każdego użytkownika: USERIDID.algolia.io, USERID-2.algolia.io i USERID-3.algolia.io. Naszą pierwszą implementacją było losowe wybranie jednego z rekordów, a następnie ponowienie próby z innym w przypadku awarii.