Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architekturyZAGUBIONE przez sophiagworld

W tym artykule opisano kilka typowych wzorców ułatwiających inżynierom pracę z usługami na dużą skalę, do których mają dostęp miliony użytkowników. 

Z doświadczenia autora wynika, że ​​nie jest to lista wyczerpująca, ale rzeczywiście skuteczny rada. Zacznijmy więc.

Przetłumaczone ze wsparciem Rozwiązania chmurowe Mail.ru.

Poziom wejścia

Środki wymienione poniżej są stosunkowo proste do wdrożenia, ale mają duży wpływ. Jeśli nie próbowałeś ich wcześniej, będziesz zaskoczony znaczącymi ulepszeniami.

Infrastruktura jako kod

Pierwsza część porady dotyczy wdrożenia infrastruktury jako kodu. Oznacza to, że musisz mieć programowy sposób wdrożenia całej infrastruktury. Brzmi skomplikowanie, ale tak naprawdę mówimy o następującym kodzie:

Wdrożenie 100 maszyn wirtualnych

  • z Ubuntu
  • 2 GB RAM każdy
  • będą mieli następujący kod
  • z tymi parametrami

Możesz śledzić zmiany w swojej infrastrukturze i szybko do nich wracać, korzystając z kontroli wersji.

Modernista we mnie mówi, że możesz użyć Kubernetes/Docker do wykonania wszystkich powyższych czynności i ma rację.

Dodatkowo możesz zapewnić automatyzację za pomocą Chef, Puppet lub Terraform.

Ciągła integracja i dostarczanie

Aby utworzyć skalowalną usługę, ważne jest posiadanie potoku kompilacji i testowania dla każdego żądania ściągnięcia. Nawet jeśli test jest bardzo prosty, przynajmniej upewni się, że wdrażany kod się skompiluje.

Za każdym razem na tym etapie odpowiadasz na pytanie: czy mój zestaw się skompiluje i przejdzie testy, czy jest ważny? Może się to wydawać niską poprzeczką, ale rozwiązuje wiele problemów.

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury
Nie ma nic piękniejszego niż widok tych kleszczy

W przypadku tej technologii możesz ocenić Github, CircleCI lub Jenkins.

Moduły równoważenia obciążenia

Chcemy więc uruchomić moduł równoważenia obciążenia, aby przekierować ruch i zapewnić równomierne obciążenie wszystkich węzłów, w przeciwnym razie usługa będzie kontynuowana w przypadku awarii:

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury
Moduł równoważenia obciążenia zwykle dobrze radzi sobie z dystrybucją ruchu. Najlepszą praktyką jest nadmierne zrównoważenie, aby nie mieć ani jednego punktu awarii.

Zazwyczaj moduły równoważenia obciążenia są konfigurowane w chmurze, z której korzystasz.

RayID, identyfikator korelacji lub UUID dla żądań

Czy kiedykolwiek napotkałeś błąd aplikacji z komunikatem takim jak ten: "Coś poszło nie tak. Zapisz ten identyfikator i wyślij go do naszego zespołu wsparcia”?

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury
Unikalny identyfikator, identyfikator korelacji, RayID lub dowolna z jego odmian to unikalny identyfikator, który umożliwia śledzenie żądania w całym jego cyklu życia. Dzięki temu możesz prześledzić całą ścieżkę żądania w logach.

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury
Użytkownik wysyła żądanie do systemu A, następnie A kontaktuje się z B, który kontaktuje się z C, przechowuje to w X, a następnie żądanie wraca do A

Jeśli miałbyś zdalnie łączyć się z maszynami wirtualnymi i próbować prześledzić ścieżkę żądania (i ręcznie korelować, które połączenia są wykonywane), zwariowałbyś. Posiadanie unikalnego identyfikatora znacznie ułatwia życie. Jest to jedna z najprostszych rzeczy, które możesz zrobić, aby zaoszczędzić czas w miarę rozwoju usługi.

Średni poziom

Porady tutaj są bardziej złożone niż poprzednie, ale odpowiednie narzędzia ułatwiają zadanie, zapewniając zwrot inwestycji nawet małym i średnim firmom.

Scentralizowane logowanie

Gratulacje! Wdrożyłeś 100 maszyn wirtualnych. Następnego dnia przychodzi Prezes i narzeka na błąd, który napotkał podczas testowania usługi. Zgłasza odpowiedni identyfikator, o którym mówiliśmy powyżej, ale będziesz musiał przejrzeć dzienniki 100 maszyn, aby znaleźć ten, który spowodował awarię. I trzeba go znaleźć przed jutrzejszą prezentacją.

Chociaż brzmi to jak fajna przygoda, najlepiej upewnić się, że masz możliwość przeszukiwania wszystkich czasopism w jednym miejscu. Rozwiązałem problem centralizacji logów wykorzystując wbudowaną funkcjonalność stosu ELK: obsługuje on zbieranie logów z możliwością przeszukiwania. To naprawdę pomoże rozwiązać problem znalezienia konkretnego czasopisma. Jako bonus możesz tworzyć wykresy i inne ciekawe rzeczy.

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury
Funkcjonalność stosu ELK

Agenci monitorujący

Teraz, gdy Twoja usługa jest już uruchomiona, musisz zadbać o jej płynne działanie. Najlepszym sposobem na to jest uruchomienie kilku agenci, które pracują równolegle i sprawdzają, czy działa i czy podstawowe operacje są wykonywane.

W tym momencie to sprawdzasz działająca kompilacja jest dobra i działa dobrze.

W przypadku małych i średnich projektów polecam Postmana do monitorowania i dokumentowania API. Ale ogólnie rzecz biorąc, chcesz po prostu mieć pewność, że masz sposób, aby dowiedzieć się, kiedy nastąpiła awaria i otrzymać powiadomienie w odpowiednim czasie.

Automatyczne skalowanie w zależności od obciążenia

To jest bardzo proste. Jeśli masz żądania obsługi maszyn wirtualnych i zużycie pamięci zbliża się do 80%, możesz zwiększyć jej zasoby lub dodać więcej maszyn wirtualnych do klastra. Automatyczne wykonywanie tych operacji doskonale sprawdza się przy zmianach mocy sprężystej pod obciążeniem. Zawsze jednak powinieneś uważać na to, ile wydajesz pieniędzy i ustalać rozsądne limity.

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury
W przypadku większości usług w chmurze można je skonfigurować tak, aby automatycznie skalowało się przy użyciu większej liczby serwerów lub serwerów o większej wydajności.

Układ eksperymentalny

Dobrym sposobem na bezpieczne wdrażanie aktualizacji jest możliwość testowania czegoś na 1% użytkowników przez godzinę. Oczywiście widziałeś takie mechanizmy w działaniu. Na przykład Facebook pokazuje części odbiorców inny kolor lub zmienia rozmiar czcionki, aby zobaczyć, jak użytkownicy postrzegają zmiany. Nazywa się to testowaniem A/B.

Nawet wypuszczenie nowej funkcji można rozpocząć w ramach eksperymentu, a następnie określić, w jaki sposób ją wypuścić. Otrzymujesz także możliwość „zapamiętania” lub zmiany konfiguracji na bieżąco w oparciu o funkcję, która powoduje degradację Twojej usługi.

poziom zaawansowany

Oto wskazówki, które są dość trudne do wdrożenia. Prawdopodobnie będziesz potrzebować trochę więcej zasobów, więc małej lub średniej firmie będzie trudno sobie z tym poradzić.

Wdrożenia niebiesko-zielone

To jest to, co nazywam sposobem rozwijania „Erlang”. Erlang stał się szeroko stosowany, gdy pojawiły się firmy telekomunikacyjne. Do kierowania połączeń telefonicznych zaczęto używać przełączników programowych. Głównym celem oprogramowania tych przełączników było zapobieganie przerywaniu połączeń podczas aktualizacji systemu. Erlang ma fajny sposób ładowania nowego modułu bez zawieszania poprzedniego.

Ten krok zależy od obecności modułu równoważenia obciążenia. Wyobraźmy sobie, że masz wersję N swojego oprogramowania, a następnie chcesz wdrożyć wersję N+1. 

Państwo moglibyśmy po prostu zatrzymaj usługę i wprowadź następną wersję w czasie, który będzie odpowiedni dla Twoich użytkowników i uzyskaj trochę przestojów. Ale załóżmy, że tak naprawdę rygorystyczne warunki SLA. Zatem umowa SLA na poziomie 99,99% oznacza, że ​​możesz przejść do trybu offline tylko o 52 minuty rocznie.

Jeśli naprawdę chcesz osiągnąć takie wskaźniki, potrzebujesz dwóch wdrożeń jednocześnie: 

  • ten, który jest teraz (N);
  • następna wersja (N+1). 

Mówisz modułowi równoważenia obciążenia, aby przekierował procent ruchu do nowej wersji (N+1), jednocześnie aktywnie monitorując regresję.

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury
Tutaj mamy wdrożenie zielonego N, które działa dobrze. Próbujemy przejść do kolejnej wersji tego wdrożenia

Najpierw wysyłamy naprawdę mały test, aby sprawdzić, czy nasze wdrożenie N+1 działa przy niewielkim ruchu:

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury
Na koniec mamy zestaw automatycznych kontroli, które ostatecznie przeprowadzamy do momentu zakończenia wdrożenia. Jeśli ty bardzo bardzo ostrożnie, możesz także zapisać wdrożenie N na zawsze, aby szybko wycofać się w przypadku złej regresji:

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury
Jeśli chcesz przejść na jeszcze bardziej zaawansowany poziom, pozwól, aby wszystko we wdrożeniu niebiesko-zielonym działało automatycznie.

Wykrywanie anomalii i automatyczne łagodzenie skutków

Biorąc pod uwagę, że masz scentralizowane rejestrowanie i dobre gromadzenie dzienników, możesz już wyznaczać wyższe cele. Na przykład aktywnie przewidywaj awarie. Funkcje są śledzone na monitorach i w logach, budowane są różne diagramy - i możesz z góry przewidzieć, co pójdzie nie tak:

Jak dobrze spać, gdy masz usługę w chmurze: podstawowe wskazówki dotyczące architektury
Po wykryciu anomalii zaczynasz badać niektóre wskazówki dostarczane przez usługę. Na przykład gwałtowny wzrost obciążenia procesora może wskazywać na awarię dysku twardego, natomiast gwałtowny wzrost liczby żądań może wskazywać na konieczność zwiększenia skali. Tego rodzaju dane statystyczne pozwalają na proaktywność usługi.

Dzięki tym spostrzeżeniom możesz skalować w dowolnym wymiarze oraz proaktywnie i reaktywnie zmieniać charakterystykę maszyn, baz danych, połączeń i innych zasobów.

To wszystko!

Ta lista priorytetów pozwoli Ci zaoszczędzić wiele problemów, jeśli zdecydujesz się na usługę w chmurze.

Autor oryginalnego artykułu zachęca czytelników do pozostawiania komentarzy i wprowadzania zmian. Artykuł jest rozpowszechniany jako open source, na żądanie autora akceptuje na Githubie.

Co jeszcze przeczytać na ten temat:

  1. Idź i pamięci podręczne procesora
  2. Kubernetes w duchu piractwa z szablonem do wdrożenia
  3. Nasz kanał Around Kubernetes w Telegramie

Źródło: www.habr.com

Dodaj komentarz