W prawdziwym świecie, mogą wystąpić sytuacje, w których spadek wydajności serwerów może wystąpić z powodu zdarzeń, począwszy od nagłego skoku ruchu może prowadzić do nagłej awarii zasilania. Może być znacznie gorzej i Twoje serwery mogą zostać sparaliżowane – niezależnie od tego, czy Twoje aplikacje są hostowane w chmurze czy na fizycznej maszynie. Takich sytuacji nie da się uniknąć. Jednak zamiast mieć nadzieję, że nie wystąpią, to co powinieneś zrobić, to przygotować się tak, aby Twoje systemy nie napotkały awarii.
Odpowiedzią na ten problem jest użycie konfiguracji lub architektury wysokiej dostępności (HA). Architektura wysokiej dostępności to podejście polegające na zdefiniowaniu komponentów, modułów lub implementacji usług systemu, który zapewnia optymalną wydajność operacyjną, nawet w czasie dużych obciążeń. Chociaż nie ma stałych zasad wdrażania systemów HA, istnieje ogólnie kilka dobrych praktyk, których należy przestrzegać, aby uzyskać jak najwięcej z najmniejszych zasobów.
Dlaczego go potrzebujesz?
Zdefiniujmy czas przestoju, zanim przejdziemy dalej. Przestój to okres czasu, w którym system (lub sieć) nie jest dostępny do użytku, lub nie reaguje. Przestój może spowodować ogromne straty dla firmy, ponieważ wszystkie ich usługi są zawieszone, gdy ich systemy są w dół. W sierpniu 2013, Amazon poszedł w dół na 15 minut (zarówno strony internetowej i usług mobilnych), a skończyło się utratą ponad $66000 za minutę. Są to ogromne liczby, nawet dla firmy o wielkości Amazon.
Istnieją dwa rodzaje przestojów – planowane i nieplanowane. Planowany przestój jest wynikiem konserwacji, której nie da się uniknąć. Obejmuje to stosowanie poprawek, aktualizację oprogramowania, a nawet zmiany w schemacie bazy danych. Nieplanowany przestój jest natomiast spowodowany jakimś nieprzewidzianym zdarzeniem, np. awarią sprzętu lub oprogramowania. Może się to zdarzyć z powodu przerw w dostawie prądu lub awarii komponentu. Zaplanowane przestoje są zazwyczaj wyłączone z obliczeń wydajności.
Głównym celem wdrożenia architektury wysokiej dostępności jest upewnienie się, że system lub aplikacja jest skonfigurowana do obsługi różnych obciążeń i różnych awarii z minimalnym lub bez przestojów. Istnieje wiele komponentów, które pomagają w osiągnięciu tego celu, a my omówimy je pokrótce.
Jak mierzona jest dostępność?
Organizacje, które planują w pełni wykorzystać infrastrukturę chmury, muszą również być w stanie sprostać wymaganiom dostępności 24/7. Dostępność może być mierzona jako procent czasu, w którym systemy są dostępne.
x = (n – y) * 100/n
Gdzie n to całkowita liczba minut w miesiącu kalendarzowym, a y to całkowita liczba minut, w których usługa jest niedostępna w danym miesiącu kalendarzowym. Wysoka dostępność odnosi się po prostu do komponentu lub systemu, który działa nieprzerwanie przez pożądanie długi okres czasu. Powszechnie przyjęty, ale prawie niemożliwy do osiągnięcia standard dostępności produktu lub systemu jest określany jako dostępność „pięciu dziewiątek” (99,999 procent). Wysoka dostępność jest wymogiem dla każdego przedsiębiorstwa, które ma nadzieję chronić swoją działalność przed ryzykiem związanym z awarią systemu. Ryzyko to może prowadzić do utraty przychodów w wysokości milionów dolarów.
Czy to naprawdę warte pieniędzy?
Fakt, że przejście na architekturę wysokiej dostępności daje wyższą wydajność jest w porządku, ale wiąże się z dużymi kosztami. Musisz zadać sobie pytanie, czy uważasz, że decyzja jest uzasadniona z punktu widzenia finansów.
Należy podjąć decyzję, czy dodatkowy czas sprawności jest naprawdę wart kwoty pieniędzy, która musi iść na to. Musisz zadać sobie pytanie, jak szkodliwe potencjalne przestoje mogą być dla Twojej firmy i jak ważne są Twoje usługi w prowadzeniu biznesu.
Jak to osiągnąć?
Teraz, gdy już zdecydowałeś się na to, omówmy sposoby jego wdrożenia. Nieintuicyjnie, dodawanie większej ilości komponentów do systemu nie pomaga w uczynieniu go bardziej stabilnym i osiągnięciu wysokiej dostępności. Może wręcz prowadzić do odwrotnej sytuacji, gdyż większa ilość komponentów zwiększa prawdopodobieństwo wystąpienia awarii. Nowoczesne projekty pozwalają na rozłożenie obciążeń na wiele instancji, takich jak sieć lub klaster, co pomaga w optymalizacji wykorzystania zasobów, maksymalizacji wydajności, minimalizacji czasów odpowiedzi i unikaniu przeciążenia jakiegokolwiek systemu w procesie znanym jako równoważenie obciążenia. Obejmuje on również przełączanie się na zasoby rezerwowe, takie jak serwer, komponent lub sieć w przypadku awarii aktywnego, znanego jako systemy Failover.
Użycie wielu serwerów aplikacji:
Wyobraź sobie, że masz jeden serwer do świadczenia usług i nagły skok ruchu prowadzi do jego awarii (lub rozbicia go). W takiej sytuacji, dopóki serwer nie zostanie ponownie uruchomiony, nie można obsłużyć więcej żądań, co prowadzi do przestoju.
Oczywistym rozwiązaniem jest tutaj wdrożenie aplikacji na wielu serwerach. Musisz rozłożyć obciążenie pomiędzy wszystkie z nich, tak aby żaden nie był przeciążony, a wydajność była optymalna. Możesz również wdrożyć części swojej aplikacji na różnych serwerach. Na przykład, może być oddzielny serwer do obsługi poczty lub oddzielny do przetwarzania plików statycznych, takich jak obrazy (jak Content Delivery Network).
Skalowanie baz danych:
Bazy danych są najbardziej popularnym i być może jednym z najbardziej koncepcyjnie prostych sposobów na zapisywanie danych użytkownika. Należy pamiętać, że bazy danych są równie ważne dla Twoich usług jak serwery aplikacyjne. Bazy danych działają na osobnych serwerach (jak Amazon RDS) i również są podatne na awarie. Co gorsza, awarie baz danych mogą prowadzić do utraty danych użytkowników, co może okazać się kosztowne.
Redundancja jest procesem, który tworzy systemy o wysokim poziomie dostępności poprzez osiągnięcie wykrywalności awarii i unikanie awarii o wspólnej przyczynie. Można to osiągnąć poprzez utrzymywanie serwerów podrzędnych, które mogą wkroczyć do akcji w przypadku awarii serwera głównego. Inną ciekawą koncepcją skalowania baz danych jest sharding. Shard jest poziomą partycją w bazie danych, gdzie wiersze tej samej tabeli są uruchamiane na oddzielnym serwerze.
Zróżnicowane lokalizacje geograficzne:
Skalowanie aplikacji, a następnie baz danych jest naprawdę dużym krokiem naprzód, ale co jeśli wszystkie serwery znajdują się w tej samej lokalizacji fizycznej i coś strasznego, jak klęska żywiołowa, dotyka centrum danych, w którym znajdują się serwery? To może prowadzić do potencjalnie ogromnych przestojów.
Jest zatem konieczne, aby utrzymać swoje serwery w różnych lokalizacjach. Większość nowoczesnych usług internetowych pozwala na wybór lokalizacji geograficznej serwerów. Powinieneś wybrać mądrze, aby upewnić się, że twoje serwery są rozmieszczone na całym świecie, a nie zlokalizowane w jednym obszarze.
W tym poście, starałem się dotknąć podstawowych pomysłów, które tworzą ideę architektury wysokiej dostępności. W ostatecznej analizie, jest oczywiste, że żaden pojedynczy system nie może rozwiązać wszystkich problemów. Dlatego też, należy dokładnie ocenić swoją sytuację i zdecydować, jakie opcje odpowiadają im najlepiej. Mamy nadzieję, że to wprowadziło Cię w świat architektury wysokiej dostępności i pomogło Ci zdecydować, jak osiągnąć ten cel dla siebie.
Jakie są najlepsze praktyki?
Aby ograniczyć awarie systemu i utrzymać zarówno planowane, jak i nieplanowane przestoje na dystans, korzystanie z architektury wysokiej dostępności (HA) jest wysoce zalecane, szczególnie w przypadku aplikacji o znaczeniu krytycznym. Eksperci ds. dostępności nalegają, aby każdy system był wysoce dostępny, jego części powinny być dobrze zaprojektowane i rygorystycznie przetestowane. Projektowanie i późniejsze wdrażanie architektury wysokiej dostępności może być trudne ze względu na szeroki zakres oprogramowania, sprzętu i opcji wdrażania. Jednak udana próba zwykle zaczyna się od wyraźnie zdefiniowanych i kompleksowo zrozumianych wymagań biznesowych. Wybrana architektura powinna być w stanie spełnić pożądane poziomy bezpieczeństwa, skalowalności, wydajności i dostępności.
Jedynym sposobem na zagwarantowanie środowiskom obliczeniowym pożądanego poziomu ciągłości operacyjnej w godzinach produkcji jest zaprojektowanie ich z wysoką dostępnością. Oprócz właściwego zaprojektowania architektury, przedsiębiorstwa mogą utrzymać kluczowe aplikacje w trybie online, przestrzegając zalecanych najlepszych praktyk w zakresie wysokiej dostępności.
- Kopie zapasowe, odzyskiwanie i replikacja danych
Cechą charakterystyczną dobrego planu ochrony danych, który chroni przed awarią systemu, jest solidna strategia tworzenia kopii zapasowych i odzyskiwania danych. Cenne dane nigdy nie powinny być przechowywane bez odpowiednich kopii zapasowych, replikacji lub możliwości ich odtworzenia. Każde centrum danych powinno z wyprzedzeniem planować na wypadek utraty lub uszkodzenia danych. Błędy w danych mogą powodować problemy z uwierzytelnianiem klientów, niszczyć konta finansowe, a w konsekwencji wiarygodność społeczności biznesowej. Zalecaną strategią zachowania integralności danych jest tworzenie pełnej kopii zapasowej podstawowej bazy danych, a następnie przyrostowe testowanie serwera źródłowego pod kątem uszkodzeń danych. Tworzenie pełnych kopii zapasowych jest podstawą odzyskiwania danych po katastrofalnej awarii systemu.
- Clustering
Nawet przy najwyższej jakości inżynierii oprogramowania wszystkie usługi aplikacji muszą w pewnym momencie zawieść. Wysoka dostępność polega na dostarczaniu usług aplikacji niezależnie od awarii. Klastrowanie może zapewnić natychmiastowe przełączanie awaryjne usług aplikacyjnych w przypadku awarii. Usługa aplikacji, która jest „świadoma klastra”, jest zdolna do wywoływania zasobów z wielu serwerów; powraca do serwera pomocniczego, jeśli główny serwer przestanie działać. Klaster wysokiej dostępności obejmuje wiele węzłów, które współdzielą informacje za pośrednictwem współdzielonych siatek pamięci danych. Oznacza to, że każdy węzeł może zostać odłączony lub wyłączony z sieci, a reszta klastra będzie działać normalnie, o ile przynajmniej jeden węzeł jest w pełni funkcjonalny. Każdy węzeł może być indywidualnie modernizowany i ponownie dołączany do klastra w trakcie jego działania. Wysokie koszty zakupu dodatkowego sprzętu w celu wdrożenia klastra można złagodzić, tworząc zwirtualizowany klaster, który wykorzystuje dostępne zasoby sprzętowe.
- Balansowanie obciążenia sieci
Balansowanie obciążenia jest skutecznym sposobem zwiększenia dostępności krytycznych aplikacji internetowych. W przypadku wykrycia awarii serwerów są one bezproblemowo zastępowane, gdy ruch jest automatycznie redystrybuowany do serwerów, które nadal działają. Równoważenie obciążeń nie tylko prowadzi do wysokiej dostępności, ale także ułatwia przyrostową skalowalność. Równoważenie obciążenia sieci może być realizowane zarówno w modelu „pull” jak i „push”. Ułatwia to osiągnięcie wyższego poziomu odporności na błędy w ramach aplikacji usługowych.
- Rozwiązania typu fail over
Architektura wysokiej dostępności tradycyjnie składa się z zestawu luźno połączonych serwerów, które mają możliwość przełączania awaryjnego. Failover to zasadniczo zapasowy tryb operacyjny, w którym funkcje komponentu systemu są przejmowane przez system drugorzędny w przypadku, gdy system podstawowy przestaje działać z powodu awarii lub planowanego czasu przestoju. Przełączenie „na zimno” ma miejsce, gdy serwer drugorzędny jest uruchamiany dopiero po całkowitym wyłączeniu serwera głównego. Gorące przełączenie awaryjne” ma miejsce, gdy wszystkie serwery działają jednocześnie, a obciążenie jest w całości kierowane na jeden serwer w danym momencie. W obu scenariuszach zadania są automatycznie przenoszone na komponent systemu rezerwowego, tak aby proces pozostał możliwie bezproblemowy dla użytkownika końcowego. Failover może być zarządzany poprzez DNS, w dobrze kontrolowanym środowisku.
- Redundancja geograficzna
Redundancja geograficzna jest jedyną linią obrony, jeśli chodzi o zapobieganie awarii usług w obliczu katastrofalnych wydarzeń, takich jak klęski żywiołowe, które powodują awarie systemu. Podobnie jak w przypadku georeplikacji, wiele serwerów jest rozmieszczonych w geograficznie odrębnych lokalizacjach. Lokalizacje te powinny być rozmieszczone globalnie, a nie zlokalizowane w określonym obszarze. Istotne jest, aby uruchomić niezależne stosy aplikacji w każdej z lokalizacji, tak aby w przypadku awarii w jednej lokalizacji, druga mogła kontynuować pracę. W idealnym przypadku lokalizacje te powinny być od siebie całkowicie niezależne.
- Planowanie na wypadek awarii
Pomimo faktu, że stosowanie najlepszych praktyk w zakresie wysokiej dostępności jest zasadniczo planowaniem na wypadek awarii, istnieją inne działania, które organizacja może podjąć w celu zwiększenia swojej gotowości w przypadku awarii systemu prowadzącej do przestoju. Organizacje powinny przechowywać dane dotyczące awarii lub zużycia zasobów, które mogą być wykorzystane do izolowania problemów i analizowania trendów. Dane te mogą być gromadzone jedynie poprzez ciągłe monitorowanie obciążenia operacyjnego. W celu zebrania informacji o problemach, ustalenia historii problemów i rozpoczęcia natychmiastowego rozwiązywania problemów można utworzyć dział pomocy w zakresie odzyskiwania danych. Plan odzyskiwania danych powinien być nie tylko dobrze udokumentowany, ale również regularnie testowany, aby zapewnić jego praktyczność w przypadku nieplanowanych zakłóceń. Szkolenie pracowników w zakresie inżynierii dostępności zwiększy ich umiejętności w zakresie projektowania, wdrażania i utrzymywania architektur wysokiej dostępności. Należy również wprowadzić politykę bezpieczeństwa, aby ograniczyć przypadki przestojów systemu spowodowanych naruszeniem bezpieczeństwa.
Przykład: Architektura FileCloud High Availability
Następujący diagram wyjaśnia, jak serwery FileCloud mogą być skonfigurowane do High Availability w celu poprawy niezawodności usług i zmniejszenia przestojów. Kliknij tutaj, aby uzyskać więcej szczegółów.