Uruchamianie dowolnej skalowalnej platformy rozproszonej wymaga zaangażowania w niezawodność, aby zapewnić klientom to, czego potrzebują, gdy tego potrzebują. Zależności mogą być dość skomplikowane, zwłaszcza z platformą tak dużą jak Roblox. Budowanie niezawodnych usług oznacza, że bez względu na złożoność i stan zależności żadna dana usługa nie zostanie przerwana (tj. wysoce dostępny), będzie działać bez błędów (tj. wysoki jakość) i bez błędów (tj tolerancja na awarie).
Dlaczego niezawodność ma znaczenie
Nasz zespół ds. tożsamości konta jest zaangażowany w osiąganie większej niezawodności, ponieważ zbudowane przez nas usługi zgodności są podstawowymi składnikami platformy. Naruszenie zgodności może mieć poważne konsekwencje. Koszt zablokowania naturalnego działania Robloxa jest bardzo wysoki, z dodatkowymi zasobami niezbędnymi do odzyskania po awarii i osłabionym doświadczeniem użytkownika.
Typowe podejście do niezawodności koncentruje się przede wszystkim na dostępności, ale w niektórych przypadkach terminy są mieszane i niewłaściwie używane. Większość pomiarów dostępności po prostu ocenia, czy usługi są uruchomione i działają, podczas gdy aspekty takie jak tolerancja partycji i spójność są czasami zapominane lub źle rozumiane.
Zgodnie z twierdzeniem CAP, każdy system rozproszony może zagwarantować tylko dwa z tych trzech aspektów, więc nasze usługi zgodności poświęcają pewną spójność, aby zapewnić wysoką dostępność i tolerancję partycji. Niemniej jednak nasze usługi poświęciły niewiele i znalazły mechanizmy, aby osiągnąć dobrą spójność z rozsądnymi zmianami architektonicznymi opisanymi poniżej.
Proces osiągania wyższej niezawodności jest iteracyjny, z dokładnym pomiarem dopasowanym do ciągłej pracy, aby zapobiegać, znajdować, wykrywać i naprawiać defekty przed wystąpieniem incydentów. Nasz zespół zidentyfikował silną wartość w następujących praktykach:
- Właściwy pomiar – Zbuduj pełną obserwowalność wokół tego, w jaki sposób jakość jest dostarczana klientom i w jaki sposób zależności zapewniają nam jakość.
- Proaktywne przewidywanie – Wykonuj czynności, takie jak przeglądy architektoniczne i oceny ryzyka zależności.
- Priorytet korekty – Zwróć większą uwagę na rozwiązywanie raportów o incydentach dla usługi i zależności, które są powiązane z naszą usługą.
Budowanie wyższej niezawodności wymaga kultury jakości. Nasz zespół już inwestował w rozwój zorientowany na wydajność i wie, że sukces procesu zależy od jego przyjęcia. Zespół przyjął ten proces w całości i zastosował praktyki jako standard. Poniższy diagram przedstawia elementy procesu:
Moc właściwego pomiaru
Zanim zagłębimy się w metryki, należy szybko wyjaśnić pomiary poziomu usług.
- SLO (Service Level Objective) to cel niezawodności, do którego dąży nasz zespół (tj. 99.999%).
- SLI (Service Level Indicator) to osiągnięta niezawodność w określonym przedziale czasowym (tj. 99.975% w lutym ubiegłego roku).
- SLA (Service Level Agreement) to niezawodność uzgodniona do dostarczenia i oczekiwana przez naszych konsumentów w określonym czasie (tj. 99.99% tygodniowo).
SLI powinien odzwierciedlać dostępność (brak nieobsługiwanych lub brakujących odpowiedzi), tolerancję na awarie (brak błędów obsługi) i osiągniętą jakość (brak nieoczekiwanych błędów). Dlatego zdefiniowaliśmy nasz SLI jako „współczynnik sukcesu” udanych odpowiedzi w porównaniu z całkowitą liczbą żądań wysłanych do usługi. Pomyślne odpowiedzi to te żądania, które zostały wysłane w czasie i formie, co oznacza nie wystąpiły błędy łączności, usługi lub nieoczekiwane.
Ten SLI lub wskaźnik sukcesu jest zbierany z punktu widzenia konsumentów (tj. klientów). Intencją jest zmierzenie rzeczywistego, kompleksowego doświadczenia dostarczanego naszym konsumentom, abyśmy mieli pewność, że zostały spełnione warunki umów SLA. Niezastosowanie się do tego stworzyłoby fałszywe poczucie niezawodności, które ignoruje wszystkie problemy związane z infrastrukturą, aby połączyć się z naszymi klientami. Podobnie jak w przypadku konsumenckiego SLI, zbieramy zależności SLI, aby śledzić potencjalne ryzyko. W praktyce wszystkie umowy SLA dotyczące zależności powinny być zgodne z umową SLA usługi i istnieje z nimi bezpośrednia zależność. Porażka jednego pociąga za sobą porażkę wszystkich. Śledzimy również i raportujemy metryki z samej usługi (tj. serwera), ale nie jest to praktyczne źródło wysokiej niezawodności.
Oprócz SLI każda kompilacja zbiera metryki jakości, które są raportowane przez nasz przepływ pracy CI. Ta praktyka pomaga silnie egzekwować bramki jakościowe (tj. pokrycie kodu) i raportować inne znaczące metryki, takie jak zgodność ze standardami kodowania i statyczna analiza kodu. Ten temat został już wcześniej omówiony w innym artykule, Tworzenie mikrousług opartych na wydajności. Staranne przestrzeganie jakości sumuje się, gdy mówimy o niezawodności, ponieważ im więcej inwestujemy w osiąganie doskonałych wyników, tym bardziej jesteśmy pewni, że system nie zawiedzie w niesprzyjających warunkach.
Nasz zespół ma dwa dashboardy. Jeden zapewnia pełny wgląd w zarówno Consumers SLI, jak i Dependencies SLI. Drugi pokazuje wszystkie wskaźniki jakości. Pracujemy nad połączeniem wszystkiego w jeden pulpit nawigacyjny, tak aby wszystkie aspekty, na których nam zależy, były skonsolidowane i gotowe do zgłoszenia w dowolnym terminie.
Przewiduj porażkę
Robić Recenzje architektoniczne jest podstawową częścią bycia niezawodnym. Najpierw określamy, czy występuje nadmiarowość i czy usługa ma środki na przetrwanie, gdy zależności spadną. Oprócz typowych pomysłów na replikację, w większości naszych usług zastosowano ulepszone techniki hydratacji podwójnej pamięci podręcznej, podwójne strategie odzyskiwania (takie jak lokalne kolejki przełączania awaryjnego) lub strategie utraty danych (takie jak obsługa transakcji). Tematy te są wystarczająco obszerne, aby uzasadnić kolejny wpis na blogu, ale ostatecznie najlepszą rekomendacją jest wdrożenie pomysłów, które uwzględniają scenariusze katastrof i minimalizują wszelkie spadki wydajności.
Innym ważnym aspektem do przewidzenia jest wszystko, co może poprawić łączność. Oznacza to agresywne podejście do małych opóźnień dla klientów i przygotowanie ich na bardzo duży ruch przy użyciu technik kontroli pamięci podręcznej, sidecarów i wydajnych zasad dotyczących limitów czasu, wyłączników i ponawiania prób. Te praktyki dotyczą każdego klienta, w tym pamięci podręcznych, sklepów, kolejek i współzależnych klientów w HTTP i gRPC. Oznacza to również poprawę zdrowych sygnałów z usług i zrozumienie, że kontrole kondycji odgrywają ważną rolę we wszystkich aranżacjach kontenerów. Większość naszych usług zapewnia lepsze sygnały degradacji w ramach informacji zwrotnych dotyczących kontroli kondycji i weryfikuje, czy wszystkie krytyczne komponenty działają przed wysłaniem zdrowych sygnałów.
Podział usług na części krytyczne i niekrytyczne okazał się przydatny do skoncentrowania się na funkcjonalności, która ma największe znaczenie. Kiedyś mieliśmy punkty końcowe tylko dla administratora w tej samej usłudze i chociaż nie były one często używane, miały wpływ na ogólne metryki opóźnień. Przeniesienie ich do własnej usługi wpłynęło na każdy wskaźnik w pozytywnym kierunku.
Ocena ryzyka zależności jest ważnym narzędziem do identyfikacji potencjalnych problemów z zależnościami. Oznacza to, że identyfikujemy zależności z niskim SLI i pytamy o wyrównanie SLA. Te zależności wymagają szczególnej uwagi podczas etapów integracji, dlatego poświęcamy dodatkowy czas na testy porównawcze i testowanie, czy nowe zależności są wystarczająco dojrzałe dla naszych planów. Dobrym przykładem jest wczesne przyjęcie rozwiązania Roblox Storage-as-a-Service. Integracja z tą usługą wymagała zgłaszania zgłoszeń błędów i okresowych spotkań synchronizacyjnych w celu przekazywania wyników i opinii. Cała ta praca wykorzystuje tag „niezawodność”, dzięki czemu możemy szybko zidentyfikować jego źródło i priorytety. Charakteryzacja zdarzała się często, dopóki nie mieliśmy pewności, że nowa zależność jest dla nas gotowa. Ta dodatkowa praca pomogła podnieść zależność do wymaganego poziomu niezawodności, którego oczekujemy, aby zapewnić wspólne działanie dla wspólnego celu.
Sprowadź strukturę do chaosu
Incydenty nigdy nie są pożądane. Ale kiedy tak się dzieje, trzeba zebrać istotne informacje i nauczyć się z nich, aby być bardziej wiarygodnym. Nasz zespół posiada raport incydentów zespołowych, który jest tworzony poza typowym raportem dla całej firmy, więc skupiamy się na wszystkich incydentach, niezależnie od skali ich wpływu. Wskazujemy podstawową przyczynę i priorytetowo traktujemy wszystkie prace, aby złagodzić ją w przyszłości. W ramach tego raportu wzywamy inne zespoły do naprawy incydentów zależności o wysokim priorytecie, kontynuacji właściwego rozwiązania, retrospekcji i szukania wzorców, które mogą nas dotyczyć.
Zespół produkuje Miesięczny raport o niezawodności według usługi obejmuje to wszystkie wyjaśnione tutaj SLI, wszelkie zgłoszenia, które otworzyliśmy ze względu na niezawodność i wszelkie możliwe incydenty związane z usługą. Jesteśmy tak przyzwyczajeni do generowania tych raportów, że następnym naturalnym krokiem jest zautomatyzowanie ich ekstrakcji. Wykonywanie tej okresowej czynności jest ważne i przypomina, że niezawodność jest stale śledzona i uwzględniana w naszym rozwoju.
Nasze oprzyrządowanie obejmuje niestandardowe metryki i ulepszone alerty, dzięki czemu jesteśmy przywoływani tak szybko, jak to możliwe, gdy wystąpią znane i oczekiwane problemy. Wszystkie alerty, w tym fałszywe alarmy, są sprawdzane co tydzień. W tym momencie ważne jest dopracowanie całej dokumentacji, aby nasi konsumenci wiedzieli, czego mogą się spodziewać, gdy uruchamiają się alerty i kiedy pojawiają się błędy, a następnie wszyscy wiedzą, co robić (np. poradniki i wytyczne dotyczące integracji są często dostosowywane i aktualizowane).
Ostatecznie, przyjęcie jakości w naszej kulturze jest najważniejszym i decydującym czynnikiem w osiągnięciu większej niezawodności. Możemy zaobserwować, jak te praktyki stosowane w naszej codziennej pracy już się opłacają. Nasz zespół ma obsesję na punkcie rzetelności i jest to nasze najważniejsze osiągnięcie. Zwiększyliśmy naszą świadomość wpływu, jaki mogą mieć potencjalne defekty i kiedy można je wprowadzić. Usługi, które wdrożyły te praktyki, konsekwentnie osiągają swoje SLO i SLA. Raporty o wiarygodności, które pomagają nam śledzić całą wykonaną przez nas pracę, są świadectwem pracy wykonanej przez nasz zespół i stanowią nieocenioną lekcję informowania i wpływania na inne zespoły. W ten sposób kultura niezawodności dotyka wszystkich elementów naszej platformy.
Droga do większej niezawodności nie jest łatwa, ale jest konieczna, jeśli chcesz zbudować zaufaną platformę, która na nowo obrazuje sposób, w jaki ludzie się spotykają.
Alberto jest głównym inżynierem oprogramowania w zespole Account Identity w Roblox. Jest w branży gier od dawna, z napisami w wielu tytułach gier AAA i platformach mediów społecznościowych, z silnym naciskiem na wysoce skalowalne architektury. Teraz pomaga Robloxowi osiągnąć wzrost i dojrzałość, stosując najlepsze praktyki programistyczne.
Post Zapewnianie niezawodności platform na dużą skalę pojawiła się najpierw na Blog Roblox.
- "
- a
- O nas
- Konto
- Osiągać
- osiągnięty
- zajęcia
- działalność
- dodatek
- Dodatkowy
- Przyjęcie
- niekorzystny
- Umowa
- Wszystkie kategorie
- już
- analiza
- Inne
- przewidywać
- stosowany
- Aplikuj
- Stosowanie
- podejście
- architektoniczny
- na około
- artykuł
- powiązany
- Uwaga
- zautomatyzować
- dostępność
- dostępny
- świadomość
- bo
- zanim
- jest
- poniżej
- Benchmark
- BEST
- Poza
- Blog
- przynieść
- Bug
- budować
- wezwanie
- który
- Etui
- Spowodować
- Wykrywanie urządzeń szpiegujących
- klientów
- kod
- Kodowanie
- zbierać
- jak
- popełnić
- zobowiązanie
- zobowiązany
- wspólny
- komunikować
- w porównaniu
- spełnienie
- składniki
- Warunki
- pewność siebie
- pewność
- Skontaktuj się
- Łączność
- Rozważać
- stale
- konsument
- Konsumenci
- Pojemnik
- rdzeń
- mógłby
- Stwórz
- stworzony
- Kredyty
- krytyczny
- kultura
- zwyczaj
- Klientów
- tablica rozdzielcza
- dane
- głębiej
- dostarczona
- dostarczanie
- dostarcza
- wymagania
- zależy
- Ustalać
- oprogramowania
- kierować
- katastrofa
- dystrybuowane
- na dół
- napędzany
- podczas
- Wcześnie
- koniec końców
- inżynier
- szczególnie
- wszyscy
- wszystko
- przykład
- doskonała
- oczekiwać
- spodziewany
- doświadczenie
- rozległy
- Brak
- informacja zwrotna
- i terminów, a
- Fix
- Skupiać
- koncentruje
- skupienie
- obserwuj
- następujący
- Nasz formularz
- znaleziono
- od
- pełny
- funkcjonalny
- Funkcjonalność
- fundamentalny
- przyszłość
- gra
- Bramy
- generujący
- cel
- dobry
- Wzrost
- gwarancja
- wytyczne
- zdarzyć
- się
- Zdrowie
- pomoc
- pomoc
- pomaga
- tutaj
- Wysoki
- wyższy
- pasemka
- wysoko
- W jaki sposób
- HTTPS
- pomysły
- zidentyfikować
- tożsamość
- Rezultat
- wdrożenia
- realizowane
- ważny
- podnieść
- ulepszony
- poprawy
- W innych
- obejmuje
- Włącznie z
- wzrosła
- przemysł
- wpływ
- Informacja
- Infrastruktura
- integracja
- Zamiar
- inwestowanie
- IT
- samo
- Wiedzieć
- znany
- UCZYĆ SIĘ
- poziom
- mało
- miejscowy
- długo
- Popatrz
- robić
- dopasowywanie
- Matters
- dojrzały
- dojrzałość
- znaczenie
- wymowny
- znaczy
- zmierzyć
- Media
- Spotkania
- Metryka
- mieszany
- jeszcze
- większość
- przeniesienie
- Naturalny
- niezbędny
- Niemniej jednak
- działać
- działanie
- orkiestracja
- zamówienie
- Inne
- ogólny
- własny
- część
- Ludzie
- jest gwarancją najlepszej jakości, które mogą dostarczyć Ci Twoje monitory,
- sztuk
- plany
- Platforma
- Platformy
- Grać
- punkt
- Punkt widzenia
- polityka
- pozytywny
- możliwy
- potencjał
- power
- praktyka
- teraźniejszość
- Główny
- priorytet
- problemy
- wygląda tak
- jakość
- Szybki
- szybko
- dosięgnąć
- rozsądny
- Recover
- regeneracja
- odzwierciedlić
- w sprawie
- rzetelny
- raport
- Raporty
- wywołań
- wymagany
- Zasoby
- Recenzje
- Ryzyko
- droga
- Roblox
- Rola
- korzeń
- bieganie
- taki sam
- skalowalny
- Skala
- rozsądek
- usługa
- Usługi
- podobny
- ponieważ
- pojedynczy
- So
- Obserwuj Nas
- Media społecznościowe
- platform społecznych mediów
- Tworzenie
- Software Engineer
- kilka
- specjalny
- stoisko
- standard
- Rynek
- sklep
- strategie
- silny
- sukces
- udany
- wsparcie
- system
- rozmawiać
- zespół
- Techniki
- REGULAMIN
- test
- Połączenia
- w związku z tym
- trzy
- bilety
- czas
- ramy czasowe
- razem
- tolerancja
- narzędzie
- aktualny
- tematy
- śledzić
- ruch drogowy
- zrozumienie
- us
- wartość
- zweryfikować
- Zobacz i wysłuchaj
- widoczność
- tydzień
- Co
- czy
- Podczas
- bez
- Praca
- pracujący
- by