e-Commerce w ChmurzeHandel

Automatyczne skalowanie w chmurze



Co to jest automatyczne skalowanie?

Automatyczne skalowanie, zwane także obsługą administracyjną, ma kluczowe znaczenie dla chmury. Bez elastyczności zapewnianej przez automatyczne skalowanie wrócisz do zapewniania przez cały rok rocznych szczytów. Każda platforma e-commerce wdrożona w chmurze powinna mieć rozwiązanie umożliwiające skalowanie w górę i w dół każdej z różnych warstw w zależności od zapotrzebowania w czasie rzeczywistym. Rozwiązania automatycznego skalowania nie należy mylić ze wstępnym udostępnianiem. Wstępne udostępnianie polega na prawidłowym skonfigurowaniu środowisk, w tym na równoważeniu obciążenia, ustawianiu zapór ogniowych, konfigurowaniu początkowych obrazów serwerów i szeregu dodatkowych jednorazowych działań. Z drugiej strony, automatyczne skalowanie koncentruje się na przejęciu istniejącego środowiska i zwiększeniu lub zmniejszeniu pojemności w zależności od potrzeb w czasie rzeczywistym. Zaopatrywanie i skalowanie mogą ostatecznie korzystać z tych samych mechanizmów, ale ich cel i zakres są całkowicie różne. Celem automatycznego skalowania jest zapewnienie wystarczającej ilości sprzętu do obsługi ruchu, przy jednoczesnym przestrzeganiu umów dotyczących poziomu usług. Jeśli rezerwujesz za dużo, marnujesz pieniądze. Jeśli zapewnisz za mało, cierpisz na przerwy w dostawach. Dobre rozwiązanie pomoże Ci zapewnić wystarczającą ilość środków, ale nie tyle, że marnujesz pieniądze. Tu omówimy, co należy zapewnić, kiedy należy, a następnie jak.

Co należy zapewnić

W tej części skupiono się na udostępnianiu sprzętu z platformy Infrastructure-as-a-Service, ponieważ ma ona najmniej. Gdy używasz infrastruktury jako usługi, najniższym poziomem abstrakcji jest zazwyczaj infrastruktura fizyczna, zazwyczaj serwer wirtualny. Musisz zapewnić moc obliczeniową i pojemność pamięci, a następnie zainstalować na nim oprogramowanie. Omówimy instalację oprogramowania w następnym rozdziale. Dostawcy IaaS zajmują się udostępnianiem zasobów niższego poziomu, takich jak sieć i zapory ogniowe. Dostawcy infrastruktury jako usługi inwestują znaczne zasoby, aby zapewnić jak najłatwiejsze udostępnianie, ale biorąc pod uwagę, że masz do czynienia z zwykłą infrastrukturą, trudno jest inteligentnie zapewnić, jak możesz z platformą jako usługą. Idąc wyżej w górę, oferty Platform-as-a-Service zwykle zawierają ściśle zintegrowane narzędzia do obsługi administracyjnej jako część ich podstawowej oferty wartości. Twój najniższy poziom abstrakcji jest zwykle serwerem aplikacji, przy czym dostawca zarządza serwerem aplikacji i wszystkim pod nim. Ty określasz, kiedy chcesz udostępnić więcej serwerów aplikacji, a dostawca Platforma jako usługa zapewni więcej serwerów aplikacji i wszystko pod nimi w tandemie. Inicjowanie obsługi administracyjnej jest z natury trudne, a robiąc dużo dla ciebie, ci dostawcy oferują wartość, którą możesz chcieć zapłacić dodatkowo. Wreszcie istnieje oprogramowanie jako usługa. Większość dostawców oprogramowania jako usługi oferuje prawie nieograniczoną pojemność. Pomyśl o powszechnym oprogramowaniu oferowanym jako oprogramowanie jako usługa: DNS, równoważenie obciążenia globalnego serwera, sieci dostarczania treści oraz oceny i recenzje. Po prostu korzystasz z tych usług, a od sprzedawcy zależy skalowanie całej infrastruktury zaplecza, aby móc sprostać Twoim wymaganiom. To duża część wartości Software-as-a-Service i jest koncepcyjnie podobna do przykładu użyteczności publicznej z poprzedniego rozdziału. Po prostu wyciągasz więcej energii z sieci, kiedy jej potrzebujesz. Różni się to od platformy jako usługi i infrastruktury jako usługi, w której musisz poinformować swojego dostawcę, kiedy potrzebujesz więcej, a on wysyła więcej informacji. Minusem twoich dostawców zajmujących się tworzeniem rezerw jest to, że z natury tracisz kontrolę. Dostarczane przez dostawcę narzędzia do obsługi administracyjnej są dość elastyczne i coraz lepsze, ale Twoja platforma zawsze będzie miała unikalne wymagania, które mogą nie być dokładnie spełnione przez dostarczone przez dostawcę. Im większe i bardziej skomplikowane wdrożenie, tym większe prawdopodobieństwo, że będziesz chciał zbudować coś niestandardowego. Twoim celem w udostępnianiu jest dopasowanie ilości zasobów do poziomu każdego wymaganego zasobu oraz dowolnego istniejącego współczynnika bezpieczeństwa. Czynnikiem bezpieczeństwa jest to, jaką dodatkową pojemność zapewnisz, aby uniknąć awarii. Ta wartość jest zwykle reprezentowana przez zdefiniowane reguły automatycznego skalowania. Jeśli twoja aplikacja jest związana z procesorem, możesz zdecydować o udostępnieniu większej pojemności przy 25%, 50%, 75% lub 95% zagregowanym wykorzystaniu procesora. Im dłużej czekasz na zaopatrzenie, tym większe prawdopodobieństwo wystąpienia awaria z powodu nieoczekiwanego wzrostu natężenia ruchu.

Czego nie można zapewnić

O wiele łatwiej jest udostępnić więcej zasobów dla istniejącego środowiska niż zbudować nowe środowisko od zera. Każde środowisko, które zbudujesz, ma stałe koszty ogólne - musisz skonfigurować moduł równoważenia obciążenia, DNS, bazę danych i różne konsole zarządzania dla twoje aplikacje. Następnie musisz zaszczepić bazę danych i wszystkie pliki wymagane przez aplikacje i oprogramowanie pośrednie. Teoretycznie możliwe jest napisanie tego wszystkiego z wyprzedzeniem, ale nie jest to zbyt praktyczne. Następnie istnieje kilka zasobów, które należy w pełni przygotować i skalować przed szczytem. Na przykład, jeśli wdrażasz własną relacyjną bazę danych, należy 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. Oczywiście możesz korzystać z elastycznych rozwiązań baz danych dostawcy, ale niektóre z nich mogą być niewygodne, gdy poufne dane znajdują się w bazie danych zawierającej wiele podmiotów. Nierelacyjne bazy danych, takie jak bazy danych NoSQL, zazwyczaj można skalować w locie, ponieważ mają architekturę "nic wspólnego", która nie wymaga ponownego uruchamiania całej bazy danych. Każde środowisko powinno zawierać co najmniej jeden z każdego typu serwera. Pomyśl o każdym środowisku jako o rozmiarze środowiska programistycznego na początek. Następnie możesz zdefiniować zasady automatycznego skalowania dla każdej warstwy. Stała pojemność dla każdego środowiska może być oparta na dedykowanym sprzęcie, w przeciwieństwie do normalnie pobieranych opłat godzinnych. Dedykowany sprzęt jest często znacznie tańszy niż ceny za godzinę, ale sprzęt 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

Kiedy rezerwować

Idealnie byłoby idealnie dopasować przydzielone zasoby do natężenia ruchu obsługiwanego przez system. To nigdy nie jest takie proste. Problem z obsługą administracyjną polega na tym, że funkcjonowanie każdego zasobu wymaga czasu. Dostarczenie działającego serwera z zainstalowanym obrazem i uruchomionym systemem operacyjnym może potrwać co najmniej kilka minut. Następnie musisz zainstalować oprogramowanie, co zajmuje jeszcze więcej czasu. Instalacja oprogramowania na nowo wyposażonym sprzęcie została omówiona w następnej części. Po udostępnieniu zasobu nie możesz po prostu uruchomić go natychmiast. Niektóre zasoby są zależne i muszą zostać zainicjowane w określonej kolejności, w przeciwnym razie nastąpi awaria. Na przykład, jeśli udostępnisz serwery aplikacji przed serwerami przesyłania wiadomości, prawdopodobnie nie będziesz mieć wystarczającej pojemności przesyłania wiadomości i nastąpi awaria. W tym przykładzie musisz dodać swoje serwery aplikacji do modułu równoważenia obciążenia dopiero po pełnym wyposażeniu serwerów przesyłania komunikatów. Sztuczka polega na równoległym udostępnianiu, a następnie równoległym instalowaniu oprogramowania, ale na ostatnim etapie dodaj serwery aplikacji do modułu równoważenia obciążenia. Aprowizacja ma dwie formy:

* Proaktywne udostępnianie : Zaopatrywanie z wyprzedzeniem, kiedy spodziewany jest ruch
* Reaktywne udostępnianie: Zaopatrywanie w reakcji na ruch

Powinieneś dążyć do reaktywnego udostępniania, chociaż wiąże się to z ryzykiem awarii, jeśli nie możesz zapewnić go wystarczająco szybko, aby uzyskać szybki wzrost natężenia ruchu. Aby się przed tym zabezpieczyć, należy nadmiarować (zacznij udostępniać, powiedzmy, 50% wykorzystania procesora, zakładając, że aplikacja jest związana z procesorem), ale prowadzi to do marnotrawstwa. Podobnie możesz zapewnić 95% wykorzystanie procesora, ale również tam poniesiesz koszty, ponieważ będziesz okresowo wyłączać się z powodu braku możliwości szybkiego skalowania. Jest to działanie równoważące, które w dużej mierze zależy od tego, jak szybko możesz zapewnić i jak szybko trafia Cię nowy ruch.

Proaktywne udostępnianie

W proaktywnym udostępnianiu zasoby są udostępniane w oczekiwaniu na zwiększony ruch. Możesz oszacować ruch na podstawie:

•  Cykliczne trendy

-Codziennie
-Miesięczny
- Sezonowo

•  Aktywny marketing

-Promocje
-Promocje promocyjne
-Socjalne kampanie medialne
-Głębokie zniżki cenowe
-Sprzedaż flash

Jeśli wiesz, że nadchodzi ruch, i wiesz, że zostaniesz uderzony większym ruchem, niż możesz zareagować aktywnie, warto proaktywnie zwiększyć pojemność. Na przykład możesz upewnić się, że podwoisz swoją pojemność na godzinę przed wysłaniem dużych e-maili promocyjnych. Aby móc proaktywnie zapewniać usługi, najlepiej jest mieć jeden system do sprawdzania zarówno ruchu przychodzącego, jak i sposobu, w jaki odwzorowuje to wykorzystanie każdego poziomu. Następnie możesz ułożyć tabelę z mapowaniem każdej posiadanej warstwy i ile jednostek tego zasobu (zazwyczaj serwerów o jednakowych rozmiarach) jest wymaganych na różnych poziomach. Idealnie byłoby, gdyby Twój system skalował się liniowo. Jeśli więc Twój ostatni e-mail reklamujący zniżkę 30% przyniósł 30 000 jednoczesnych klientów, wiesz, że musisz zapewnić 15 serwerów aplikacji, 9 serwerów gridu z pamięcią podręczną, 6 serwerów przesyłania wiadomości i 6 baz danych NoSQL przed wysłaniem tego e-maila. Wiele z tego sprowadza się do przetworzenia. O ile nie da się szybko i niezawodnie zareagować, musisz wprowadzić zabezpieczenia, aby zapewnić, że marketerzy nie będą generować nieoczekiwanie dużej ilości ruchu, dopóki system nie będzie na to przygotowany. Koszty proaktywnego tworzenia rezerw są wysokie, ponieważ głównym celem jest zwiększenie pojemności, niż jest to faktycznie potrzebne. Ruch musi być prognozowany, a system skalowany ręcznie. Wszystkie te prognozy są czasochłonne, ale w porównaniu z kosztami awarii i marnotrawstwem przed chmurą koszty są niewielkie.

Reaktywne udostępnianie

Reaktywne udostępnianie ma znaczące zalety w stosunku do proaktywnego udostępniania i jest tym, do czego należy dążyć. W dzisiejszym połączonym świecie link do Twojej witryny może podróżować po całym świecie do milionów ludzi w ciągu kilku minut. Gwiazdy i myślący przywódcy mają 50 milionów obserwujących w popularnych sieciach społecznościowych. Wystarczy, że ktoś z 50 milionami obserwujących opublikuje link do Twojej witryny, a ty będziesz mieć kłopoty. Możesz prognozować większość ruchu, ale nie cały. Trend gwałtownych wzrostów ruchu w mediach społecznościowych przyspieszy, gdy media społecznościowe będą się nadal rozprzestrzeniać. Oprócz unikania przestojów, rezerwowanie reaktywne zapewnia znaczne oszczędności kosztów. Zapewniasz tylko dokładnie to, czego potrzebujesz, kiedy jej potrzebujesz. Reaktywne udostępnianie opiera się na założeniu, że jest w stanie dokładnie zbadać kondycję każdego poziomu, a następnie podjąć działania, jeśli uzasadniają to zgłoszone dane. Zwiększając pojemność o 50%, zawsze powinieneś mieć o 50% większą pojemność niż potrzebujesz, co jest zdrowym czynnikiem bezpieczeństwa. Wkrótce zajmiemy się częścią obsługi administracyjnej. Czasami limity Twojego oprogramowania najlepiej wyrażą się w niestandardowych danych. Na przykład pojedynczy serwer przesyłania wiadomości może obsługiwać tylko 1000 wiadomości na sekundę. Ale jak możesz to przedstawić za pomocą gotowych wskaźników, takich jak wykorzystanie sieci i wykorzystanie procesora? Twoje narzędzie monitorowania najprawdopodobniej pozwoli ci zdefiniować niestandardowe wskaźniki, które będą się podłączać do zdefiniowanych przez ciebie haków.

Rozwiązania do automatycznego skalowania

Dostępnych jest wiele rozwiązań do automatycznego skalowania, od niestandardowych rozwiązań po rozwiązania wbudowane w rdzeń oferty dostawców usług w chmurze po rozwiązania innych firm. Chociaż wszystkie te rozwiązania działają w zasadzie to samo, ich cele, podejście i wdrożenie różnią się. Każde zastosowane rozwiązanie musi być w pełni dostępne i najlepiej wdrożyć poza chmurami, których używasz na swojej platformie. Musisz zapewnić pełną wysoką dostępność w ramach każdego centrum danych działa to rozwiązanie, a także wysoka dostępność w centrach danych. Jeśli automatyczne skalowanie nie powiedzie się z jakiegokolwiek powodu, platforma może ulec awarii. Ważne jest, aby zastosować wszelkie możliwe środki, aby zapobiec awariom.

Wymagania dotyczące rozwiązania

Poniższe sekcje pokazują ogólnie, co należy zrobić, aby skalować automatycznie.

Zdefiniuj każdą warstwę, która ma zostać przeskalowana

Na początek musisz zidentyfikować każdą warstwę, która musi zostać przeskalowana. Wspólne poziomy obejmują serwery aplikacji, serwery pamięci podręcznej, serwery przesyłania wiadomości i serwery baz danych NoSQL. W ramach każdej warstwy istnieje wiele typów instancji, z których niektóre można skalować, a niektóre nie. Na przykład większość poziomów ma jeden serwer administracyjny, który nie może i nie powinien być skalowany. Jak wspomniano wcześniej, niektóre poziomy są stałe i nie można ich dynamicznie skalować. Na przykład warstwa relacyjnej bazy danych jest dość statyczna i nie można jej dynamicznie skalować.

Zdefiniuj zależności między poziomami

Po zidentyfikowaniu każdej warstwy musisz zdefiniować zależności między nimi. Niektóre poziomy wymagają wcześniejszego udostępnienia innych poziomów. Wcześniejszym przykładem zastosowanym w tej części było dodanie większej liczby serwerów aplikacji bez wcześniejszego dodawania kolejnych serwerów przesyłania komunikatów. Mogą istnieć skomplikowane zależności między poziomami i między komponentami w ramach każdej warstwy. Zależności mogą się kaskadowo. Na przykład dodanie serwera aplikacji może wymagać dodania serwera przesyłania komunikatów, który sam może wymagać innego węzła bazy danych NoSQL.

Zdefiniuj stosunki między poziomami

Po zidentyfikowaniu zależności między poszczególnymi poziomami musisz zdefiniować stosunki między poszczególnymi poziomami, jeśli kiedykolwiek będziesz w stanie proaktywnie zapewnić pojemność. Na przykład może się okazać, że potrzebujesz serwera pamięci podręcznej dla każdego z dwóch serwerów aplikacji. W przypadku proaktywnego udostępniania zdolności należy się upewnić ,że każdy z poziomów we właściwych ilościach.

Określ, co monitorować

Następnie dla każdej warstwy musisz zdefiniować metryki, które spowodują zwiększenie lub zmniejszenie skali. W przypadku serwerów aplikacji może to być procesor (jeśli aplikacja jest związana z procesorem) lub pamięć (jeśli aplikacja jest związana z pamięcią). Inne wskaźniki obejmują wykorzystanie dysku, wykorzystanie pamięci i wykorzystanie sieci. Ale, jak wspomniano wcześniej, dane mogą być całkowicie niestandardowe dla każdego bitu oprogramowania. Liczy się to, że znasz wąskie gardła na każdym poziomie i możesz dokładnie przewidzieć, kiedy ten poziom zacznie zawodzić.

Monitoruj każdy serwer i agreguj dane na każdej warstwie

Następnie musisz monitorować każdy serwer w tej warstwie i przekazać raport scentralizowanemu kontrolerowi, który jest w stanie agregować te dane, abyś wiedział, co się dzieje na całej warstwie, a nie na tym, co dzieje się na każdym serwerze. Wykorzystanie dowolnego serwera może być bardzo wysokie, ale ogólny poziom może być OK. Nie każdy serwer będzie miał idealnie jednolite wykorzystanie.

Zdefiniuj zasady skalowania każdej warstwy

Teraz, gdy wszystkie zależności są na miejscu, trzeba określić zasady skalowania każdej kondygnacji. Reguły są zdefiniowane dla każdej warstwy i są zgodne ze standardową logiką if / then. If powinien być związany z powrotem do metryki rzędu szerokości, jak procesora i wykorzystanie pamięci. Niższego wykorzystanie powoduje zwiększenie bezpieczeństwa, ale są kosztem nadmiarowego. Klauzula wtedy może przyjąć dowolną liczbę i dowolną kombinację następujących elementów:

•  Dodaj pojemność
•  Zmniejszenie pojemności
•  Wyślij powiadomienie e-mail
•  Spadek wiadomość na kolejki
•  Złóż zapytanie HTTP

Zazwyczaj będziesz mieć minimum dwóch reguł dla każdej kondygnacji:

1. Dodanie większej pojemności
2. Zmniejszenie potencjału

Jeśli są jakieś wyjątki, otrzymasz powiadomienie e-mailem lub SMS-em, abyś mógł podjąć działania naprawcze. Twoje rozwiązanie powinno zapewniać zabezpieczenia, które zapewnią, że nie zapewnisz go bezterminowo. Jeśli wdrożona aplikacja ma warunek wyścigu, który gwałtownie przyspiesza wykorzystanie procesora, nie chcesz zapewniać jej bezterminowo. Zawsze należy ustawić limity liczby serwerów, które można wdrożyć

Budowanie rozwiązania automatycznego skalowania

Niezależnie od tego, czy zbudujesz, czy kupisz jedno z tych rozwiązań, będziesz używać tych samych interfejsów API do wykonywania takich czynności, jak dostarczanie nowych serwerów, wycofywanie niewykorzystanych serwerów, rejestrowanie serwerów za pomocą modułów równoważenia obciążenia i stosowanie zasad bezpieczeństwa. Dostawcy usług w chmurze udostępnili te interfejsy API i ułatwiają im korzystanie z podstawowych elementów ich oferty. Sposoby łączenia z interfejsami API często obejmują:

•  Graficzny interfejs użytkownika
•  Narzędzia wiersza poleceń
•  Usługi sieciowe RESTful
•  Usługi sieciowe SOAP

Te interfejsy API są tym, czego wszyscy używają do łączenia się z chmurami w podobny sposób, jak interfejsy API napędzają przejście do omnichannel. Interfejs (bez względu na to, czy jest to graficzny interfejs użytkownika, narzędzie wiersza polecenia, czy jakaś odmiana usługi internetowej) jest mniej lub bardziej jednorazowym środkiem do komunikacji z podstawowym zestawem interfejsów API

OpenStack to popularny stos zarządzania chmurą typu open source, którego rdzeniem jest zestaw interfejsów API. Wszyscy dostawcy usług w chmurze oferują interfejsy API tego rodzaju. Oto kilka przykładów wykonywania typowych czynności:

Utwórz obraz maszyny (migawka systemu plików)
// POST HTTP do / images
{
"id": "production-ecommerce-application-page-server",
"name": "Production eCommerce Application Page Server",
}
Zapisz obraz maszyny
// HTTP PUT to /images/{image_id}/file Content-Type must be 'application/octet-stream'
Lista cechdostępnych zdjęć
// HTTP GET to / flavours
{
"cechy": [
{"id": "1", "name": "m1.tiny"},
{"id": "2", "name": "m1.small"},
{"id": "3", "name": "m1.medium"},
{"id": "4", "name": "m1.large"},
{"id": "5", "name": "m1.xlarge"}
]
}
Zarejestrowany sprzęt
// HTTP POST to /{tenant_id}/servers
{
"server": {
"flavorRef": "/flavors/1",
"imageRef": "/images/production-ecommerce-application-page-server",
"metadata": {
"JNDIName": "CORE"
},
"name": "eCommerce Server 221",
}
}
Wyrejestrowanie sprzętu
// HTTP POST do / {tenant_id} / servers / {server_id}

Możesz połączyć te interfejsy API i połączyć je za pomocą narzędzia do monitorowania, aby stworzyć dość kompleksowe rozwiązanie do automatycznego skalowania. Pod warunkiem, że sprzedawca udostępnia wszystkie odpowiednie interfejsy API, zbudowanie niestandardowej aplikacji do obsługi administracyjnej nie jest trudne. Możesz także skorzystać z rozwiązania oferowanego przez dostawcę usług w chmurze.

Budowanie a kupowanie rozwiązania do automatycznego skalowania

Podobnie jak większość oprogramowania, rozwiązania do automatycznego skalowania można budować lub kupować. Jak każde oprogramowanie, musisz zdecydować, w którym kierunku chcesz iść. Ogólnie rzecz biorąc, jeśli nie możesz się wyróżnić, budując coś niestandardowego, powinieneś wybrać jakieś gotowe rozwiązanie, niezależnie od tego, czy jest to rozwiązanie komercyjne sprzedawane przez zewnętrznego dostawcę lub zintegrowane rozwiązanie wbudowane w chmurę. Liczy się to, że masz wyjątkowo niezawodne, solidne rozwiązanie, które można rozbudowywać w celu zaspokojenia przyszłych potrzeb. Ogólnie rzecz biorąc, najlepiej jest kupić jedno z tych rozwiązań, niż je zbudować. Znajdź to, co działa dla Ciebie i zastosuj to. Wszystko może być lepsze niż to, co masz dzisiaj