To, o co prosisz, to w zasadzie wysoka dostępność. Aby system był wysoce dostępny, potrzebujesz trzech rzeczy:
- Wyeliminuj pojedyncze punkty awarii
- Mechanizm przełączania z punktu końcowego na inny
- Sposób na wykrycie awarii
Wyeliminuj pojedyncze punkty awarii
W przypadku S3, punkt # 1 jest rozwiązany, jak wskazał Evgeny, przez replikację między regionami S3 .
Replikacja nie jest jednak natychmiastowa i będziesz chciał sprawdzić, czy chcesz, aby replikacja aplikacji była świadoma, czy nie. W przypadku awarii może się zdarzyć, że coś, co zostało zapisane w źródłowym segmencie, jeszcze go nie uczyniło (nie zostało zreplikowane) w docelowym segmencie. Musisz pomyśleć, jak aplikacja poradziłaby sobie z takim scenariuszem. To naprawdę zależy od rodzaju danych, tego, co się z nimi dzieje i (potencjalnie) oczekiwań użytkowników końcowych lub kierownictwa.
Mechanizm przełączania z punktu końcowego na inny
W przypadku S3 oznacza to, że w przypadku awarii chcesz, aby aplikacja przestała czytać i zapisywać z / do segmentu A i zamiast tego używała segmentu B.
O tym, jak to osiągnąć, zależy od ciebie. Niektóre inne usługi AWS oferują całkowicie transparentne przełączenia awaryjne, ale w tej chwili nie jestem świadomy czegoś takiego dla S3.
Istnieją różne sposoby osiągnięcia tego celu. Jednym z przykładów jest użycie serwera proxy, który przekieruje ruch do odpowiedniego segmentu. Podczas awarii należy zaktualizować / zmienić serwer proxy, aby kierować ruch do segmentu, na który nie ma wpływu awaria. Innym przykładem może być dynamiczna konfiguracja aplikacji i przechowywanie jej w magazynie klucz-wartość. Jeśli aplikacja dość często odczytuje magazyn KV w celu zaktualizowania właściwości, możesz zmienić miejsce odczytu i zapisu (Spring Cloud obsługuje na przykład nasłuchiwanie „EnvironmentChange”).
Sposób na wykrycie awarii
Myślę, że ten jest łatwy. Wystarczy skonfigurować pętlę zapisu + odczytu i powiadomić, gdy tylko coś będzie nie tak :)
Notatki końcowe
- Jeśli aplikacja pisze do wiadra, musisz pomyśleć o tym, co by się stało w przypadku przełączenia awaryjnego. Czy wszystkie zapisy dotarły do segmentu docelowego (i czy możesz powiedzieć)? Czy możesz zezwolić na zapisy w segmencie docelowym (co czyni go nowym „podstawowym”)? Staranne planowanie pozwoli uniknąć scenariuszy podzielonego mózgu lub utraconych aktualizacji.
- W zależności od umowy SLA możesz chcieć, aby punkty 2 i 3 były zautomatyzowane lub automatyczne. Wymaga to dodatkowego planowania, oprzyrządowania i testowania, ale dobrze napisane skrypty zawsze będą reagować szybciej i w bardziej przewidywalny sposób niż ludzie (awarie mają również irytujący zwyczaj zdarzania się w środku nocy, gdy interwencja człowieka jest czymś niebezpiecznym.
- Warto wspomnieć, że nawet replikacja między regionami nie eliminuje całkowicie pojedynczych punktów awarii. Jasne, jeśli region upadnie, jesteś objęty ubezpieczeniem. Ale co się stanie, jeśli nastąpi awaria AWS w USA? Azure miał częściową, ale globalną awarię w ubiegłym roku i jedną w 2014 r.