e-Commerce w ChmurzeHandel

Instalowanie oprogramowania na nowo udostępnionym sprzęcie



Zastosowanie infrastruktury jako usługi wymaga zasadniczej zmiany w sposobie instalowania i konfigurowania oprogramowania na nowo udostępnianych serwerach. Większość organizacji ręcznie instaluje i konfiguruje oprogramowanie na każdym serwerze. Nie działa to w przypadku szybkiego udostępniania nowych serwerów w odpowiedzi na ruch w czasie rzeczywistym. Serwery muszą obsługiwać żądania HTTP lub wykonywać inne prace w ciągu kilku minut od przygotowania. Muszą również być odpowiednio skonfigurowane, co jest trudne do wykonania przez ludzi. Możesz pominąć tę część, jeśli korzystasz tylko z platformy jako usługi lub oprogramowania jako usługi, ponieważ robią to wszystko za Ciebie. Właśnie za to płacisz im za przewagę nad infrastrukturą jako usługą. W tej części omówimy, jak budować, utrzymywać i monitorować samodzielne modułowe stosy oprogramowania. Te stosy nazywane są jednostkami rozmieszczającymi.

Co to jest jednostka wdrożeniowa?

Dostarczając pojemność za pomocą usługi Infrastructure-as-a-Service, otrzymujesz surowy sprzęt z wyborem obrazu. Ale zanim cokolwiek zrobisz ze sprzętem, musisz zainstalować i skonfigurować oprogramowanie, aby mogło obsłużyć żądania HTTP lub służyć dowolnemu celowi. W szczególności wymaga to zainstalowania obrazu podstawowego i / lub wykonania następujących czynności:

1. Instalowanie oprogramowania z dystrybucji binarnych (maszyna wirtualna, serwer aplikacji, serwer buforowania)
2. Konfigurowanie każdego oprogramowania do współpracy (np. Informowanie serwerów aplikacji, gdzie nasłuchuje baza danych)
3. Ustawianie zmiennych środowiskowych (np. Włączanie wielkich stron, strojenie stosu TCP / IP)
4. Definiowanie metadanych (np. Zmienne inicjujące wyszukiwanie specyficzne dla środowiska)

Każde środowisko ma wiele typów serwerów. Typowe typy serwerów obejmują:

serwer eCommerce
Aplikacja e-commerce + serwer aplikacji + maszyna wirtualna
Serwer pamięci podręcznej
Siatka pamięci podręcznej + serwer aplikacji + maszyna wirtualna
Serwer wiadomości
System przesyłania wiadomości + serwer aplikacji + maszyna wirtualna
Serwer magistrali usług
Magistrala usług + serwer aplikacji + maszyna wirtualna
Serwer zarządzania zamówieniami
System zarządzania zamówieniami + serwer aplikacji + maszyna wirtualna
Serwer wyszukiwarki
Wyszukiwarka
Serwer bazy danych
Węzeł bazy danych

Każdy z tych serwerów jest unikalny, wymagając potencjalnie różnych plików binarnych, konfiguracji itd. Najważniejsze jest to, że możesz zbudować świeżo zabezpieczony sprzęt w ciągu kilku minut i bez interakcji człowieka. Pojedynczy stos, który można wdrożyć w pojedynczej instancji systemu operacyjnego, jest uważany za jednostkę wdrażającą do celów tego tekstu.

Podejścia do budowania jednostek wdrożeniowych

Poszczególne jednostki można budować na wiele sposobów, od migawek całych systemów (w tym systemu operacyjnego) po skrypty różnych typów, których można użyć do zbudowania każdego systemu ze źródła. Istnieją zasadniczo trzy sposoby budowania poszczególnych serwerów. Przejrzyjmy każde podejście.

Budowanie z migawek

Wszyscy dostawcy infrastruktury publicznej jako usługi oferują możliwość wykonywania migawek na serwerach. Te migawki (zwane również obrazami) są w zasadzie kopiami dysków na poziomie bajtów wraz z pewnymi metadanymi, które można następnie wykorzystać jako podstawę do budowy nowego serwera. Ta migawka jest instalowana bezpośrednio na hiperwizorze, co umożliwia szybkie budowanie serwerów. Możesz także zdefiniować skrypty bootstrap, które będą uruchamiane podczas uruchamiania serwera. Skrypty te mogą zmieniać ustawienia sieciowe, aktualizować nazwy hostów, uruchamiać procesy, rejestrować się w module równoważenia obciążenia i wykonywać inne zadania wymagane do zwiększenia produktywności serwera.

Typowe formaty migawek używane przez dostawców infrastruktury jako usługi to Open Virtualization Format (OVF), RAW, ISO i Amazon Machine Image (AMI). Ponownie, wszystkie te są w zasadzie kopiami dysku na poziomie bajtów wraz z pewnymi metadanymi. Poszczególni dostawcy czasami mają swoje własne formaty zastrzeżone, z których niektórych można używać u innych dostawców (jak w przypadku AMI). Możesz zbudować biblioteki tych migawek, a następnie określić, z której migawki chcesz zbudować serwer podczas udostępniania nowego serwera. Podejście oparte na migawce działa dobrze w następujących przypadkach:

Szybko buduj serwery

Szybkość zapisywania bajtów w systemie plików zależy od momentu udostępnienia sprzętu do momentu, gdy jest on użyteczny. Zwykle nie zajmuje więcej niż kilka minut, zanim serwer zostanie zbudowany z wybranym obrazem maszyny. Jest to przydatne, gdy trzeba bardzo szybko zwiększyć skalę ze względu na nieoczekiwany wzrost natężenia ruchu.

Przechwytywanie skomplikowanych zmian

Niektóre oprogramowanie wymaga skomplikowanych instalacji. Mogą występować długie pliki konfiguracyjne, zmiany uprawnień do plików i specjalni użytkownicy systemu operacyjnego. Rzadko można po prostu zainstalować serwer aplikacji z pliku binarnego i wdrożyć na nim pakiet kodu.

Możliwość testowania

Podobnie jak kod, migawki można testować pod kątem funkcjonalności, bezpieczeństwa i wydajności.

Archiwizowanie ścieżek audytu

Możesz łatwo archiwizować migawki do celów audytu i zgodności. Jeśli kiedykolwiek zdarzył się incydent, możesz szybko wrócić i pokazać stan każdego serwera w środowisku. Minusem tego podejścia jest to, że nie jest on w stanie samodzielnie poradzić sobie z łataniem i rutynową konserwacją. Bez wprowadzenia oprogramowania, które to obsługuje, musisz wykonać następujące czynności:

1. Zastosuj zmiany do aktywnych systemów.
2. Wykonaj migawkę każdego z serwerów na żywo, na którym działa unikalny obraz. 3. Zamień obrazy na każdym z serwerów na żywo, których dotyczy problem.

Budowanie z archiwów

Podczas gdy migawka jest klonem całego działającego systemu operacyjnego i jego zawartości, archiwum (np. .Tar, .zip, .rar) to zbiór katalogów i plików. Udostępniasz nowe zasoby dostawcy infrastruktury jako dostawcy usługi, a następnie rozpakowujesz katalogi i pliki do lokalnego systemu plików. Archiwum może zawierać skrypty lub inne środki wymagane do zmiany uprawnień do plików, skonfigurowania oprogramowania do działania w środowisku i tak dalej. Można również włączyć kompresję, aby zmniejszyć ilość danych, które należy przesłać.

To podejście działa, umożliwiając izolację zmian wprowadzonych w podstawowym obrazie systemu plików. Innymi słowy, wszystkie zmiany wprowadzone w podstawowym systemie plików powinny zostać przechwycone w katalogach i plikach w archiwum lub za pomocą skryptu ręcznego, który można odtworzyć po zapisaniu plików. Jeśli zainstalujesz całe oprogramowanie w jednym katalogu głównym (np. / Opt / YourCompany), archiwizacja tego katalogu głównego jest bardzo prosta. Po udostępnieniu nowego serwera musisz przenieść archiwum na ten nowy serwer, rozpakować je do lokalnego systemu plików i uruchomić wszelkie skrypty potrzebne do ogólnej inicjalizacji środowiska. Ponieważ nie możesz tego zrobić ręcznie, warto utworzyć skrypt bootstrap, aby pobrać najnowsze archiwum i rozpakować je. Możesz upiec ten skrypt ładujący w migawce, której możesz użyć jako podstawy dla nowych serwerów. To podejście działa najlepiej w przypadku oprogramowania dostarczanego w dystrybucjach zip lub oprogramowania, które można w pełni zainstalować pod danym katalogiem głównym (np. / Opt / YourCompany). Aplikacje, które się rozszerzają pliki w systemie plików, ustawiaj zmienne środowiskowe lub zmieniaj uprawnienia do plików, nie działają dobrze, ponieważ musisz przechwycić wprowadzone zmiany, a następnie odtworzyć je ręcznie w skrypcie. Większość dzisiejszych programów jest dostarczana za pośrednictwem dystrybucji zip lub można ją w pełni zainstalować pod danym rootem, więc nie powinno to stanowić problemu. To podejście może być lepsze niż podejście oparte na migawce, ponieważ masz do czynienia z relatywnie małymi archiwami, które same zawierają się w katalogu głównym (np. Opt / YourCompany). Podobnie jak w przypadku podejścia opartego na migawkach, wadą jest brak rzeczywistej zdolności do łatania i rutynowej konserwacji.

Budowanie ze źródła

Zamiast instalować oprogramowanie, a następnie robić migawkę całego serwera lub katalogu, możesz zbudować cały stos oprogramowania ze źródła. Źródło w tym przypadku odnosi się do rzeczywistego kodu źródłowego lub wstępnie skompilowanych plików binarnych. Podejście to polega na pisaniu skryptów w środowiskach, w tym w tym, co należy zainstalować, w jakiej kolejności i przy jakich parametrach. Agent zainstalowany w systemie operacyjnym uruchamia następnie skrypt, pobierając, instalując i konfigurując zgodnie z wymaganiami. Liczne dostępne na rynku produkty komercyjne i open source pozwalają:

•  Pobierać pliki binarne
•  Uruchamiać instalatorów
•  Wykrywać awarie instalacji
•  Konfigurować oprogramowania (np. aktualizacja właściwości / plików XML)
•  Wydawać dowolne polecenia do systemu operacyjnego
•  Wciśnięcia dowolne pliki
•  Uruchom skrypty i zgłoś wyniki
•  Zdefiniuj hierarchiczne relacje między komponentami za pomocą deklaratywnych lub proceduralnych modeli zależności
•  Wykonaj ten sam skrypt na różnych platformach i systemach operacyjnych

Wszystkie te czynności są zazwyczaj wykonywane za pomocą lekkiego agenta zainstalowanego na każdym serwerze, przy czym agent komunikuje się z centralnym serwerem zarządzania w chmurze Infrastruktura jako usługa lub poza nią. Oto jak zainstalowałbyś JDK 8 za pomocą popularnego narzędzia do zarządzania konfiguracją Chef:

# zainstaluj jdk8
java_ark "jdk" zrobić
URL "http://download.oracle.com/otn-pub/java/jdk/8-b132/jdk-8-linux-x64.bin"
checksum "a8603fa62045ce2164b26f7c04859cd548ffe0e33bfc979d9fa73df42e3b3365"
app_home '/ usr / local / java / default'
bin_cmds ["java", "javac"]
action: install
end

Wielu dostawców oprogramowania przyczyniło się do tych projektów, aby wyjątkowo łatwo zainstalować ich produkty. Oczywiście skrypty powłoki są zawsze opcją, ale jest to o wiele trudniejsze, ponieważ nie ma tak wielu możliwości rozwiązań celowych. Wiele z tych systemów ma pełną obsługę skryptów, co pozwala dostosować instalację każdego produktu. Na przykład możesz zobaczyć, ile dostępnych jest vCPU, a następnie zmienić liczbę wątków przydzielonych do modułu równoważenia obciążenia. Możesz dostroić oprogramowanie, aby działało dobrze na serwerze docelowym. Podczas wykonywania migawki systemu na żywo jest to po prostu: migawka statyczna. Budowanie ze źródła jest najbardziej niezawodnym podejściem, ale powoduje znaczny wzrost kosztów procesu opracowywania i wdrażania. Aby działało to poprawnie, musisz zbudować dość długie skrypty, nawet dla prostych środowisk. Utrzymanie ich wymaga dużo pracy, szczególnie w przypadku oprogramowania, którego instalacja jest skomplikowana. Jeśli musisz wykonać SSH na serwerze, aby cokolwiek zrobić ręcznie, automatyzacja się nie powiedzie.

Monitorowanie kondycji jednostki wdrażającej

Niezależnie od tego, czy Twoje serwery znajdują się w publicznej chmurze Infrastruktura jako usługa, czy we własnych centrach danych zarządzanych przez własnych administratorów, należy dokładnie sprawdzić stan każdej jednostki wdrażania. Poszczególne jednostki rozmieszczające należy uznać za jednorazowe. Kondycję jednostki wdrażającej najlepiej oceniać, sprawdzając najwyższy stos oprogramowania.Złe serwery powinny być natychmiast usuwane z modułu równoważenia obciążenia, aby zapobiec słabym doświadczeniom klientów. Jest to szczególnie ważne w środowiskach chmurowych, w których mogą występować zakłócenia ze strony hałaśliwych sąsiadów. Tradycyjne sprawdzanie kondycji było bardzo powierzchowne, a jego zakres ograniczał się do kondycji poszczególnych komponentów (np. Systemu plików, pamięci, sieci, procesora) i tego, czy określony port HTTP reaguje na ping TCP. Nie ma to zastosowania: serwer aplikacji może odpowiedzieć na ping TCP, na przykład z błędem HTTP 500, ponieważ serwer aplikacji nie może nawiązać połączenia z bazą danych. Testowanie pingów TCP testuje tylko niższe poziomy stosu, a nie to, czy coś faktycznie działa. Dzięki takiemu podejściu weryfikujesz, czy strona główna lub inna strona bogato funkcjonalna faktycznie odpowiada kodem odpowiedzi HTTP 200. Jest to nieco lepsze, ale nie można ocenić kondycji całej aplikacji i usług (np. Bazy danych, siatki pamięci podręcznej, przesyłania komunikatów) wymaganych do pełnego dostarczenia całej aplikacji. Na przykład strony główne są zwykle statyczne i mocno buforowane. Najbardziej wszechstronnym sposobem sprawdzania kondycji jest zbudowanie strony dynamicznej, która wykonuje podstawowe funkcje aplikacji. Jeśli wszystkie testy zakończą się pomyślnie, zapisuje PASS. Jeśli wystąpił błąd, zapisuje FAIL. Następnie skonfiguruj moduł równoważenia obciążenia, aby wyszukiwał kod odpowiedzi HTTP 200 i PASS. Testy przeprowadzone na tej stronie mogą obejmować:

•  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

Te kilka testów jest znacznie bardziej wszechstronnych niż dowolna wybrana strona lub adres URL. Bardzo ważne jest, aby wybrany moduł równoważenia obciążenia miał możliwość przeglądania zarówno nagłówka odpowiedzi HTTP, jak i treści odpowiedzi. Monitorowanie nie powinno zastępować bardziej kompleksowego monitorowania na poziomie systemu - raczej, aby powiedzieć modułowi równoważenia obciążenia, czy dana jednostka jest wystarczająco zdrowa, aby nadal obsługiwać ruch. Upewnij się, że nie przesadzasz z kontrolą stanu zdrowia, ponieważ częste monitorowanie może zwiększyć pracę systemu bez wyraźnych korzyści.

Zarządzanie cyklem życia

Każdy z twoich serwerów ma własny stos oprogramowania, łatek, konfiguracji i kodu. Po zainicjowaniu i zbudowaniu serwera należy go zaktualizować podczas wprowadzania zmian w linii podstawowej. Możliwość szybkiego przekazywania aktualizacji do produkcji pomaga zapewnić utrzymanie serwerów, ułatwiając debugowanie problemów, a jednocześnie obniżając koszty pracy. Ponadto prawdopodobnie będziesz musiał przeforsować konfigurację awaryjną i zmiany związane z bezpieczeństwem. Często pojedyncza zmiana logiczna (np. Zastosowanie poprawki lub wdrożenie nowego kodu) wymaga wykonania wielu, jeśli nie wszystkich, następujących działań:

•  Aktualizacja plików w systemie plików
•  Arbitralne wykonywanie poleceń przeciwko skryptowi powłoki i monitorowanie wyników
•  Wprowadzanie zmian w konfiguracji (poprzez aktualizację plików konfiguracyjnych lub wykonywanie poleceń przez powłokę)

Wszystkie działające serwery, a także twoja referencyjna migawka, jeśli używasz podejścia opartego na migawkach, muszą być aktualizowane w miarę postępu linii podstawowej oprogramowania, łatek, konfiguracji i kodu. Ponownie nie możesz tego zrobić ręcznie, więc musisz zautomatyzować proces. Podejście opisane w "Budowaniu ze źródła" jest często stosowane zarówno przy początkowej instalacji, jak i bieżącym zarządzaniu cyklem życia. Ponieważ agent zawsze działa na każdym serwerze erver, możesz przesyłać dowolne pliki lub dokonywać dowolnych zmian konfiguracji. Możesz nawet użyć go do wdrażania nowych kompilacji. Ale podejścia oparte na migawkach (pełne obrazy lub archiwa) brakuje agentów. Są statycznymi migawkami i dlatego potrzebują dodatkowego oprogramowania do obsługi cyklu życia. Gdy już wybierzesz rozwiązanie i zaczniesz go używać, upewnij się, że wprowadziłeś zmiany i przetestowałeś je z ograniczoną liczbą klientów, zanim wprowadzisz zmiany w całym środowisku. Możesz po prostu zastosować zmiany do kilku serwerów, monitorować ich kondycję, a następnie wprowadzić zmiany w całym środowisku. Lub jeśli zmiany są bardziej znaczące, możesz nawet zbudować osobne równoległe środowisko produkcyjne i poinstruować moduł równoważenia obciążenia, aby skierował niewielki ruch do nowego środowiska. Gdy wyniki są zadowalające, możesz ustawić moduł równoważenia obciążenia w celu ograniczenia całego ruchu do nowego środowiska produkcyjnego, a następnie wycofania starych serwerów. Może to być bardzo skomplikowane, ale wypłata może być znaczna