AplikacjeCIOPolecane tematy
Łatwiejsze wsparcie dla nowych technologii aplikacyjnych, czyli o znaczeniu chmury dla świata aplikacji biznesowych i rozwiązaniach typu Cloud Native
Model chmury obliczeniowej to nie tylko możliwość korzystania z zasobów IT bez konieczności ich zakupu i na zasadach subskrypcji. Cloud computing otwiera nowe możliwości w zakresie tworzenia i używania oprogramowania. Możliwości tym istotniejsze, że to właśnie aplikacje są dziś fundamentem budowania i wdrażania nowych modeli biznesu.
Chmura obliczeniowa to pojęcie, które pojawiło się około 2012 roku i przeszło jedną z dłuższych dróg: od sloganu marketingowego do praktycznych zastosowań produkcyjnych. Koncepcja IaaS (Infrastructure as a Service) stała się naturalnym następcą wirtualizacji serwerów. I to właśnie ten model początkowo nazywano chmurą obliczeniową. Posiadł on bowiem cechy istotnie różne od klasycznej infrastruktury własnej: samoobsługę, automatyzację i precyzyjne rozliczanie.
Początkowo dostawcy usług szumnie nazywanych Cloud Computing w istocie oferowali klientom serwery wirtualne wyposażone w system operacyjny, niejednokrotnie zarządzane w trybie półautomatycznym lub manualnym. Klient wprawdzie posługiwał się eleganckim i dopracowanym portalem, w którym mógł zamawiać kolejne maszyny, ale w tle – zamiast pełnej automatyzacji i integracji – pracowały zespoły administratorów, realizujących zlecenia, które klienci przysyłali za pośrednictwem samoobsługowego portalu. Oczywiście taki model ma swoje zalety dla wielu organizacji – przede wszystkim udało się wypracować model infrastruktury dostępnej na żądanie. Szybki czas dostępu do nowych zasobów, a także szybki i elastyczny czas ich zwrotu wydawał się bardzo atrakcyjny.
Usługi, nie zasoby!
Od początku jednak dużo mówiło się o optymalizacji parametru TTM (Time To Market), czyli szybkości dostarczania klientom nowych usług, produktów czy funkcjonalności właśnie w oparciu o zasoby chmury obliczeniowej. Model cloud miał być jednocześnie katalizatorem rozwoju aplikacji dzięki swojej wielkiej elastyczności, pozwalającej na szybkie kreowanie i usuwanie kolejnych zestawów testowych oraz deweloperskich.
Po części się udało to już jakiś czas temu – wiele organizacji, szczególnie producentów oprogramowania, chętnie sięgnęło po chmurę obliczeniową, żeby w niej rozwijać aplikacje lub odtworzyć środowisko klienta i rozwiązać jego problemy. Część środowisk testowych również znalazło swoje miejsce w chmurach publicznych. Pojawiła się też koncepcja chmury hybrydowej, która miała łączyć koncepcje zautomatyzowanej infrastruktury własnej z dostawcą.
Aplikacje tworzone z myślą o możliwościach chmury
W ostatnim czasie największe i najciekawsze zmiany w kontekście rozwoju rynku usług chmurowych przyniosła koncepcja Cloud Native Applications (CNA), czyli oprogramowania pisanego z myślą o uruchamianiu w chmurze obliczeniowej. W końcu zauważono, że sam efekt konsolidacji i współdzielenia zasobów infrastrukturalnych to za mało. Dzięki dzisiejszym liderom rynku: Microsoft, Amazon i Google pojęcie chmury obliczeniowej zyskało na znaczeniu i… dojrzałości. Giganci, którzy postawili na rozwój oferty chmury publicznej, dzisiaj liczą zyski głównie dlatego, że potrafili wyjść daleko poza klasyczny IaaS, dostarczając klientom m.in. kompleksową platformę uruchomieniową dla aplikacji CNA.
Platformy, takie jak Microsoft Azure, Amazon Web Services czy Google Cloud, łączy dostępność wynikająca z konsolidacji, ale też wysoka skalowalność. Jest to jednocześnie skalowalność nieco inna od tej, do której przyzwyczaiły nas aplikacje klasy enterprise utrzymywane w lokalnych centrach danych. Rozwój kontenerów spowodował, że teraz aplikacje można budować niemalże w sposób odwzorowujący swoim działaniem żywy organizm, którego różne narządy pełnią różne funkcje i mogą być w pewnym sensie osobno rozwijane, utrzymywane czy w razie potrzeby usuwane. Najlepszym przykładem jest tu tkanka mięśniowa, na której rozwój, jako ludzie, mamy duży wpływ – wystarczy wybrać określoną aktywność fizyczną. Inne mięśnie rozwiną się przy graniu w piłkę nożną, inne podczas pływania, a jeszcze inne – w lekkoatletyce. Mają jednak wspólną cechę: nie używane – zanikają. W analogiczny sposób działają aplikacje Cloud Native. Mogą one, przykładowo, zwiększać i zmniejszać swoją efektywność w zależności od potrzeby w danej chwili, w sposób zautomatyzowany sterując udostępnionymi im zasobami.
W świecie aplikacji biznesowych taki efekt zobrazować można na przykładzie portalu oferującego dostęp do dokumentów w ramach trwałego nośnika. Jeśli organizacja, weźmy na to bank, publikuje regulaminy, umowy i wyciągi poprzez tego typu system, zamiast wysyłać papierowe dokumenty, to wiadomo, że robi to średnio raz w miesiącu, a niektóre treści modyfikuje zaledwie kilka razy w roku. Statystycznie, liczba użytkowników takiego portalu będzie największa tylko wówczas, gdy w systemie modyfikowane lub udostępniane są naprawdę znaczące dokumenty. Właśnie na taką okazję „tkanka portalu” może rozrosnąć się, zwiększając liczbę zajmowanych kontenerów w chmurze. W pozostałym czasie utrzymywanie tego komponentu w jego maksymalnych rozmiarach jest zwykłym marnotrawstwem.
Mechanizmy wysoce elastycznego skalowania, ale też ciągłego badania parametrów wydajnościowych są wbudowane w DNA chmury obliczeniowej, zarówno prywatnej publicznej, jak i hybrydowej. Tak właśnie zostały wybudowane ogromne platformy aplikacyjne, takie jak Facebook czy Netflix. Co ważne, rozwiązania budowane w zgodzie z koncepcją CNA można modyfikować – czyli naprawiać i wprowadzać nowe funkcjonalności – zdecydowanie szybciej niż w przypadku aplikacji tradycyjnych. Można również wykorzystać fakt, że nową funkcję czy poprawkę wdrożyć można jedynie dla wąskiej grupy komórek wspomnianej wcześniej tkanki, aby sprawdzić jej faktyczne efekty, nie narażając całego środowiska na błędy. Jeśli kod będzie działał poprawnie, mechanizmy wsparcia dla aplikacji chmurowych automatycznie rozpropagują zmianę.
Początek drogi
Jednak skalowalność i dostępność to dopiero początek możliwości wynikających z wykorzystania modelu chmury obliczeniowej. Kolejnym przykładem jest wykorzystanie modelu serverless. Nie oznacza on oczywiście, że w stosie technologicznym infrastruktury obsługującej oprogramowanie nie ma serwera. Znaczy to natomiast, że programista może korzystać z gotowych komponentów prezentowanych w środowiskach chmurowych w modelu standardowej usługi, dzięki czemu infrastruktura pracująca w tle nie jest jego zmartwieniem. Zamiast więc pisać kolejny fragment kodu, którego zadaniem będzie np. zamiana tekstu na głos, twórca aplikacji CNA po prostu wywołuje stosowną usługę chmury publicznej, przekazując tekst jako parametr. W odpowiedzi zaś otrzymuje gotowy obiekt audio do odtworzenia.
Bardzo zachęcam do spróbowania tego mechanizmu samemu, a najłatwiej to zrobić, pytając… naszych dzieci, jeśli są w wieku szkolnym. Tak! Nawet dziecko rozwijając proste aplikacje w bardzo ciekawym projekcie, jakim jest Scratch, może wykorzystać mechanizmy wbudowane w platformę Amazon Web Services. Wystarczy tylko zainstalować z konsoli Scratch wtyczkę, żeby cieszyć się w tworzonych przez siebie aplikacjach niektórymi prostymi usługami chmury obliczeniowej AWS, jak właśnie Text-to-Speech. Skoro więc dziecko w swoim szkolnym komputerze może za pomocą chmury wykonać operacje, które kiedyś wymagały instalacji dedykowanego oprogramowania to, ile więcej będzie mógł zrobić profesjonalista?
A i na tym nie koniec! O ile pewną część usług chmurowych, które oferują liderzy rynku, być może udałoby się łatwo odtworzyć we własnym centrum danych, to część z nich – i to tych bardziej atrakcyjnych biznesowo, wymaga zastosowania bardzo dużej mocy obliczeniowej. Dotyczy to obszarów związanych z przetwarzaniem Big Data, sztucznej inteligencji czy usług rozpoznawania, tzw. Cognitive Services. Takich usług potrzebujemy tylko w bardzo konkretnych momentach, do precyzyjnie wybranych zadań. Posiadanie dostępnej lokalnie, we własnym centrum danych mocy obliczeniowej, mogącej zapewnić szybkie i skuteczne analizy w oparciu o ogromne zbiory danych, nie tylko mija się z celem, ale jest niemal niemożliwe. Trudno wyobrazić sobie, żeby każda organizacja była właścicielem infrastruktury o rozmiarach zbliżonych do platformy Microsoft Azure, a dopiero środowisko o tak dużej skali będzie w stanie zapewnić wystarczającą i dostępną na żądanie, w postaci standardowych usług, moc obliczeniową niezbędną, aby w krótkim czasie wykonać żmudne analizy, umożliwiając budowę przewagi konkurencyjnej. W jaki sposób? Na przykład dzięki możliwości precyzyjnego zbudowania i ukierunkowania dynamicznej kampanii marketingowej, realizowanej w oparciu o faktyczne dane biznesowe.
To, co najlepsze w chmurze
Ostatnie lata przyniosły bardzo dynamiczny rozwój usług oferowanych w modelu chmury obliczeniowej, a co za tym idzie – także możliwości ich użycia. Dzisiaj, ze względu na wsparcie różnych technik aplikacyjnych, rozbudowane portfolio usług oferowanych przez wielu dostawców chmury publicznej, w coraz większej liczbie firm mówi się o strategii multicloud. Nic dziwnego. Jesteśmy zainteresowani pozyskiwaniem z różnych platform chmurowych tych usług, które w danym momencie będą najlepiej odpowiadać planom rozwoju naszych aplikacji i bieżącym potrzebom biznesu – i dziś mamy taką możliwość. Wydaje się więc, że koncepcja Cloud Native Applications w powiązaniu z modelem multicloud stanowi najbardziej rozwojowy trend w świecie nowoczesnego IT na najbliższe kilka lat.
KOMENTARZ EKSPERTA
Co daje chmura światowi aplikacji biznesowych? O korzyściach rozwiązań typu Cloud Native
Elastyczność, łatwe zarządzanie i możliwość sprawnego, szybkiego i często automatycznego skalowania – to tylko niektóre cechy aplikacji zbudowanych i obsługiwanych w oparciu o rozwiązania typu Cloud Native – czyli wykorzystujące chmurę. Dlaczego technologie Cloud Native są przełomem? I ile znaczą dziś dla świata aplikacji biznesowych?
Technologie Cloud Native zakładają wykorzystanie rozwiązań chmurowych do tworzenia, a następnie obsługi aplikacji biznesowych. Dostępność wielu usług, których instalacja, konfiguracja i utrzymanie w tradycyjnej serwerowni wiązałyby się z wielogodzinną pracą, oraz mnogość stabilnych i nowoczesnych technologii dostępnych w chmurze spowodowały, że nawet małe przedsięwzięcia zyskały dostęp do bardzo profesjonalnych rozwiązań.
Cechą charakterystyczną tego rodzaju rozwiązań jest wykorzystanie funkcji bezserwerowych, mikrousług, kontenerów oraz IaC (Infrastructure as a Code; to proces zarządzania i powoływania nowych elementów infrastruktury serwerowo-sieciowej za pomocą definicji zapisanych w plikach). To właśnie te elementy stanowią o zaletach rozwiązań Cloud Native. W Cybercom Cloud Native to powszechnie przyjęty sposób projektowania i tworzenia aplikacji biznesowych, który przekłada się na wymierne korzyści dla naszych klientów.
Funkcje bezserwerowe i oszczędność pieniędzy
Podczas pisania aplikacji uruchamianych w chmurze publicznej możemy zupełnie oderwać się od zarządzania sieciami, serwerami czy systemami operacyjnymi i skorzystać z możliwości bezserwerowego (serverless) powoływania aplikacji. Model FaaS (Function as a Service) pozwala budować skalowalne i bezpieczne systemy bez konieczności projektowania infrastruktury serwerowej i sieciowej. Funkcje bezserwerowe pozwalają skupić się na kodzie i funkcjonalności aplikacji, a rozliczani jesteśmy w oparciu o to, ile razy dana funkcja została uruchomiona.
Tutaj pojawia się pierwsza korzyść płynąca z zastosowania technologii Cloud Native – oszczędność pieniędzy. Zamiast powoływać drogie w utrzymaniu serwery, działające nieustannie, płacimy jedynie za uruchomienie funkcji. Nawet skomplikowana aplikacja w okresach mniejszej aktywności użytkowników może kosztować kilka centów miesięcznie. Warto podkreślić, że obecnie każdy duży dostawca chmury publicznej ma w swojej ofercie rozwiązania bezserwerowe (AWS Lambda, Azure Functions, Google Functions). Należy jednak pamiętać, że nie w każdym przypadku użycie funkcji zamiast serwera wirtualnego przyniesie oczekiwane korzyści. Zastosowanie konkretnego rozwiązania wymaga wiedzy na temat architektury aplikacji oraz jej wykorzystywania przez użytkowników i doświadczenia w tym zakresie.
Mikrousługi i łatwość utrzymania aplikacji oraz napraw awarii
Świadomość złożoności oferty dostawców chmur publicznych jest kluczowa do umiejętnego zaprojektowania nowoczesnej aplikacji – tak, aby jak najmniejszym nakładem sił zbudować szybko bezpieczne, wysokodostępne, skalowalne rozwiązanie.
Mikrousługi to na tyle małe części systemu, że są w stanie realizować tylko jedną funkcję aplikacji w sposób niezależny. Stosowane dotychczas popularne rozwiązania typu Monotlith zbudowane były w oparciu o klasy i funkcje skompilowane do jednego, spójnego monolitu aplikacji. Jego przetestowanie i uruchomienie wymagało mnóstwa czasu, a każda drobna zmiana w dowolnym elemencie – przebudowania i ponownego zainstalowania całości. W przypadku mikroserwisów zmiana w jednym z serwisów jest prostsza, a jej publikacja nie wymaga aktualizacji całego systemu, lecz jednego, małego elementu. Ponadto awaria jednego mikroserwisu nie powoduje zwykle niedostępności całego systemu i jest łatwiejsza do zdiagnozowania i naprawy. To spora zaleta rozwiązań typu Cloud Native.
Kontenery i niezależność od dostawcy
Kolejnym elementem przenoszącym nas ze świata fizycznych serwerów lokalnych, uruchomionych w naszych serwerowniach i serwujących nam monolityczne aplikacje, są kontenery. Kontenery to kolejny poziom logicznej separacji środowiska wirtualnego, w ramach jednego systemu operacyjnego. Poza skalowalnością i elastycznością, jakie dają funkcje, tutaj pojawia się jeszcze jedna zaleta rozwiązań Cloud Native – to niezależność od dostawcy infrastruktury.
Projektowanie NCA (Native Cloud Application) wymaga od zespołu dużego doświadczenia w łączeniu różnych usług chmurowych, korzystania z funkcji czy kontenerów w celu zbudowania aplikacji opartej o mikrousługi. To zupełnie nowe podejście do tworzenia aplikacji, odmienne od poprzedniego modelu budowania monolitów i w pełni wykorzystujące zalety chmury publicznej.
Wojtek Kubiak, Delivery Manager Cybercom Poland