Przenosimy infrastrukturę do chmury – wady i zalety

dodał 1 sierpnia 2016 o 07:02 w kategorii Info  z tagami:
Przenosimy infrastrukturę do chmury – wady i zalety

Budować infrastrukturę swojej witryny własnoręcznie czy oddać ją w cudze ręce? Przed tym dylematem stoi niejeden twórca zyskującego na popularności serwisu WWW. Spróbujemy przyjrzeć się obu opcjom i opisać ich najważniejsze cechy.

Poniższy artykuł został przygotowany wspólnie z firmą Oktawave, dostawcą usług hostingu w chmurze.

Tworząc lub modernizując infrastrukturę odpowiedzialną za zapewnienie prawidłowego funkcjonowania popularnej aplikacji WWW, mamy do wyboru kilka różnych rozwiązań. Z jednej strony możemy samodzielnie zbudować całą platformę w oparciu o własny sprzęt i doświadczenie, z drugiej możemy zdecydować się na całkowite przenosiny do chmury. Spójrzmy na wady i zalety obu rozwiązań i przyjrzyjmy się wynikowi migracji do chmury dużego serwisu WWW.

Jak obsłużyć popularną aplikację WWW

Zbudowanie środowiska zapewniającego wysoką dostępność i wydajność popularnej aplikacji WWW nie jest prostym zadaniem. Jeśli sami tworzymy całą potrzebną infrastrukturę, to musimy pomyśleć o wielu elementach układanki. Na warstwie sieciowej potrzebujemy:

  • rozdzielne fizycznie łącza o odpowiedniej przepustowości od niezależnych dostawców z wysokim SLA,
  • własny system autonomiczny w związku z koniecznością wdrożenia BGP,
  • load balancery zapewniające dystrybucję ruchu,
  • rozwiązania filtrujące i blokujące niepożądany ruch sieciowy.

W celu zagwarantowania dostępności wszystkie rozwiązania sieciowe muszą być co najmniej zdublowane. Z kolei na warstwie mocy obliczeniowej musimy zapewnić:

  • serwery aplikacyjne zapewniające ogólnie pojętą logikę aplikacji np. frontend i backend,
  • serwery bazodanowe,
  • serwery serwujące elementy statyczne aplikacji, odciążające serwery aplikacyjne z przetwarzania zapytań dotyczących grafik, zdjęć czy dokumentów.

Podobnie jak w przypadku elementów sieciowych również te elementy muszą zostać zwielokrotnione, aby zapewnić odpowiednią dostępność oraz wydajność. Optymalne wyskalowanie potrzebnych zasobów, a w szczególności liczby procesorów oraz pojemności pamięci jest bardzo trudnym zadaniem. Brak możliwości rzetelnego przewidzenia skali wzrostu ruchu czy chociażby nagłych jego zmian sprawia, że łatwo popełnić jeden z dwóch rodzajów błędów: przeszacować potrzeby i ponieść koszty niewykorzystanych zasobów lub niewystarczająco oszacować potrzeby i nie móc dostarczyć na czas odpowiedniej mocy i pojemności.

Ostatnim niezbędnym elementem naszej aplikacji jest przestrzeń dyskowa. Podobnie jak w przypadku mocy obliczeniowej musimy dobrze ocenić zapotrzebowanie pojemnościowe i wydajnościowe oraz podjąć decyzje odnośnie konkretnych zasobów dyskowych. Błędy w ocenie będą miały, podobnie jak na warstwie mocy obliczeniowej, negatywne skutki dla budżetu lub wydajności aplikacji.

Wybierając drogę samodzielnej budowy swojej infrastruktury, warto także pamiętać, że istotnymi pozycjami w budżecie takiego projektu mogą być licencje hypervisora, koszty konserwacji sprzętu czy podzespoły przechowywane na wypadek awarii.

A może do chmury

Podejściem diametralnie odmiennym od budowy własnego środowiska jest wykorzystanie chmury publicznej oraz jej wbudowanych mechanizmów i narzędzi.

Różnice między tworzeniem rozwiązania w środowisku cloudowym widać już w warstwie sieciowej, w której nie musimy się martwić zapewnieniem dostępności. Wysoko dostępne łącza o dużej przepustowości wraz z urządzeniami brzegowymi zapewnia nam dostawca chmury. Można także wykorzystać gotowe mechanizmy balansowania ruchu takich protokołów jak HTTP, HTTPS czy np. SIP. Jednocześnie możemy korzystać z dodatkowych mechanizmów, np. badających stan aplikacji oraz różnych algorytmów balansowania ruchu, takich jak „Least Connection” czy „Least Response Time”.

Największą zmianę w architekturze widać od warstwy mocy obliczeniowej w dół, ponieważ elementy fizyczne przestają w ogóle być przedmiotem zainteresowania administratora. Procesory czy pamięć są po prostu dostępne i jesteśmy w stanie nimi swobodnie zarządzać w ramach każdej instancji serwera.

Możemy nimi zarządzać na kilka sposobów. Podstawowym jest ręczna modyfikacja parametrów przy użyciu portalu administracyjnego. Bardziej zaawansowane możliwości oferuje Autoskaler. Dzięki jego mechanizmowi mówimy już nie tylko o zarządzaniu mocą obliczeniową poszczególnych serwerów, ale o zarządzaniu wydajnością aplikacji. Autoskaler umożliwia skalowanie infrastruktury zarówno horyzontalnie – poprzez dodawanie nowych instancji klonowanych serwerów – jak również wertykalnie, poprzez dodatkowe procesory lub pamięć. Operacje te mogą się odbywać w sposób automatyczny na podstawie zdefiniowanej polityki, a platforma podejmuje decyzje o zmianie parametrów na podstawie ich aktualnego wykorzystania.

Drugim mechanizmem ułatwiającym pracę administratora jest Scheduler, który umożliwia w naszej infrastrukturze zaplanowanie zadań do wykonania. Dobrym przykładem wykorzystania Schedulera jest sytuacja, gdy określony moduł aplikacji jest potrzebny w danych dniach tygodnia lub widoczne jest zwiększenie ruchu w konkretnych godzinach. Dzięki Schedulerowi możemy zaplanować najpierw włączenie konkretnych instancji, a następnie ich wyłączenie, gdy nie są już potrzebne.

Innym pomocnym narzędziem, które dostaniemy do dyspozycji w chmurze, jest RESTful API. Możemy je wykorzystać zarówno w przypadku realizacji powtarzalnych czynności na wielu instancjach serwerów, jak i do skalowania naszej aplikacji. Istotną zaletą jest możliwość wykorzystania API wspólnie z narzędziami takimi jak Ansible, Chef, Puppet czy Salt.

Jeżeli nasze potrzeby dotyczące automatycznego skalowania środowiska wykraczają poza standardowe funkcjonalności Autoskalera, dobrym rozwiązaniem będzie wykorzystanie do tego celu API. Aplikacja może np. badać czasy odpowiedzi, a po przekroczeniu zadanych parametrów wywołać stosowne metody.

Duża zmiana wiąże się też z zastosowaniem obiektowej przestrzeni dyskowej (OCS), która zastąpi całą grupę serwerów odpowiedzialnych za serwowanie elementów statycznych aplikacji. Dzięki zastosowaniu bibliotek programistycznych dostępnych dla praktycznie wszystkich języków programowania (.NET, C/C++, PHP, itp.) aplikacja zyskuje możliwość dostępu do OCS. Taka integracja umożliwia wykorzystanie obiektowego storage’u do przechowania elementów statycznych w formie obiektów wraz z ich metadanymi. Ważną zaletą takiego podejścia jest także eliminacja wielu maszyn wirtualnych, wymagających nakładu pracy związanego z ich utrzymywaniem.

Korzyści pojawiają się również w zakresie przestrzeni dyskowej. Przede wszystkim znikają ograniczenia związane z fizycznym rozmiarem posiadanych zasobów. Jeżeli zaistnieje potrzeba ich zwiększenia, po prostu stworzymy nowy zasób i zaczniemy z niego korzystać.

W scenariuszu z wykorzystaniem chmury przestaje być problemem wydajność przestrzeni dyskowych. Jesteśmy w stanie tworzyć zasoby odpowiadające naszym potrzebom, dysponując dostępem do pięciu poziomów, od Tier-1 o wydajności 1000 IOPS do Tier-5 z wydajnością 200 000 IOPS,. Co niezwykle istotne – możliwa jest zmiana wydajności np. z Tier-2 na Tier-3 w locie oraz w sposób przezroczysty dla systemu operacyjnego. Parametrami możemy zarządzać zarówno z panelu, jak i za pomocą API. Podobnie jak w przypadku mocy obliczeniowej aplikacja może sama weryfikować stan dysków i odpowiednio wywołać metody odpowiedzialne za zmianę Tieru lub rozmiaru dysku OVS.

oktawave

Kiedy chmura publiczna nie jest rozwiązaniem

Oczywiście korzystanie z publicznej chmury ma także swoje wady. Jedną z podstawowych jest fakt, że firmowe dane przechowywane są w cudzej infrastrukturze. Nie dla każdego jest to problemem, jednak istnieją firmy i organizacje, które ze względów prawnych lub strategicznych nie mogą lub nie chcą oddawać kontroli nad swoimi informacjami innym podmiotom. Istnieją także serwisy, w których dostępność nie jest bardzo ważna lub firmy, które działają na skalę umożliwiającą wdrażanie własnych platform chmury prywatnej. Decyzja o tym, czy przenosić swoja infrastrukturę do chmury, musi zawsze być poparta solidną analizą zysków i strat.

Fotosik, czyli w kierunku elastyczności

Spójrzmy na przykład firmy, która podjęła decyzję o przenosinach. Fotosik.pl to jeden z największych polskich serwisów hostujących zdjęcia i jednocześnie klient Oktawave. Serwis przeniósł do chmury sporą infrastrukturę, składającą się z ponad 13 terabajtów zdjęć i wideo, ponad 65 milionów plików oraz ponad 20 dedykowanych maszyn. Przed migracją serwisu do chmury infrastruktura aplikacji zbudowana była z:

  • load balancera rozdzielającego ruch na cztery serwery dedykowane, obsługujące stronę WWW,
  • czterech serwerów baz danych w tym dwóch działających w trybie master/slave,
  • serwera kopii bezpieczeństwa baz danych,
  • serwera statystyk,
  • dwóch serwerów do generowania różnych formatów zdjęć,
  • 15 serwerów serwujących pliki statyczne (zdjęcia).

Po migracji infrastruktura została zoptymalizowana do:

  • load balancera rozdzielającego ruch na dwa serwery obsługujące stronę,
  • dwóch serwerów baz danych,
  • czterech serwerów serwujących pliki statyczne,
  • dwóch serwerów obsługujących wspólne dyski dla serwerów aplikacyjnych i serwujących pliki statyczne.

Już na pierwszy rzut oka widać skalę uproszczenia i optymalizacji środowiska. Wiąże się z nią także znaczna redukcja kosztów utrzymania. Dzięki automatycznemu zarządzaniu wymaganą mocą serwerów administrowanie stało się łatwiejsze i mniej czasochłonne. Korzyści są także widoczne z punktu widzenia użytkownika końcowego – pomimo rosnącej liczby użytkowników serwis zwiększył szybkość działania. Na stronie Oktawave znajdziecie także dokument zawierający więcej szczegółów dotyczących migracji.

Podsumowanie

Chmura zdejmuje z nas ograniczenia sprzętowe w zakresie warstwy sieciowej, serwerowej i przechowania danych. Nie musimy kupować ani utrzymywać urządzeń, a w dalszej perspektywie myśleć o ich wymianie w związku ze zużyciem. Unikamy ryzyka niewłaściwego oszacowania potrzebnych zasobów, a co za tym idzie ponoszenia dodatkowych kosztów. Otrzymujemy bezpieczną, redundantną infrastrukturę zapewniającą parametry dokładnie takie, jakie są nam w danej chwili potrzebne.

Przy okazji otrzymujemy także dostęp do narzędzi, które pozwalają łatwo oraz elastycznie zarządzać infrastrukturą oraz szybko uruchamiać ją np. na potrzeby krótkookresowych projektów. W procesie ciągłego rozwoju aplikacji jesteśmy w stanie przeprowadzać automatyczne testy funkcjonalne lub wydajnościowe wykorzystując narzędzia takie jak GIT czy Jenkins. Zyskujemy także możliwość uruchamiania środowisk testowych o zróżnicowanych parametrach oraz wygaszania ich po zakończonych pracach.

Takie podejście do zarządzania infrastrukturą znacznie przyspiesza i ułatwia dostarczenie aplikacji WWW, uwalnia od niepotrzebnych kosztów sprzętu, jego składowania i serwisowania, a w połączeniu z rozliczaniem godzinowym sprawia, że ponosimy tylko koszty mocy obliczeniowej, której faktycznie potrzebujemy.

Oferta

Czy wiesz, że po przesiadce do Oktawave Fotosik zredukował swoje koszty aż o 40%? Jakie korzyści może przynieść Tobie chmura obliczeniowa? Przekonaj się sam!

Dla pierwszych 200 czytelników Zaufanej Trzeciej Strony udostępniamy kod na 50 zł na przetestowanie chmury obliczeniowej Oktawave.

Aby wykorzystać swój kod, zarejestruj konto w Oktawave, a następnie zaloguj się do panelu administracyjnego. W menu po prawej stronie wybierz zakładkę BILLING i wybierz formę płatności KOD PROMOCYJNY oraz wpisz w odpowiednie okienko kod rj6km8D2, następnie kliknij przycisk DALEJ. Po zaakceptowaniu transakcji Twoje konto w Oktawave zostanie zasilone kwotą odpowiadającą wartości kodu promocyjnego.

Kod jest ważny do 15 sierpnia 2016. Sprawdź chmurę już dziś!

Dla zachowania pełnej przejrzystości – za publikację tego artykułu otrzymujemy wynagrodzenie od Oktawave.