e-Commerce w ChmurzeHandel

Wdrażanie w wielu centrach danych (Multimaster)



Tu skupimysię na jednej platformie e-commerce i uruchomieniu jej z dwóch lub więcej fizycznych centrów danych, które są geograficznie od siebie oddzielone. Chociaż zakłada się, że te centra danych znajdują się w chmurze, większość zasad omówione mają zastosowanie do tradycyjnych uzgodnień dotyczących hostingu. Zaczniemy od omówienia podstawowego problemu prowadzenia eCommerce z wielu centrów danych, zasad architektury leżących u podstaw przetwarzania rozproszonego, jak przypisywać klientów do poszczególnych centrów danych, a wreszcie różnych podejść do działania z wielu centrów danych. Wielu dostawców e-commerce działa już z dwóch centrów danych z pewną pojemnością, aby zapewnić najwyższą możliwą dostępność. Trend ten przyspieszy w nadchodzących latach, ponieważ platformy e-commerce stają się coraz ważniejsze dla biznesu. W dzisiejszym świecie wielokanałowym awaria w coraz większym stopniu powoduje zamknięcie każdego kanału w celu generowania przychodów. Kiedyś awaria strony była oczywiście nieprzyjemna, ale była odizolowana od tego kanału. Obecnie wiele systemów sprzedaży, kiosków i aplikacji mobilnych korzysta z tej samej platformy. Przerwy w dzisiejszych czasach mają miejsce na całej platformie, a zatem wpływają na wszystkie kanały. Przed naruszeniem bezpieczeństwa przedłużające się lub powtarzające się przerwy są najpewniejszym sposobem na utratę pracy. Wdrożenie tej samej platformy w dwóch lub więcej centrach danych w konfiguracji aktywnej / pasywnej lub wielopunktowej pomaga zapewnić dostępność, zapewniając odporność na klęski żywiołowe (np. Huragany, tajfuny, pożary, powodzie), błędy ludzkie (np. Przecięcia kabli, błędne konfiguracje) , przerwy w dostawie (np. utrata zasilania, utrata połączenia z Internetem) i problemy z oprogramowaniem (np. błędy, problemy z aktualizacją). Jest na przykład mało prawdopodobne, aby na dowolne dwa centra danych na świecie wpłynął ten sam pożar lub przecięcie kabla. W każdym centrum danych powinna istnieć nadmiarowość i ogólnie działa bardzo dobrze. Ale czy mógłbyś zaufać swojemu dostawcy usług w chmurze i gwarancjom zastosowanym przez dostawcę w każdym centrum danych? Jak wielokrotnie widzieliśmy, jedynym sposobem na zapewnienie dostępności jest użycie wielu centrów danych, najlepiej jak najdalej od siebie. Historycznie platformy e-commerce zostały zaprojektowane z myślą o najlepszej możliwej dostępności, zwykle tylko w jednym centrum danych. Nacisk na dostępność ma pierwszeństwo: detaliczne systemy sprzedaży. Większość systemów w punktach sprzedaży ma dwie lub więcej unikalnych metod połączenia z domowym biurem w celu wykonania kluczowych funkcji, takich jak ładowanie kart kredytowych i wystawianie zwrotów. Połączenie telefoniczne jest nadal powszechnie używane jako kopia zapasowa. Jeśli podstawowy i zapasowy nie powiedzie się, wielu sprzedawców będzie nadal przyjmować zamówienia o wartości poniżej 25 USD lub 50 USD, a następnie przeprowadzi autoryzację karty kredytowej w późniejszym terminie, kiedy połączenie będzie można ponownie nawiązać. Chociaż możliwe jest, że kilka opłat nie zostało pomyślnie autoryzowanych, strata prawdopodobnie będzie niższa niż koszt braku otwarcia dla firmy. Wiele systemów e-commerce działa w ten sam sposób: jeśli brama płatności, system zarządzania zapasami lub inny system jest wyłączony, system może nadal odbierać zamówienia, ale czekać na faktyczne obciążenie kart kredytowych, zmniejszenie zapasów i tak dalej. Zaletą transakcji e-commerce jest to, że wszelkie wykryte problemy można naprawić przed wysyłką towarów. W fizycznym sklepie detalicznym klienci wychodzą z produktami. Jeśli później okaże się, że autoryzacja karty kredytowej nie powiodła się, nie możesz odzyskać produktów. Podczas gdy potrzeba dostępności rośnie, chmura i jej wymagania sprawiają, że obsługa z wielu centrów danych jest jeszcze łatwiejsza i bardziej przystępna cenowo. Automatyczne skalowanie, instalowanie oprogramowania na nowo wyposażonym sprzęcie, solidna architektura i globalne równoważenie obciążenia serwera są podstawą działania z wielu centrów danych. Sama chmura i wprowadzana przez nią elastyczność sprawiają, że obsługa z wielu centrów danych jest niezwykle tania. Przed przetwarzaniem w chmurze każde centrum danych, z którego działałeś, musiało mieć wystarczający sprzęt, aby móc obsłużyć 100% ruchu produkcyjnego na wypadek jedno z centrów danych miało awarię. Cały ten sprzęt zwykle pozostaje bezczynny przez prawie kilka minut w roku. Zbudowanie całej drugiej (lub trzeciej) repliki jest niezwykle kosztowne - zarówno pod względem nakładów kapitałowych z góry, jak i bieżącej konserwacji. Wprowadzenie chmury całkowicie to zmienia. Możesz mieć infrastrukturę powłoki i szybko ją skalować w razie awarii. Wszystko to zależy od tego, jak dobrze instalujesz oprogramowanie na nowo wyposażonym sprzęcie, od tego, jak dobra jest twoja architektura, od tego, czy korzystasz z równoważenia obciążenia globalnego serwera i od tego, jak dobrze możesz skalować automatycznie. Bez odpowiedniego spełnienia tych wymagań nie powinieneś nawet tego próbować. Podobnie jak sama chmura, przyjęcie architektury wielostanowiskowej tylko pogarsza techniczne i nietechniczne braki.

Główny problem działania z wielu centrów danych

Główny problem z działaniem z wielu centrów danych, który jest dość unikalny dla e-commerce, polega na tym, że możesz mieć wielu klientów logujących się przy użyciu tego samego konta (np. Kombinacji nazwy użytkownika i hasła) z różnych centrów danych. Każde konto ma swój własny profil klienta, koszyk i inne dane. Dane te są przechowywane w jakiejś bazie danych, przy czym wszystkie te dane muszą być replikowane w różnych centrach danych, z których obsługiwana jest platforma. Żadne podstawowe dane w e-commerce, takie jak profile klientów i koszyki, nie mogą zostać utracone. Problemem, który tworzy wiele równoczesnych logowań, jest to, że jeśli dwóch klientów zaktualizuje te same dane w tym samym czasie z dwóch różnych lokalizacji, jedno działanie klienta zakończy się sukcesem, a drugie zakończy się niepowodzeniem, co może spowodować uszkodzenie danych po drodze. Z powodu opóźnień baza danych w jednym centrum danych nie wie w czasie rzeczywistym, co się dzieje w bazie danych w innym centrum danych. O ile nie zablokujesz równoczesnego logowania, zawsze będzie występował problem wielu aktualizacji z różnych centrów danych. Zaskakująco często zdarza się, że wiele różnych logowań dla tego samego konta znajduje się w różnych centrach danych. Może się tak zdarzyć, gdy klienci udostępniają swoje dane logowania w rodzinie, znajomym i coraz częściej w mediach społecznościowych. Lojalni klienci otrzymują specjalne rabaty, więc istnieje silna zachęta do dzielenia się danymi logowania, aby uzyskać lepszą ofertę lub po prostu dla wygody. Ten problem może się również zdarzyć, gdy agenci contact center modyfikują zamówienie w tym samym czasie, co klient. Wyobraź sobie scenariusz, do którego dzwoni klient centrum kontaktowe w celu zaktualizowania zamówienia, ale aktywnie kontynuuje próbę rozwiązania problemu podczas rozmowy telefonicznej. Te scenariusze są powszechne. Kosztem awarii są ogólnie uszkodzone dane. Problem ten narasta, ponieważ:

•  Klienci dokonują transakcji w większej liczbie kanałów z większej liczby urządzeń.
•  Dostawcy e-commerce kierują reklamy do segmentów lub określonych klientów, zwiększając w ten sposób motywację do dzielenia się kontami.
•  Media społecznościowe nadal umożliwiają klientom udostępnianie kont.

Sposobem na zmniejszenie (ale nie wyeliminowanie) prawdopodobieństwa wystąpienia tego scenariusza jest użycie dokładnego równoważenia obciążenia globalnego serwera opartego na bliskości, co zapewnia, że klienci w tym samym mieście, stanie, zbiorze stanów, kraju lub kontynencie uderzą w to samo Centrum danych. Więc jeśli klient jest w jednym pokoju na iPadzie, a jego córka jest w drugim na laptopie, obaj powinni przynajmniej uderzyć w to samo centrum danych i dokonać transakcji z tą samą bazą danych. Omówimy to wkrótce.

Zasady architektury

Chociaż istnieją metody zmniejszania prawdopodobieństwa wystąpienia kolizji, problem należy kompleksowo rozwiązać. Zepsujesz swoje dane i zdenerwujesz klientów, jeśli nic nie zrobisz lub jeśli zastosujesz złe rozwiązanie. Zasadą, której należy przestrzegać, jest upewnienie się, że wszyscy klienci zalogowani do tego samego konta aktualizują tę samą bazę danych (lub inny system zapisu) w ramach jednej logicznej bazy danych. Możesz mieć dwie lub więcej aktywnych baz danych z pełną dwukierunkową replikacją, ale wszystkie zapisy dla danego konta muszą mieć tę samą logikę bazę danych w tym samym centrum danych. Dwa czynniki w dużej mierze determinują wybrane przez ciebie podejście:

Cel czasu regeneracji (RTO)

Jak szybko musisz wyjść z awarii centrum danych? Zakres wartości wynosi od zera do wielu godzin, w zależności od wybranego podejścia. Jeśli wdrażasz tylko z jednego centrum danych, ta wartość może wynosić tygodnie. Aktywny / pasywny trwa zwykle co najmniej godzinę. Formy aktywne / aktywne zwykle zapewniają zerowe przestoje, nawet w przypadku całkowitego wyłączenia centrum danych. Im niższa wartość RTO, tym więcej pracy i większy koszt.

Zdolność do wykonywania

Jak dobrze ty i Twoja organizacja robicie trudne rzeczy? Wszystko to jest bardzo skomplikowane, szczególnie z chmurą wrzuconą do mieszanki. Wdrożenie wymaga znacznej wiedzy technicznej, czasu, pełnego wsparcia organizacyjnego i dużej ilości pieniędzy. Jeśli masz problem z utrzymaniem platformy dostępnej z jednego centrum danych, którym zarządzasz, wdrożenie jej w dwóch lub więcej centrach danych w chmurze nie jest czymś, co powinieneś rozważyć. Cel punktu odzyskiwania (RPO) określa, ile danych można utracić, i zwykle stanowi podstawę planowania ciągłości działania. Jednak nikt zaangażowany w e-commerce nie ma nic przeciwko zerowym wartościom dla podstawowych danych, takich jak profile klientów i koszyki. Utrata danych jest po prostu nie do przyjęcia dla niektórych klas danych. Zasady i podejścia w tej części są zorientowane wokół tego założenia.

Zasady rządzące przetwarzaniem rozproszonym

Za komputerami rozproszonymi kryje się ogromna literatura naukowa i branżowa na temat informatyki. Dogłębna dyskusja na temat tych zasad nie wchodzi w zakres tej książki, ale krótki przegląd zasad i kompromisów związanych z przetwarzaniem rozproszonym jest właściwy przed kontynuowaniem. Modele spójności regulują warunki, w których zapis w rozproszonej bazie danych będzie widoczny dla innych czytelników. Rozproszona baza danych może być pojedynczą instancją bazy danych złożoną z wielu węzłów lub wielu instancji bazy danych w różnych centrach danych. Bazy danych mają tendencję do podążania za jednym modelem spójności lub odmianą tego modelu. Modele spójności mają zastosowanie do wszystkich problemów przetwarzania rozproszonego w informatyce, od systemów plików po pamięć. Silna spójność, znana jako ACID, oznacza:

Atomicity (Atomowość) : Cała transakcja kończy się powodzeniem lub niepowodzeniem.
Consistency (Konsystencja) : Transakcja zostaje popełniona bez naruszenia jakichkolwiek ograniczeń integralności (np. Typ danych, czy kolumna ma wartość zerową, ograniczenia klucza obcego).
Isolation (Izolacja) ; Każda transakcja jest wykonywana we własnym prywatnym obszarze izolowanym i nie jest widoczna dla żadnej innej transakcji, dopóki nie zostanie zatwierdzona.
Durability (Trwałość) : Dokonana transakcja nie zostanie utracona.

Zakłada się, że wszystkie transakcje powinny być zgodne z ACID, ale często jest to niepotrzebne. Na przykład dane związane z produktem (np. Opis, atrybuty i metadane związane z optymalizacją wyszukiwarki) można prawdopodobnie zapisać w jednym węźle w jednej bazie danych i propagować asynchronicznie w innych węzłach i bazach danych. Jeśli czytelnicy zobaczą niespójne dane przez kilka sekund, prawdopodobnie nie jest to wielka sprawa. Bardzo mało danych musi być bardzo spójnych. Klienci nie będą tolerować nie widzieć profilu klienta a zmiany związane z zamówieniami są natychmiast odzwierciedlane. Podstawowe dane klientów powinny zawsze być przechowywane w bazie danych zgodnej z ACID. Zmuszając wszystkich klientów zalogowanych do tego samego konta do korzystania z tej samej bazy danych, zapewniasz silną spójność danych konkretnego klienta we wszystkich instancjach bazy danych. Słaba konsystencja, znana jako BASE, pozwala uniknąć ciasnych ograniczeń ACID:

- Podstawowa dostępność
- System jest ogólnie dostępny do aktualizacji.
- Stan miękki

Dane nie są trwałe - mogą znajdować się w pamięci i mogą zostać utracone w przypadku awarii.

Ostateczna spójność

Czytelnik może nie widzieć najbardziej aktualnej kopii danych, ponieważ replikacja odbywa się asynchronicznie. BASE staje się coraz bardziej powszechny, ponieważ zapisy są znacznie szybsze, a systemy znacznie bardziej skalowalne, a kompromis w spójności wystarcza dla wielu rodzajów danych. Wszystkie popularne platformy mediów społecznościowych są w większości PODSTAWOWE. Ponownie tylko stosunkowo niewielki podzbiór wymaga pełnej zgodności z ACID. Istnieje kontinuum między ACID a BASE. Musisz wybrać to, co najbardziej Ci odpowiada i każdy rodzaj danych, które musisz przechowywać. Często same bazy danych pozwalają na określenie pożądanego modelu spójności na dość szczegółowej podstawie. Oczywiście BASE jest prawdopodobnie wystarczający do napisania dziennika kontroli, podczas gdy dla zamówień wymagany jest ACID. A co z zapasami i cenami? To trochę szara strefa. Wymagane jest staranne rozważenie, a następnie wdrożenie. Żadna dyskusja na temat modeli spójności nie jest kompletna bez krótkiej dyskusji na temat twierdzenia CAP Erica Brewera, które stwierdza, że każdy system rozproszony może zagwarantować dwa z następujących trzech:

•  Konsystencja
•  Brak konfliktów danych
•  Dostępność
•  Brak pojedynczego punktu awarii
•  Tolerancja podziału
•  System utrzymuje dostępność i spójność, jeśli problem z siecią izoluje część systemu

Systemy rozproszone, szczególnie z chmurą obliczeniową, nie mogą zagwarantować tolerancji partycji, ponieważ połączenia między bazami danych są z natury zawodne. Dlatego musisz dokonać kompromisu między spójnością (faworyzuje ACID) a dostępnością (faworyzuje BAZA). Nie możesz mieć obu.

Unikanie konfliktów

Dwukierunkowe narzędzia do replikacji bazy danych mają zdolność wykrywania i rozwiązywania konfliktów. Wykrywanie i rozwiązywanie konfliktów jest integralną częścią tych ofert. Jeśli dwóch klientów aktualizuje to samo zamówienie w tym samym czasie z dwóch centrów danych w odległości 100 milisekund od siebie i obaj aktualizują ten sam rekord w tym samym czasie w tym oknie o długości 100 milisekund, nastąpi kolizja. Podobnie, jeśli dwóch klientów aktualizuje ten sam obiekt (np. Profil klienta lub zamówienie), nastąpi również kolizja. Poniższe przykłady ilustrują ten potencjalny problem. Klient 1, konto "kellygoetsch", centrum danych A:

update order set submitted = 1 where order_id='12345';
(100 milliseconds of latency)
Customer 2, account "kellygoetsch," data center B:
insert into order_lines (order_id, sku_id, quantity)
values ('12345', '54321', 1);

W tym przykładzie dwóch klientów wykonuje przeciwne działania: jeden składa zamówienie (wykonuje ostateczną wycenę, przesyła je do systemu zaplecza), a drugi dodaje kolejny element do zamówienia. To oczywiście doprowadzi do problemów. Nie możesz dodać elementu do zamówienia, jeśli zamówienie zostało złożone, ale inny klient nie wie, że zostało ono przesłane z powodu 100 milisekund opóźnienia. Ten przykład podkreśla główny problem związany z wykrywaniem i rozwiązywaniem konfliktów. Tak, często może to technicznie działać, ale wyniki mogą nie być zgodne z oczekiwaniami. Czy zamówienie tego klienta zostanie dostarczone wraz z SKU 54321? Czy jej karta kredytowa zostanie obciążona? Czy ta klientka chciała dodać ten przedmiot do koszyka, czy może to jej dziecko bawiło się na iPadzie w innym pokoju? Kto wie. To jest problem. Bardziej technicznym problemem jest to, że większość platform e-commerce pisze do bazy danych za pomocą systemu mapowania obiektowo-relacyjnego (ORM). Systemy te pozwalają na interakcję kodu z rzeczywistymi obiektami reprezentowanymi w kodzie, w przeciwieństwie do SQL. Na przykład możesz wywołać order.setProperty ("przesłane", prawda), w przeciwieństwie do ręcznego konstruowania zestawu zamówienia aktualizacji przesłanego = 1, gdzie order_id = 12345; SQL ręcznie. Systemy te generują ogromną liczbę instrukcji SQL, ponieważ zostały zbudowane z myślą o maksymalnej elastyczności i przenośności w przeciwieństwie do wydajności SQL. Dzięki jednemu działaniu (np. Dodaniu do koszyka) generującemu potencjalnie dziesiątki pojedynczych instrukcji SQL, możesz napotkać potencjalne niespójności, gdy niektóre aktualizacje i wstawki się powiodą, a inne zawiodą. Wyznaczenie działań na podstawie transakcji w bazie danych jest trudne, jeśli nie niemożliwe. Instrukcje SQL mają tendencję do przepływu z aplikacji do bazy danych w bałaganiarskich, nakładających się, nadmiernie szczegółowych transakcjach lub w ogóle bez transakcji. Niezwykle trudno jest wyznaczyć akcję (np. Dodanie przedmiotu do koszyka) z wyraźnymi granicami transakcji w bazie danych. Nawet jeśli udało Ci się uruchomić rozwiązywanie konfliktów i wykrywanie, radziłbyś sobie z problemem braku pamięci podręcznej. Platformy swobodnie buforują dane na wszystkich warstwach. Jak odświeżyć pamięć podręczną wyższego poziomu, obiektową po zastosowaniu zmiany replikacja bazy danych? Pamięć podręczna jest zwykle ustawiona na aktualizację tylko wtedy, gdy zmiany dokonano za pośrednictwem warstwy ORM. Ale kiedy zmiana zostanie zastosowana bezpośrednio do bazy danych, trudno jest powiedzieć platformie, jak zaktualizować swoje pamięci podręczne. Jeśli nie korzystasz z tradycyjnej relacyjnej bazy danych, nadal masz wiele takich samych problemów, ale tylko w innej formie. Kiedy masz do czynienia z obiektami lub parami klucz-wartość, kończysz nadpisywanie większej ilości danych, ponieważ systemy te nie są tak szczegółowe jak odpowiednia relacyjna baza danych ze znormalizowanymi danymi. Po prostu nadpiszesz całe zamówienie w przeciwieństwie do jego właściwości, ale jest to równie złe z powodu wszystkich współzależności między obiektami. Jedynym sposobem zapewnienia spójności jest upewnienie się, że wszyscy klienci zalogowani do tego samego konta aktualizują tę samą bazę danych lub inny system zapisu. To wciąż wymaga wyzwań, ale jest to przynajmniej status quo i te problemy można rozwiązać.

Wybór centrum danych

Przed rozpoczęciem przetwarzania w chmurze stały koszt działania z centrum danych był bardzo wysoki. Trzeba było fizycznie zbudować centrum danych lub wynająć trochę miejsca w istniejącym centrum danych. Następnie trzeba było statycznie zbudować swoje środowisko, tak aby mogło ono obsłużyć 100% obciążenia produkcyjnego, gdyby było to jedyne centrum danych lub inne centrum danych zostało wyłączone. Chmura sprawia, że niezwykle łatwe jest uruchamianie z wielu centrów danych, eliminując narzut związany z obsługą nowego centrum danych i umożliwiając elastyczne skalowanie w górę. Nie musisz już skalować środowiska tylko po to, aby pozostawało całkowicie bezczynne. Z punktu widzenia API centrum danych jest często tylko jeszcze jedną zmienną. Optymalna liczba centrów danych do obsługi to dwa lub trzy. Coś więcej niż to jest dość marnotrawstwem. Cokolwiek mniej, a nie masz wystarczającej redundancji, aby uchronić się przed awariami. Wielu powołuje się na ograniczenie opóźnień jako przyczynę budowy tak wielu centrów danych. Jak omówiliśmy w części 7, czas reakcji i opóźnienie po stronie serwera stanowią niewielki ułamek całkowitego czasu potrzebnego na wyświetlenie strony. Klienci rutynowo uzyskują dostęp do platform e-commerce hostowanych na różnych kontynentach. To, że chmura oferuje możliwość łatwego korzystania z wielu centrów danych, nie oznacza, że powinieneś. Dostawcy chmur mają wiele centrów danych na całym świecie, ale można je podzielić na segmenty według koncepcji domeny błędów. Każdy dostawca ma własną nazwę dla tej koncepcji, ale sprowadza się do tego, że istnieje niewiele zależności lub połączeń między centrami danych w różnych domenach błędów. Ta izolacja powinna zatrzymać rozprzestrzenianie się problemów w różnych domenach, zapewniając w ten sposób najwyższy poziom dostępności. Na przykład aktualizacje oprogramowania zwykle mają miejsce na podstawie domen błędów. Zawsze należy wybierać centra danych, które są geograficznie oddzielone (aby uniknąć tej samej klęski żywiołowej, przerwy w dostawie prądu lub pożaru), ale które również znajdują się w różnych domenach błędów. Ponownie wszystko czego potrzebujesz to dwa (a może trzy) centra danych, ale muszą być odpowiednio wybrane. Awarie w całej chmurze są wyjątkowo rzadkie, ale występują, jak omówiono w części 3. Aby uchronić się przed awarią w chmurze, możesz wdrożyć je u wielu dostawców chmury. Jest to sprzeczne z intuicją, ale może to faktycznie skrócić czas pracy, ponieważ dwóch dostawców powoduje co najmniej dwukrotny wzrost złożoności. Złożoność i błędna konfiguracja wynikające ze złożoności są główną przyczyną awarii. W połączeniu z bardzo wysoką dostępnością, działanie w dwóch centrach danych może nie zapewnić dodatkowego wzrostu dostępności, jakiego można się spodziewać.

Inicjowanie każdego centrum danych

Wykorzystanie chmury do e-commerce różni się zasadniczo od tradycyjnych wdrożeń statycznych ze względu na elastyczność zapewnianą przez chmurę. Nie trzeba już skalować każdego z centrów danych, aby obsłużyć 100% obciążenia produkcyjnego. Możesz teraz dowolnie skalować w górę i w dół, aby spełnić wymagania w czasie rzeczywistym. Problem z tym podejściem polega na tym, że w przypadku nagłej awarii mało prawdopodobne jest, aby zachowane środowisko (a) posiadało wystarczającą przepustowość, aby poradzić sobie z nagłym ruchem. W tym momencie system automatycznego skalowania powinien uruchomić się, aby rozpocząć udostępnianie większej ilości sprzętu. Po udostępnieniu sprzętu na każdym serwerze musi być zainstalowane oprogramowanie. Zaopatrzenie w sprzęt, a następnie zbudowanie każdego serwera zajmuje dużo czasu - potencjalnie kilkadziesiąt minut. Każde centrum danych w chmurze należy skonfigurować z wyprzedzeniem ze szkieletową strukturą, którą można następnie skalować. Nie jest praktyczne budowanie nowego centrum danych w locie w odpowiedzi na awarię. Ale praktyczne jest zabranie czegoś, co znajduje się w centrum danych i bardzo szybkie skalowanie. Każde centrum danych powinno zawierać co najmniej dwa wystąpienia (dla redundancja) wszystkiego, czego potrzebujesz do działania środowiska - od siatki pamięci podręcznej, przez serwery aplikacji, po magistralę usług. Pomyśl o tym środowisku jako o wielkości środowiska programistycznego, ale skonfigurowanego do produkcji. To wszystko może być na dedykowanym sprzęcie, w przeciwieństwie do normalnie pobieranych opłat godzinnych. Dedykowany sprzęt jest często znacznie tańszy niż cena za godzinę, ale korzystanie z dedykowanego sprzętu wymaga płatności z góry przez określony czas, zwykle przez rok. Ponownie powinien to być dość niewielki rozmiar, składający się tylko z kilku serwerów. Koszt nie powinien być duży. Jeśli wdrażasz własną relacyjną bazę danych, musisz ją wcześniej zbudować. Trudno jest dodawać węzły bazy danych dla relacyjnych baz danych w czasie rzeczywistym, ponieważ cała baza danych uruchamia się ponownie i często wymagane są inne zmiany konfiguracji. Węzeł bazy danych dla relacyjnej bazy danych nie przypomina serwera aplikacji ani serwera WWW, w którym można po prostu dodać kolejny i zarejestrować go w module równoważenia obciążenia. Bazy danych oferowane przez dostawców usług w chmurze są bardziej elastyczne, ale oczywiście istnieją wady korzystania ze współużytkowanych zasobów. Wykorzystanie bazy danych powinno być dość lekkie, jeśli masz odpowiednią architekturę. Zdecydowana większość odsłon pochodzi od anonimowych klientów (lub botów wyszukiwarek) statyczne strony z możliwością buforowania, takie jak strony główne i strony ze szczegółowymi kategoriami. Możesz odciążyć większość odczytów do baz danych slave. Pomaga pełne wykorzystanie siatki pamięci podręcznej. Twoja podstawowa baza danych zawierająca dane transakcyjne (np. Zamówienia, profile klientów) jest dość mała, zwykle nie więcej niż kilka węzłów zużywa nie więcej niż kilka terabajtów pamięci.

Usuwanie singletonów

Wydaje się, że każda platforma ma oprogramowanie, które można wdrożyć na dokładnie jednym serwerze na środowisko. Typowe przykłady obejmują serwery koordynacyjne, serwery przesyłania wiadomości, brokerów blokady, administracyjne interfejsy użytkownika i serwery wykonujące zadania wsadowe. Te przypadki, zwane singletonami, są klasycznym przykładem zasady Pareto, zgodnie z którą 80% czasu spędzasz na 20% serwerów. 20% wydaje się być singletonami. Problemy z singletonami obejmują:

•  Mogą być pojedynczym punktem awarii. Musisz poświęcić dużo czasu i wysiłku, aby zapewnić najwyższą możliwą dostępność.
•  Każdy serwer musi ogólnie wskazywać na singleton, z unikalną nazwą, adresem URL, adresem IP lub nazwą domeny. Aktualizacja kilkudziesięciu, jeśli nie setek pojedynczych serwerów wymaga każdej pracy za każdym razem, gdy zmienia się nazwa lub lokalizacja singletonu. •  Niektóre singletony muszą być unikalne dla środowiska, podczas gdy inne muszą być unikalne dla bazy danych. Jeśli singleton musi być unikalny dla środowiska, co najmniej połowa żądań do tego singletonu musi zostać złożona w centrum danych. Jeśli singleton jest unikalny dla bazy danych, potencjalnie będziesz musiał poradzić sobie z konfliktami replikacji bazy danych, ponieważ każdy singleton aktualizuje własną bazę danych, a dane są jednokierunkowo replikowane między nimi.
•  Przy aktywnym / aktywnym będziesz musiał aktywować singleton w nowo aktywnym centrum danych po przełączeniu awaryjnym.
•  Wraz ze wzrostem środowiska, singleton może napotykać granice skalowania w pionie. W normalnym środowisku, które kontrolujesz, możesz rzucić dużo sprzętu na takie problemy. W chmurze jesteś ograniczony do maksymalnej ilości sprzętu oferowanego przez dostawcę dla pojedynczego serwera.
•  Musisz utworzyć jednostkę wdrażania dla tego singletonu.

Najlepiej jest zaprojektować swoje rozwiązanie, aby całkowicie unikać singletonów, a jeśli muszą istnieć, pozwolić, aby każda instancja przejęła tę odpowiedzialność. Na przykład, zamiast dedykowanego serwera, który jest odpowiedzialny za okresowe przebudowywanie indeksu wyszukiwania, każdy serwer, który odpowiada na zapytania, może zbudować niewielką część indeksu z boku. Lub poproś, aby twoje węzły wyznaczyły jeden węzeł do okresowego wykonywania tego zadania. Architektura, która nie opiera się na singletonach, jest lepsza pod każdym względem.

Nigdy nie replikuj konfiguracji

Unikaj pokusy replikacji konfiguracji, niezależnie od tego, czy znajduje się ona w bazie danych, czy w systemie plików. Logiczne jest powielanie wszystkiego, ale należy pamiętać, że większość awarii spowodowanych jest wprowadzeniem złej konfiguracji. W przypadku replikacji konfiguracji wystarczy odtworzyć problem. To jest dokładnie powód, dla którego nie wdrażasz kodu w dwóch lub więcej centrach danych jednocześnie. Poczekaj, aby zobaczyć, jak to działa, a następnie wdróż go w innym miejscu. To samo dotyczy konfiguracji.

Przypisywanie klientów do centrów danych

DNS

Elementarz DNS

Jak krótko omówiliśmy w części 2, DNS istnieje, więc klienci nie muszą pamiętać adresów IP. Zamiast tego mogą pamiętać krótkie nazwy, takie jak website.com, które są sparowane z adresami IP. Każde centrum danych, z którego działasz, jest zazwyczaj narażone na cały świat jako pojedynczy adres IP. Sercem systemu jest zapis. Każda nazwa domeny ma autorytatywny serwer DNS, który jest jedynym źródłem prawdy dla tej nazwy domeny. Twój klient (np. Przeglądarka internetowa, urządzenie mobilne) prawdopodobnie będzie miał własną pamięć podręczną rekordów DNS. System operacyjny Twojego klienta prawdopodobnie ma własną pamięć podręczną. Twój dostawca usług internetowych najprawdopodobniej ma serwery DNS, które również buforują rekordy. Serwery DNS rekurencyjnie kaskadują żądanie rozstrzygnięcia do autorytatywnego serwera DNS, a każdy pośrednik buforuje rekord po drodze. Każdy rekord ma czas przeżycia (TTL), określając, jak długo rekord może być buforowany przez dowolnego pośrednika między klientem a autorytatywnym serwerem. Wartości TTL mieszczą się w przedziale od zera sekund do kilku dni, a zapisy zwykle wygasają po pięciu minutach. DNS jest ostatecznie spójnym systemem, w którym rekordy mogą być nieaktualne przez okres nieprzekraczający TTL. DNS obsługuje wiele rekordów A, co oznacza, że witryna.com.com może rozwiązać dwa lub więcej unikalnych adresów IP, przy czym każdy adres IP reprezentuje centrum danych. Wyniki są uporządkowane, tak aby pierwszy zwrócony adres IP miał być pierwszym adresem IP, z którym łączy się klient. Każda witryna internetowa wymaga wiarygodnego serwera DNS. Możesz samodzielnie hostować DNS lub zlecać na zewnątrz dostawcy oprogramowania DNS jako usługodawcy. Dostawcy oprogramowania jako usługi to niezależni dostawcy, dostawcy w chmurze lub dostawcy CDN. Wszystkie zazwyczaj oferują jakąś formę DNS. Zdecydowanie skorzystaj z usług zewnętrznego dostawcy DNS. Ryzyko przestoju jest zbyt wysokie, aby samemu obsługiwać DNS. DNS, choć niezwykle elastyczny i innowacyjny system, ma wady:

•  Niemożność załadowania równowagi przy użyciu jakiejkolwiek prawdziwej inteligencji. Jesteś ograniczony do rundy lub podstawowych algorytmów tego rodzaju.
•  Nie można ustalić, czy adresy IP, które zapisałeś w rejestrze, faktycznie działają. Ta determinacja pozostaje w gestii klientów, którzy wcale tego nie robią lub robią to źle.
•  Pośrednicy między autorytatywnym serwerem DNS a klientem mogą zmieniać kolejność adresów IP, próbując załadować równowagę. Jest to bardzo złe dla aktywnych / pasywnych.
•  Pośrednicy obejmujący samego klienta mogą zignorować TTL określone przez użytkownika w celu ograniczenia liczby zapytań DNS.
Globalne równoważenie obciążenia serwera (GSLB), które omówimy wkrótce, ma na celu usunięcie wielu braków w zwykłym systemie DNS.

Przypisywanie klientów do jednego centrum danych

Do niedawna większość dużych platform e-commerce była obsługiwana tylko z jednego centrum danych, z jednym wirtualnym adresem IP (VIP) dostępnym dla tego jednego centrum danych. Za pomocą jednego centrum danych możesz po prostu użyć zwykłego DNS, aby powiązać przyjazną nazwę domeny (website.com) z adresem IP (161.170.248.20). Możesz ustawić TTL na kilka godzin i pod warunkiem, że masz wiarygodnego dostawcę DNS, nigdy więcej nie myśl o DNS.

Aktywne / pasywne przydzielanie centrum danych

Dzięki dodaniu pasywnych centrów danych w konfiguracji aktywnej / pasywnej musisz obniżyć TTL, aby zmiany mogły zostać wprowadzone szybko. Jeśli masz 12-godzinny czas wygaśnięcia, wszelkie zmiany DNS mogą potrwać do 12 godzin. Kilka minut TTL działa dobrze. Coś krótszego niż to, a zmusisz swoich klientów do niepotrzebnego sprawdzania serwerów DNS, co negatywnie wpływa na wydajność. Po zachowaniu prawidłowego TTL będziesz musiał być w stanie szybko opublikować aktualizacje swojego rekordu DNS na wypadek, gdybyś musiał przełączyć się z podstawowego centrum danych do rezerwowego centrum danych.

Jak wspomniano wcześniej, DNS obsługuje wiele rekordów A, co oznacza, że witryna.com.com może rozwiązać dwa lub więcej unikalnych adresów IP, przy czym każdy adres IP reprezentuje centrum danych. Wyniki są uporządkowane, tak aby pierwszy zwrócony adres IP miał być pierwszym adresem IP, z którym łączy się klient. Trzy problemy z tym podejściem dla aktywnej / pasywnej są następujące:

•  Nie możesz zagwarantować, że pośrednik nie zmieni kolejności adresów IP.
•  Nie możesz zagwarantować, że klienci zawsze będą łączyć się z pierwszym wymienionym adresem IP.
•  Mogą wystąpić krótkie przerwy w dostawie, ponieważ w połączeniach internetowych występują podobne problemy.
Nie chcesz, aby klienci łączyli się z Twoim pasywnym centrum danych, dopóki nie przełączysz przełącznika, publikując zaktualizowany rekord A. Dowolny adres IP w rekordzie A może być podłączony w dowolnym momencie przez dowolnego klienta. Nie ma gwarancji. Zamiast tego najlepiej jest użyć właściwego GSLB z dogłębną kontrolą kondycji lub użyć standardowego DNS, ale tylko jeden adres IP jest wymieniony w rekordzie A. GSLB zostanie omówiony wkrótce.

Aktywne / aktywne przypisanie centrum danych

Gdy dwa lub więcej centrów danych faktycznie odbiera ruch od klientów, każdemu klientowi należy przedstawić dokładnie uporządkowaną listę adresów IP, z którymi klient powinien się połączyć. DNS obsługuje wiele rekordów A, ale z tej funkcji należy korzystać tylko wtedy, gdy klient może połączyć się z dowolnym zwróconym adresem IP. Klienci powinni łączyć się w kolejności zwracania adresów IP, ale jest całkiem możliwe, że pośrednik zmienił kolejność adresów IP lub że klient zignoruje kolejność zwracanych adresów. Wartości TTL wydają się być również dość niskie, ponieważ chcesz mieć możliwość szybkiego wprowadzania zmian w przypadku awarii. Ponownie, klienci mogą łączyć się z dowolnym wymienionym adresem IP, więc upewnij się, że zwracasz adresy IP, które mogą aktywnie obsługiwać ruch.

Globalne równoważenie obciążenia serwera

Element startowy do równoważenia obciążenia serwera globalnego .GSLB to bardzo inteligentny DNS, który może wybrać optymalne centrum danych dla danego klienta. Czynniki, które wykorzystuje, mogą obejmować:

•  Dostępność centrum danych (zarówno to, czy IP reaguje na pingi, jak i bardziej szczegółowa kontrola stanu)
•  Lokalizacja geograficzna klienta
•  Opóźnienie w obie strony między klientem a każdym centrum danych
•  Pojemność każdego centrum danych w czasie rzeczywistym
•  Wiele algorytmów równoważenia obciążenia

Najistotniejsza różnica w stosunku do standardowego DNS polega na tym, że pozwala on na przeprowadzanie znacznie bardziej zaawansowanych kontroli stanu centrum danych, z możliwością automatycznego upuszczenia centrum danych w czasie rzeczywistym, jeśli stanie się niezdrowe. W przypadku standardowego systemu DNS jedyne sprawdzanie kondycji jest wykonywane po stronie klienta. Jeśli klient nie może połączyć się z adresem IP zwróconym w rekordzie A, przechodzi do następnego na liście. Każdy klient wykonuje to sprawdzenie nieco inaczej lub czasem wcale. Co gorsza, istnieje wiele sposobów, w jakie adres IP może odpowiedzieć na polecenie ping, ale nie jest zdrowy. Klienci nie znamy na przykład różnicy między odpowiedziami HTTP 200, 404 i 500. GSLB przejmuje odpowiedzialność za kontrolę stanu od klienta i może przeprowadzić znacznie dokładniejsze przesłuchanie dotyczące kondycji centrum danych. Porozmawiamy o tym w "Sprawdzanie kondycji globalnego równoważenia obciążenia serwera", ale zasadniczo powinieneś zastosować podejście sprawdzające kondycję z Części 5 do całego centrum danych i skonfigurować swoją usługę GSLB, aby sondować tę stronę, aby przetestować kondycję danych środek. Jeśli korzystasz z platformy z co najmniej dwóch centrów danych, zaletą jest to, że przełączanie awaryjne odbywa się automatycznie, bez żadnych interakcji. Ręczne przekazywanie rekordów DNS zajmuje dużo czasu. Oprócz sprawdzania kondycji, zdolność GSLB do wskazywania lokalizacji klienta może być niezwykle korzystna. Zastosowania obejmują:

•  Kierowanie klientów do najbliższego centrum danych, które jest w stanie najlepiej obsłużyć ich żądania. Poprawia to wydajność i zwiększa współczynniki konwersji.
•  Zmniejszenie prawdopodobieństwa wystąpienia problemu z jednoczesnym logowaniem omówionego wcześniej w tym rozdziale. Dzięki dwóm centrom danych i bez geolokalizacji dwaj klienci korzystający z tego samego konta mają 50% szansy na trafienie do tego samego centrum danych. Dzięki odpowiedniej geolokalizacji oferowanej przez GSLB znacznie zmniejszasz problem. Ludzie w to samo gospodarstwo domowe, miasto, stan lub region znacznie częściej dzielą loginy, a przy odpowiedniej geolokalizacji znacznie częściej trafiają do tego samego centrum danych.
•  Możesz spersonalizować doświadczenie dla klientów. Na przykład, możesz chcieć pokazać swoim klientom w Wisconsin rękawiczki zimowe i kostiumy kąpielowe dla klientów z Florydy w styczniu.
•  Może być konieczne ograniczenie niektórych funkcji w zależności od fizycznej lokalizacji klienta. Na przykład promocja może być legalna w jednym stanie, aw innym nielegalna. Zamiast pokazywać klientom konkurs, w którym nie mogą wziąć udziału, najlepiej po prostu go usunąć dla tych, w których jest to nielegalne.
•  Możesz powoli wdrażać funkcje. Załóżmy, że przechodzisz na nową platformę. Możesz to zrobić dla każdego miasta podczas pilotowania. W ten sposób firmy oferujące produkty konsumenckie testują nowe produkty.

GSLB może być oferowany jako DNS hostowany samodzielnie lub jako usługa. W przypadku hostowania na miejscu często odbywa się to za pomocą urządzeń sprzętowych. Urządzeń tych prawdopodobnie nie można używać w chmurze. Podobnie jak DNS, najlepiej jest wybrać dostawcę oprogramowania GSLB jako usługi niż próbować robić to samodzielnie. Sieci CDN, które oferują GSLB, są najlepsze, ponieważ mogą odpowiadać na żądania klientów z brzegu, a nie ze scentralizowanego serwera. Prowadzi to do poprawy wydajności, ponieważ każdy klient będzie składał zapytanie do autorytatywnego serwera DNS na początku sesji. W przypadku tradycyjnego systemu DNS konieczne jest znacznie większe buforowanie, ponieważ dla każdego klienta można użyć tego samego rekordu. GSLB zwraca unikalny rekord dla każdego klienta. Sieci CDN, które służą jako zwrotny serwer proxy, mają również znaczną przewagę nad standardowym systemem DNS dla pełnego podejścia aktywnego / aktywnego, dzięki czemu niewielka część klientów jest siłą przenoszona z jednego centrum danych do drugiego. Zamiast próbować zmusić Cię do zmiany adresów IP dla danej nazwy domeny, możesz zamiast tego poinstruować swoją CDN, aby proxy przesłała żądania na brzeg. Mimo że klient może nadal mapować witrynę internetową.com z powrotem na niewłaściwy adres IP, Twój CDN po prostu zignoruje go i przekieruje żądanie do właściwego centrum danych. CDN można poinformować o tej zmianie za pomocą nagłówka odpowiedzi HTTP, pliku cookie lub podobnego. Tradycyjne rozwiązania GSLB oparte na urządzeniach oferują to przez proxy. Żądanie może trafić do niewłaściwego centrum danych, ale urządzenia mogą współpracować w celu przesłania żądania do właściwego centrum danych. Minusem jest to, że zawsze będziesz mieć proxy za pośrednictwem pośredniczącego centrum danych, być może podróżując tysiące kilometrów na uboczu przy każdym żądaniu. Sprawdzanie kondycji globalnego równoważenia obciążenia serwera Podobnie jak omawialiśmy kontrole kondycji poszczególnych jednostek wdrażania w centrum danych, musisz sprawdzić kondycję całego centrum danych w sposób odpowiedni dla Twojej platformy. W przypadku pojedynczego serwera aplikacji reprezentatywne testy obejmują:

•  Zapytanie o siatkę pamięci podręcznej dla produktu
•  Dodanie produktu do koszyka
•  Zapisanie nowego zamówienia w bazie danych, a następnie usunięcie go
•  Zapytanie magistrali serwisowej o dostępność zapasów
•  Wykonanie zapytania względem wyszukiwarki

Jeśli wszystkie testy powrócą OK, odpowiedzią będzie ciąg PASS. W przeciwnym razie odpowiedź wróci FAIL. Można skonfigurować moduły równoważące obciążenie w celu odpytywania o kod odpowiedzi HTTP 200 i PASS w odpowiedzi. Zwykły ping ping nie jest wystarczający. Ta sama koncepcja obowiązuje w przypadku oceny kondycji całego centrum danych. Odpowiadając na prosty ping ping nic nie mówi o jego kondycji. Najlepiej jest zbudować małą, niezależną aplikację internetową, która będzie sondować dynamiczne strony kontroli kondycji każdego stosu i innych punktów monitorowania. Jeśli powiedzmy, 75% testów powróci jako PASS, to zgłoś PASS. Poproś o zapytanie GSLB dotyczące tej strony i spraw, aby były wysoce dostępne. Podczas gdy w przeszłości trzeba było sprawdzać pojemność każdego centrum danych, nie trzeba już tego robić, ponieważ można skalować każde centrum danych zgodnie z wymaganiami. Innymi słowy, pojemność każdego centrum danych będzie podyktowana ilością ruchu, jaki daje GSLB, w przeciwieństwie do tego, ile pojemności centrum danych zgłasza z powrotem do GSLB.

Podejścia do działania z wielu centrów danych

Pragmatyzm powinien być twoją siłą przewodnią, gdy działasz z dwóch lub więcej centrów danych, a bardziej ogólnie, kiedy wdrażasz przetwarzanie w chmurze. Ważne jest, aby przeprowadzić badania, a następnie zrobić to, co działa dobrze dla Ciebie. Podejścia przedstawione tutaj są po prostu punktami początkowymi, które należy dostosować i rozszerzyć, aby dokładnie odpowiadały Twoim potrzebom. Ogólne podejścia opisano w poniższych sekcjach.

Aktywny/pasywny

Podejście to jest dość tradycyjne, w którym jednocześnie działa tylko jedna warstwa aplikacji i warstwa bazy danych w centrum danych. Jedno centrum danych jest aktywne, a drugie jest pasywne. Replikacja jest często ograniczona tylko do bazy danych i jest jednokierunkowa. Awaria centrum danych raczej nie spowoduje utraty danych (tzw. Cel punktu przywracania), ale bardzo prawdopodobne jest, że spowoduje to długie przestoje (zwane celem przywracania). Oczekiwany jest długi czas przestoju, ponieważ przejście do pasywnego centrum danych pociąga za sobą:

•  Sprzęt do udostępniania
•  Instalowanie oprogramowania na nowo wyposażonym sprzęcie
•  Inicjalizacja bazy danych
•  Odwrócenie synchronizacji bazy danych, dzięki czemu masz kopię zapasową nowo aktywnej bazy danych
•  Skierowanie globalnego modułu równoważenia obciążenia serwera na nowe centrum danych

Wszystko to wymaga czasu, a system jest wyłączony podczas wykonywania tych czynności. Jeśli nie zainwestujesz dużo czasu w automatyzację tego, prawdopodobnie będzie to musiało zostać wykonane ręcznie. W tradycyjnym modelu hostingu pasywne centrum danych byłoby w pełni wyposażone w dedykowany sprzęt. Zmniejsza to przestoje, ale kosztem podwojenia sprzętu wymagałby, aby siedzieć bezczynnie przez większą część roku. Jest to ogromnie marnotrawstwo, ale marnotrawstwo może zostać zrównoważone przez skrócenie długości przestojów. Aktywny / pasywny jest najłatwiejszy w użyciu, jeśli chcesz wprowadzić jak najmniej zmian w swoich aplikacjach i architekturach wdrażania. Ponieważ replikacja odbywa się tylko w bazie danych i istnieją do tego narzędzia, nie musisz zmieniać żadnego innego oprogramowania, jeśli nie chcesz. Oszczędza to dużo czasu i pieniędzy, zwłaszcza jeśli pracujesz z oprogramowaniem, które trudno zmienić. Możesz nawet nie być w stanie zmienić niektórych programów, co czyni to jedyne realne podejście.

Aktywne / aktywne warstwy aplikacji, aktywne / pasywne warstwy bazy danych

Dzięki takiemu podejściu masz dwa lub więcej centrów danych w pełni zbudowanych i działających niezależnie, przy czym tylko baza danych jest aktywna / pasywna. To podejście jest świetnym pośrednikiem, który pozwala uniknąć większości problemów związanych z pełnym multimasterem (gdzie warstwy aplikacji i bazy danych są w pełni aktywne), ale wiąże się z tym, że centra danych nie mogą być zbyt daleko od siebie. Ponieważ połowa poziomów aplikacji będzie zapisywać do bazy danych znajdującej się w innym centrum danych, powodzenie tego podejścia zależy w dużej mierze od tego, jak często piszesz do bazy danych, czy te zapisy są synchroniczne i ile opóźnień występuje między twoimi warstwy aplikacji i baza danych. Jeśli piszesz do bazy danych pięć razy dla każdego wyświetlenia strony i masz 20 milisekund opóźnień, spoglądasz na 100 milisekund z czystym opóźnieniem, niezależnie od tego, ile czasu zajmie wygenerowanie odpowiedzi przez bazę danych. Kluczem do sukcesu jest wybieranie centrów danych, które są wystarczająco blisko siebie, aby zminimalizować wpływ opóźnień, ale wystarczająco daleko od siebie, aby nie podlegały tym samym klęskom żywiołowym, błędom ludzkim i awariom w górę łańcucha dostaw. Na przykład opóźnienie w obie strony między Chicago a Detroit wynosi tylko 8 milisekund. Możesz zrobić 12 okrążeń między nimi i dodać tylko 96 milisekund opóźnienia. Wybierając tam centra danych, uzyskuje się dobrą fizyczną separację, a jednocześnie powoduje bardzo małe opóźnienia. Jeśli masz problem z centrum danych lub oprogramowaniem wdrożonym w tym centrum danych, możesz po prostu przestać kierować ruch do niego i przełączać awaryjnie do innego centrum danych. W ciągu kilku sekund możesz przełączyć swoich klientów do centrum danych, które przetrwało, albo za pomocą zautomatyzowanego podejścia opartego na sprawdzaniu kondycji, o którym mówiliśmy wcześniej w tym rozdziale, lub ręcznie wprowadzając zmiany. Prawdziwą zaletą jest to, że nie musisz zbyt często zmieniać swoich aplikacji. Zmiany dotyczą głównie poziomu bazy danych. Być może trzeba zoptymalizować kod, aby zmniejszyć liczbę połączeń z bazą danych, ale to wszystko.

Aktywne / aktywne warstwy aplikacji, głównie aktywne / aktywne bazy danych

Jak omówiono wcześniej w tej części, głównym problemem związanym z multimasterem jest wielokrotne logowanie do tego samego konta. Kiedy tak się dzieje, możesz napotkać konflikty danych, ponieważ te same dane są aktualizowane z dwóch różnych baz danych. Dwa wspomniane podejścia nie mają tego problemu, ponieważ istnieje tylko jedna baza danych na żywo. Mimo że może istnieć wiele fizycznych centrów danych, wszystkie zapisy mają miejsce w tej samej bazie danych zgodnej z ACID. To podejście jest pierwszym, w którym każde centrum danych ma własną aktywną bazę danych. Każde centrum danych w tym podejściu, pokazane na rysunku 10-10, ma własną aplikację i stos bazy danych. Domyślnie klienci piszą w lokalnej bazie danych w centrum danych, do którego zostali przypisani. Ale gdy aplikacja wykryje, że klient ma już równoczesne logowanie w innym centrum danych, klient zapisze cross-WAN w centrum danych z aktywną sesją. Dzięki temu masz pełną aktywność / aktywność z wyjątkiem bardzo małego odsetka klientów z wieloma jednoczesnymi logowaniami. Aby wdrożyć to podejście, musisz zmienić proces logowania, aby oznaczyć każde konto centrum danych, z którego konto jest zalogowane, i czasem ostatniego logowania. Wszystkie dane logowania muszą następnie sprawdzić te dwie wartości, aby sprawdzić, czy ktoś inny jest już zalogowany przy użyciu tych poświadczeń w innym centrum danych. Jeśli podczas procesu logowania okaże się, że ktoś inny jest już zalogowany na to konto z innego centrum danych, wskazujesz tego klienta w bazie danych w centrum danych, w którym już jest aktywne logowanie. Wszystkie odczyty mogą nadal odbywać się z lokalnej bazy danych. Ponieważ jest to pierwsze podejście, które wykorzystuje dwie lub więcej aktywnych baz danych, wszystkie klucze podstawowe (lub inne trwałe identyfikatory) muszą być poprzedzone unikalnym identyfikatorem. Na przykład w centrum danych w Nowym Jorku można wygenerować wszystkie klucze podstawowe z przedrostkiem ny. Dzięki temu klucze podstawowe pozostają unikalne we wszystkich centrach danych. Czynnikiem komplikującym jest sposób przypisywania baz danych do indywidualnych klientów. Kluczem jest skonfigurowanie serwera aplikacji do posiadania wielu pul połączeń, z których każda reprezentuje unikalną bazę danych. Jeśli masz źródło danych dla swoich zamówień, zdefiniuj źródło danych o identyfikatorze Order_DS_Local, a drugie o identyfikatorze Order_DS_Remote. Następnie w warstwie aplikacji zmieniasz rozdzielczość źródła danych ze zmiennej o zasięgu globalnym na zmienną o zasięgu sesji. Pseudokod wyglądałby mniej więcej tak:

public boolean handleLogin(HttpServletRequest request,
HttpServletResponse response)
{
if (!super.handleLogin(request, response)) // loads Account into session
{
return false;
}
Account account = (Account)request.getSession()
.getAttribute("CurrentAccount"); // returns "Chicago"
String thisDataCenterName = Constants.CURRENT_DATA_CENTER_NAME;
// if account.getCurrentDataCenter() = "Chicago"
if (account.getCurrentDataCenter().equals(thisDataCenter))
{
request.getSession().setAttribute("Order_Data_Source",
Constants.LOCAL_ORDER_DATA_SOURCE);
// sets to "Order_DS_Local"
}
else // if account.getCurrentDataCenter() = "Detroit"
{
request.getSession().setAttribute("Order_Data_Source",
Constants.REMOTE_ORDER_DATA_SOURCE);
// sets to "Order_DS_Remote"
}
return true;
}

Twoja implementacja będzie zasadniczo inna, ale logika powinna być dość podobna

Pełna aktywna / aktywna

To podejście, podobnie jak poprzednie podejście, ma centra danych, które działają niezależnie, a każde centrum danych jest wyposażone we własne warstwy aplikacji i baz danych. To podejście zamiast pisać cross-WAN dla garstki klientów z aktywnym logowaniem w innym centrum danych, wymaga takiego przeniesienia klientów do centrum danych z aktywnym logowaniem. Dzięki temu wszyscy klienci mogą być zawsze obsługiwani z lokalnej bazy danych, bez komunikacji między sieciami WAN. Wdrożenie tego podejścia zaczyna się tak samo jak poprzednie. Musisz oznaczyć każde konto centrum danych, z którego zalogowano się, i czasem ostatniego logowania. Następnie musisz napisać trochę kodu, aby ustalić, czy klient jest zalogowany w innym miejscu. To wszystko to samo co poprzednie podejście. Różnica polega na tym, że klient znajdujący się w "niewłaściwym" centrum danych jest siłą przenoszony do centrum danych, które ma aktywną sesję dla konta. Po przekierowaniu obsługiwane są wszystkie żądania HTTP i sesje HTTP należące do tego konta z tego samego centrum danych, warstwy aplikacji i bazy danych. Anonimowi klienci nigdy nie muszą być przekierowywani, ponieważ nie mają domowego centrum danych Problem z tym podejściem polega na tym, że bardzo trudno jest usunąć klienta z centrum danych. Adresy IP (z centrami danych reprezentowanymi przez jedną nazwę domeny i każdy adres IP odwzorowany z powrotem na pojedyncze centrum danych) są buforowane przez różnych pośredników. Na przykład wiele przeglądarek internetowych buforuje kombinacje adresu IP / nazwy domeny dłużej niż wymaga tego rekord DNS (czas na życie). Nie możesz po prostu zmusić klienta do rzetelnego ponownego rozpoznania nazwy domeny i spraw, aby ta zmiana zaczęła obowiązywać natychmiast. Niedługo omówimy to bardziej szczegółowo, ale na wysokim poziomie musisz przechwycić żądania HTTP na krawędzi przy użyciu sieci dostarczania treści i mieć tam proxy. Mogą istnieć pewne sposoby zmuszenia klientów do ponownego rozpoznania adresu IP, ale byłoby to jeszcze trudniejsze niż podejście CDN / proxy. Przy pełnej aktywacji / aktywacji może to nawet nie być możliwe, ale takie podejście oferuje znaczne korzyści w porównaniu z poprzednim. Ponownie omówimy to bardziej szczegółowo wkrótce.

Bezstanowe frontendy, stanowe backendy

Sprowadza się to do oddzielenia frontonu od backendu jako części architektury omnichannel. W tym scenariuszu backend jest używany tylko do czynności transakcyjnych, takich jak złożenie zamówienia lub ustalenie, które produkty przekazać klientowi. Korzystasz z niego za pomocą podstawowych żądań HTTP, takich jak to: http://backend.website.com/CommitOrder?orderId=12345 Twoje odpowiedzi to JSON, XML lub inny ogólny format, który frontend może przeanalizować i wyświetlić klientowi:

{
"success": true,
"message": "Your order has been successfully placed.",

}

Twoje zaplecze jest wdrażane w kontrolowanych centrach danych, wykorzystując pożądany sprzęt i oprogramowanie. Wymaga to statycznego administrowania sprzętem i skalowania dla szczytu, ale różnica polega na tym, że backend obsługuje teraz znacznie mniejszy ruch, ponieważ frontend obsługuje dużą jego część. Zapoznaj się ze ścieżką ruchu: większość ruchu jest przeznaczona dla anonimowo przeglądanych stron, które nie wymagają interakcji z zapleczem. Interfejs użytkownika jest wdrażany w chmurze, gdzie można go elastycznie skalować. Kluczową zaletą tego podejścia jest to, że możesz wrzucać wiele interfejsów na platformę i utrzymywać spójne wrażenia klientów we wszystkich kanałach i urządzeniach. Frontendy stają się głupimi warstwami prezentacji. Są mniej więcej jednorazowe. Prawie wszystkie natywne aplikacje na iPhone'a i Androida działają obecnie w ten sposób, a trend rośnie, ponieważ coraz więcej kanałów i typów urządzeń musi być nadal obsługiwanych. Ta architektura jest znaczącym odejściem od przeszłości, w której nakładki były splątane z backendami, do tego stopnia, że nie można było ich rozdzielić. Wiele platform e-commerce wciąż dostarcza backend (np. Klasy, biblioteki) w tym samym pakiecie (np. Plik EAR) co frontend (np. JSP, ASP, HTML, CSS lub JavaScript). Renderowanie HTML zajmuje najwięcej cykli procesora. Jeśli pominiesz interfejs użytkownika, możesz uzyskać znacznie większą przepustowość niż w innym przypadku, gdyby były one połączone. Inną zaletą tego podejścia jest to, że możesz teraz wdrażać backendy aktywne / pasywne w dwóch centrach danych. Tak długo, jak wszystkie interfejsy wskazują z powrotem na ten sam backend, nie napotkasz żadnego z problemów wymienionych w tej części, ponieważ każda aktualizacja danych danego klienta ostatecznie kończy się w tej samej bazie danych.