TL; DR: Zbuduj redundantne, modułowe; test dostępności; uważnie monitoruj.
Po uświadomieniu sobie, że próba wyciśnięcia jakiegokolwiek wyjaśnienia może potrwać bardzo długo, więc zapiszę wszystkie obserwacje, które poczyniłem.
Kwestionowanie przesłanki
System chmurowy to panaceum
Nawet jeśli chcesz w pełni korzystać z chmury, z najlepszym dostawcą chmury, nadal będziesz musiał zaprojektować swoją aplikację pod kątem odporności. AWS może zastąpić maszynę wirtualną, ale aplikacja powinna być w stanie zrestartować się, jeśli pozostanie w trakcie obliczeń.
Nie chcemy używać systemu w chmurze z powodu x / y / z
Jeśli nie jesteś bardzo dużą organizacją, lepiej korzystać z systemów chmurowych. Top 3 systemy chmurowe (AWS, MSFT, Google) zatrudniają tysiące inżynierów, którzy zapewniają obiecane umowy SLA i łatwy w obsłudze pulpit nawigacyjny. To naprawdę dobra okazja, aby użyć ich zamiast wydać ani grosza na to w domu.
Problemy w określaniu zakresu i projektowaniu
Zdefiniowanie, określenie ilościowe, a następnie ciągły pomiar dostępności usługi jest większym wyzwaniem niż pisanie rozwiązania problemów z dostępnością.
Zdefiniowanie i zmierzenie „dostępności” jest trudniejsze niż oczekiwano
Wielu interesariuszy ma odmienne zdanie na temat dostępności, a to, co może się zdarzyć, to definicja preferowana przez osobę z najwyższą pensją przewyższa inną definicję. Jest to czasami poprawna definicja, ale często ekosystem nie opiera się na pomiarze tego samego, ponieważ ta idealna definicja jest bardzo trudna do zmierzenia, nie mówiąc już o monitorowaniu w czasie rzeczywistym. Jeśli masz definicję dostępności, której nie można monitorować w czasie rzeczywistym, znajdziesz swój własny projekt podobny do siebie z niesamowitymi podobieństwami. Trzymaj się czegoś, co ma sens i czegoś, co można łatwo monitorować.
Ludzie nie doceniają złożoności zawsze dostępnego systemu.
Aby zająć się słoniem w pokoju, powiem tak: „Żaden system wielu komputerów nie jest w 100% dostępny, może w przyszłości, ale nie przy obecnej technologii”. Tutaj przez obecną technologię mam na myśli naszą niemożność wysyłania sygnałów szybciej niż prędkość światła i tym podobne. Wszyscy inżynierowie comp-sci, którzy są godni swojej wiedzy, znają ograniczenia przetwarzania rozproszonego , a większość z nich nie wspomina o tym na spotkaniach, obawiając się, że będą wyglądać jak nooby. Aby zrekompensować wszystkim, którzy nie wspominają o ograniczeniach przetwarzania rozproszonego , powiem, że jest to skomplikowane, ale nie zawsze ufają komputerom .
Ludzie przeceniają swoje możliwości inżyniera
Niestety dostępność należy do kategorii, w której nie wiesz, czego chcesz, ale wiesz, czego nie chcesz. Jest to nieco trudniejsze, jeśli chodzi o kategorię „Poznaj potrzeby”, taką jak interfejs użytkownika. Wymaga odrobiny doświadczenia i dużo czytania, aby uczyć się na doświadczeniach innych i jeszcze więcej.
Budowanie dostępnego systemu od podstaw
Upewnij się, że będziesz ewangelizował dla każdego zespołu architektury i projektantów o właściwym priorytecie dostępności jako wymaganiu systemowym.
Atrybuty systemu zwiększające dostępność
Wykazano, że następujące cechy systemu przyczyniły się do dostępności systemu:
Nadmiar
Oto niektóre przykłady tego, że nigdy nie ma tylko jednej maszyny wirtualnej za VIP-em ani nigdy nie przechowuje tylko jednej kopii danych. Są to pytania, które dobry IAAS ułatwi ci do rozwiązania, ale nadal będziesz musiał podjąć te decyzje.
Modułowość
Modułowy REST jest lepszy niż monolityczny SOA. Jeszcze modułowy microservice jest rzeczywiście bardziej dostępne niż zwykłe HATEOS REST . Rozumowanie można znaleźć w dyskusji dotyczącej wydajności w następnej sekcji. Jeśli wykonujesz przetwarzanie wsadowe, lepiej jest przetwarzanie wsadowe w rozsądnej partii 10s w porównaniu do przetwarzania partii 1 000 000.
Odporność
"I am always angry"
- Hulk
Odporny system jest zawsze gotowy do przywrócenia. Ta odporność dotyczy instancji takich jak potwierdzanie ACK zapisu tylko po zapisaniu na dysku RAID i ewentualnie w co najmniej dwóch centrach danych. Innym najnowszym trendem jest stosowanie bezkonfliktowych struktur danych , w których struktura danych przyjmuje odpowiedzialność za rozwiązywanie konfliktów, gdy są prezentowane w dwóch różnych wersjach. System nie może być odporny na później, należy go przewidzieć i wbudować. Awaria jest gwarantowana przez długi czas, dlatego zawsze powinniśmy być przygotowani z planem powrotu do zdrowia.
Szlak dziennika
Jest to technicznie podtyp Odporności, ale bardzo wyjątkowy, ponieważ posiada wszystkie możliwości. Pomimo dołożenia wszelkich starań możemy nie być w stanie przewidzieć wzorca niedostępności. Jeśli to możliwe, zachowaj wystarczającą liczbę rejestrów działań systemu, aby móc odtwarzać zdarzenia systemowe. Pozwoli to, przy wielkich kosztach ręcznych, na wyjście z nieprzewidzianych sytuacji.
Atrybuty dostępności
Niewyczerpująca lista atrybutów „dostępność” na początku umysłu: Dla celów dyskusji załóżmy, że pytanie, które zadaje użytkownik, brzmi: „Ile przedmiotów mam w koszyku?”.
Poprawność
Czy musisz udzielić możliwie najdokładniejszej odpowiedzi, czy też możesz popełniać błędy? Tylko w celach informacyjnych, kiedy wypłacasz pieniądze z bankomatu, nie ma gwarancji, że są poprawne. Jeśli bank stwierdzi, że popełnił błąd, być może cofniesz transakcje. Jeśli twój system generuje liczby pierwsze, zgaduję, że możesz chcieć przez cały czas właściwych odpowiedzi.
Wydajność
Pomiń ten punkt, jeśli zawsze odpowiedziałeś poprawnie na poprzednie pytanie tematyczne. Czasami odpowiedź na pytania nie musi być precyzyjna, np. Ilu przyjaciół mam teraz na Facebooku? Oczekuje się jednak, że odpowiedź będzie cały czas na boisku +/- 1. Kiedy osiągasz oczekiwany wynik, wydajność wynosi 100.
Konsystencja
Twoja odpowiedź może być poprawna w pewnym momencie, ale zanim światło opuści ekran i wejdzie do siatkówki obserwatora, wszystko może się zmienić. Czy to sprawia, że twoja odpowiedź jest zła? Nie, to tylko powoduje, że jest to niespójne. Większość aplikacji jest ostatecznie spójna, ale sztuczka polega na określeniu, jaki rodzaj modelu spójności ma zapewnić twoja aplikacja. Przez przypadek twoja aplikacja może działać na jednym komputerze, możesz pominąć tę cudowną lekturę na temat twierdzenia CAP .
Koszt
Wiele zależy od tego, jaki łączny wpływ efektów krótkoterminowych (utrata dochodów) i efektów długoterminowych (zła reputacja, utrzymanie klientów). W zależności od rodzaju klienta (płatny / bezpłatny, powtarzalny / niepowtarzalny, w niewoli) i dostępności zasobów należy wprowadzić różne poziomy gwarancji dostępności.
W kierunku poprawy dostępności istniejącego systemu
Zarządzanie operacyjne poszczególnymi maszynami i siecią jest tak złożone, że zakładam, że pozostawiłeś ją dostawcy usług w chmurze lub jesteś już wystarczająco ekspertem, aby wiedzieć, co robisz. Dotknę innych tematów w miarę dostępności. Dla długoterminowej strategii Zdefiniuj-Zmierz-Analizuj-Kontrola to niebiańskie połączenie, coś, co sam widziałem.
- Zdefiniuj „dostępność” dla swoich interesariuszy
- Jak zmierzysz to, co zdefiniowałeś
- Analiza przyczyn źródłowych w celu zidentyfikowania wąskich gardeł
- Zadania dotyczące ulepszeń
- Ciągłe monitorowanie ( kontrola ) systemu
Przyczyny niedostępności
Ponieważ zgodziliśmy się, że zarządzanie operacyjne, które obejmie zarządzanie infrastrukturą fizyczną, powinno być wykonywane przez profesjonalistów, w związku z kompletnością dotknę innych przyczyn niedostępności. Dostępność IMO powinna również obejmować brak oczekiwanego zachowania, co oznacza, że jeśli użytkownikowi nie zostanie przedstawione oczekiwane doświadczenie, coś jest niedostępne. Mając na uwadze tę szeroką definicję, następujące czynniki mogą spowodować niedostępność: - Błędy w kodzie - Przypadki bezpieczeństwa - Problemy z wydajnością