Programowanie w chmurze

Ukończone

Projektowanie programów przeznaczonych dla chmury wymaga uwzględnienia pewnych szczególnych zagadnień. W zależności od typu aplikacji i oczekiwanego obciążenia deweloperzy mogą korzystać z niektórych funkcji oferowanych przez dostawców usług w chmurze, aby zwiększyć skalowalność i łatwość utrzymania programów. Korzystanie z automatycznych systemów skalowania i modułów równoważenia obciążenia umożliwia deweloperom dynamiczne zwiększanie i zmniejszanie infrastruktury na podstawie wykorzystania sprzętu lub współczynnika obciążenia obliczanego przez program.

Istnieje wiele czynników, które deweloper powinien uwzględnić podczas tworzenia lub migrowania aplikacji do chmury, szczególnie w odniesieniu do wydajności i bezpieczeństwa.

Czynniki dotyczące wydajności dla aplikacji w chmurze

Środowisko w centrum danych oparte na chmurze jest inne od tego, do którego mogą być przyzwyczajeni deweloperzy podczas projektowania i wdrażania aplikacji we własnej infrastrukturze. Niektórym deweloperom trudno jest dostosowywać lub zwiększać wydajność swoich aplikacji, ponieważ nie mają dostępu do układu sprzętu fizycznego ani specyfikacji w chmurach publicznych. Spróbujemy wyliczyć niektóre z najważniejszych czynników, kładąc szczególny nacisk na czynniki wpływające na wydajność aplikacji w chmurze:

Przepustowość zasobów i opóźnienie

Podstawowym czynnikiem związanym z tworzeniem i wdrażaniem aplikacji w chmurze jest opóźnienie. Deweloperzy muszą planować aplikacje z uwzględnieniem ściśle określonych wymagań w zakresie opóźnień. Jednym z rozwiązań jest skompilowanie rozkładu lokalizacji klientów. Dzięki temu deweloperzy będą mogli uzyskać optymalny zbiór lokalizacji centrów danych, którego będzie można użyć do optymalizacji wydajności i czasu reakcji użytkownika końcowego. Ma to miejsce szczególnie w aplikacjach sieci Web, w przypadku których poszczególne żądania HTTP dotyczące statycznej zawartości sieci Web mogą stanowić ważną część czasów ładowania stron internetowych.

Poza opóźnieniami aplikacje mogą także mieć rygorystyczne wymagania dotyczące przepustowości, szczególnie te, które zajmują się zaawansowaną zawartością multimedialną, taką jak pliki audio i wideo. Wielu dostawców usług w chmurze umożliwia deweloperom rozwiązań w chmurze określanie parametrów wydajności podczas aprowizacji w postaci wymagań IOPS dla zasobów obliczeniowych i magazynu. Ponadto wielu dostawców usług w chmurze umożliwia deweloperom konfigurowanie sieci wirtualnych. Implementacja i wdrażanie sieci i magazynu zdefiniowanego programowo (omówione w kolejnych modułach) zapewniają dodatkowe szczegółowe informacje o nowszych technikach używanych przez centra danych do zarządzania ruchem z wielu klientów, a jednocześnie zarządzają indywidualnymi wymaganiami określonymi w SLO klienta.

Techniki wymienione powyżej są przeznaczone głównie do zawartości statycznej. Znacznie trudniej jest zoptymalizować opóźnienia dostępu do rozproszonych systemów magazynowania danych, szczególnie tych, które mają obsługiwać zapisy i aktualizacje. Więcej informacji na ten temat znajdziesz w kolejnych modułach.

Obsługa wielu dzierżawców

Aplikacje w publicznych centrach danych są zwykle uruchamiane we współużytkowanej infrastrukturze. Ten aspekt usług w chmurze stwarza kilka ważnych problemów. Chociaż nowoczesne technologie wirtualizacji zapewniają izolowane środowisko pod względem środowiska aplikacji i zabezpieczeń, zwykle nie mogą zapewnić izolacji wydajności. Dlatego zwirtualizowane zasoby w chmurach nie mogą zapewnić spójnej wydajności przez cały czas. Wydajność zasobu w danym momencie jest funkcją całkowitego obciążenia zasobów ze wszystkich dzierżawców, znane również jako zakłócenia ze strony innych dzierżawców korzystających ze wspólnego sprzętu.

Niektórzy dostawcy usług w chmurze, tacy jak platforma Azure, zapewniają klientom możliwość aprowizowania niektórych typów zasobów (takich jak maszyny wirtualne) na dedykowanym sprzęcie. Zapewnia to ochronę przed dużymi wahaniami wydajności zasobów, zapewniając ich dość spójną wydajność. Jednak wystąpienia dedykowanego sprzętu kosztują znacznie więcej niż regularne wystąpienia na żądanie, ponieważ platforma Azure musi przypisywać serwer wyłącznie do zasobów.

Powiązanym aspektem wielodostępności jest problem zróżnicowania aprowizacji, gdzie identyczne żądania zasobów wirtualnych w chmurach publicznych nie są mapowane identycznie na zasoby fizyczne, powodując zróżnicowanie wydajności. 1 Na przykład dwa identyczne żądania dla maszyn wirtualnych (VM1 i VM2) mogą być kierowane do dwóch różnych maszyn fizycznych (A i B). Maszyna fizyczna A może mieć czterech innych dzierżawców konkurujących o zasoby na tym samym komputerze, a maszyna B może mieć tylko dwóch. Klient jest obciążany takimi samymi opłatami za maszyny wirtualne VM1 i VM2, ale może teoretycznie uzyskać na nich inną wydajność.

Ustawienia zabezpieczeń

Chmury publiczne podlegają większym wektorom ataków, jak pokazano podczas lekcji 1. Deweloperzy muszą być wyjątkowo uważni i pamiętać o tym, aby postępować zgodnie z najlepszymi rozwiązaniami, protokołami i procedurami dotyczącymi wdrażania i utrzymywania aplikacji w chmurze. W związku z tym może być konieczne poniesienie dodatkowych nakładów związanych z wydajnością ze względu na stosowanie protokołów zabezpieczeń odpowiednich dla chmur publicznych.

Ponieważ te protokoły zostały omówione we wcześniejszym module, nie będziemy ich omawiać szczegółowo ponownie. Każdy kod wdrożony w chmurze publicznej powinien przejść przez rygorystyczny proces ręcznych i zautomatyzowanych przeglądów kodu źródłowego oraz analizy statycznej, a także dynamiczną analizę luk w zabezpieczeniach i testowanie penetracji. Wskazówki dotyczące bezpiecznego wdrażania aplikacji znajdują się na następnej stronie.


Informacje

  1. Rehman, M.S i Sakr, M.F (2010). Wstępne wyniki dotyczące różnorodności przydzielania zasobów w chmurze z drugiej międzynarodowej konferencji IEEE na temat technologii i nauki o przetwarzaniu w chmurze (CloudCom) w 2010 r.