Jeśli obecnie pracujesz w branży technologicznej jako deweloper oprogramowania, inżynier chmury, inżynier DevOps, SRE itp., istnieje duża szansa, że zetknąłeś się z terminem „aplikacja cloud-native”. Ten artykuł ma na celu przybliżyć zarówno tradycyjne tworzenie aplikacji, jak i aplikacje cloud-native, tak, aby po lekturze nie był to tylko jeden z tych modnych terminów, lecz wiedza, która pozwoli Ci usprawnić sposób, w jaki produkty są rozwijane/zarządzane w Twojej organizacji, z uwzględnieniem skalowalności, wysokiej dostępności i szybszego czasu dostarczania innowacji.
Świat tworzenia oprogramowania/aplikacji zmienił się, ewoluował i wciąż zmienia się gwałtownie. Te zmiany obejmują trendy jak Agile i DevOps. Pomogły one firmom przyspieszyć rozwój oprogramowania i szybsze wydania. Ponieważ przetwarzanie w chmurze stało się bardzo popularne w ostatniej dekadzie, wniosło wiele zmian do świata tworzenia oprogramowania i wzbudziło wiele pytań zarówno wśród właścicieli, jak i interesariuszy.
Pytania te obejmują:
- Czy proces tworzenia aplikacji powinien dostosować się do modeli chmurowych, i jak?
- Jakie korzyści daje takie podejście?
Mówiąc prosto, przyjęcie podejścia cloud-native przyczynia się do ogólnej poprawy działania Twojego biznesu.
Teraz firmy znajdują się w środku tej ewolucji w tworzeniu aplikacji: przejścia od tradycyjnego tworzenia aplikacji i jego metodologii do bardziej podejścia cloud-native. To trend, który jest potrzebny, rośnie i zmienił sposób, w jaki organizacje podchodzą do projektów rozwojowych. W rzeczywistości badania wskazują, że przyjęcie technik tworzenia aplikacji cloud-native wzrośnie w nadchodzących latach, z 32% nowych aplikacji przedsiębiorstw planowanych jako projekty cloud-native do roku 2020.

To zdecydowanie nie jest łatwa zmiana metodyk ani praktyk dla organizacji, zwłaszcza tych, które poświęciły wiele godzin, zasobów ludzkich i finansów na przyspieszenie wydań aplikacji, aby sprostać rosnącym wymaganiom biznesu, przy jednoczesnym uwzględnieniu innowacyjnych i zwinnych rozwiązań. Tradycyjne podejścia do tworzenia aplikacji muszą być przemyślane na nowo, przeprojektowane i wdrożone ponownie zgodnie z metodyką cloud-native.
Definicja aplikacji tradycyjnych i cloud-native
Warto wspomnieć, że rozmowa o tym, czym jest aplikacja tradycyjna vs architektura aplikacji chmurowej, to nie tylko kwestia tego, gdzie aplikacja jest hostowana, ale znacznie więcej: jak aplikacja jest projektowana i budowana.
Aplikacja tradycyjna
obejmuje budowę aplikacji w sposób, w którym przechowywanie danych i cały proces tworzenia oprogramowania odbywa się w zamkniętym środowisku. W większości przypadków te aplikacje są monolitami, które mają kilka problemów w zakresie skalowalności i często również wysokiej dostępności. Zdecydowanie nadal mają swoje przypadki użycia i Twój biznes może faktycznie lepiej funkcjonować z takim podejściem. Większość z nich działa w środowisku mainframe lub ma środowisko klient/serwer. Rozszerzanie aplikacji w oparciu o wykorzystane technologie wiąże się z dużym nakładem. W większości przypadków dodatkowy sprzęt musi być zakupiony, aby upgrade’ować lub skalować się w zakresie przechowywania danych i wspierania usług.
Oddalamy się od świata statycznych, płaskich i powolnych aplikacji tradycyjnych do świata, który jest szybszy, aktywny i wszechstronny w swoim podejściu.
Aplikacje cloud-native
termin „cloud computing” stał się całkiem popularny w ostatnich czasach, nawet wśród osób, które nie pracują w IT. Idea aplikacji opartych na chmurze była dyskutowana od ponad dekady i wniosła niezbędne zmiany w architekturze oprogramowania/aplikacji.
Aplikacje cloud-native są projektowane dla architektury przetwarzania w chmurze. Te aplikacje są hostowane i uruchamiane w chmurze i zaprojektowane, by wykorzystywać korzyści modelu dostarczania oprogramowania w chmurze. Aplikacja natywna to oprogramowanie rozwijane do użytku na konkretnej platformie.
Aplikacje cloud-native, w przeciwieństwie do aplikacji tradycyjnych, używają architektury mikroserwisów. Ta architektura przydziela zasoby każdej usłudze, której aplikacja używa, zapewniając, że aplikacja jest elastyczna i przystosowana do architektury chmurowej.
Wady aplikacji tradycyjnych
Czas rozwoju
Zbudowanie aplikacji tradycyjnej zabiera znacznie więcej czasu w porównaniu do procesu tworzenia aplikacji cloud-native. W większości przypadków są one tworzone i wydawane jako jeden pakiet, co czyni trudnym maksymalizację elastyczności i skalowalności.
Zależność od systemu operacyjnego
Architektura aplikacji tradycyjnej pozwala na zależności między aplikacją a systemem operacyjnym. To sprawia, że migracja i skalowanie staje się skomplikowaną kwestią. Podczas gdy architektura aplikacji cloud-native jest zaprojektowana tak, aby umożliwić używanie platform jako warstwy abstrakcji nad zależnościami. Główna idea za tym to pozwolić zespołom developerskim skupić się na tym, co ważne.
Czas wydania
Podczas gdy podejście cloud-native zapewnia szybsze wydania aktualizacji, w przypadku aplikacji tradycyjnych tak nie jest. To sprawia, że biznes reaguje później na potrzeby użytkownika, co ostatecznie zmniejsza retencję użytkowników. Czas spędzony na zidentyfikowanie błędu, pracę nad naprawą i wdrożenie poprawki jest znacząco wyższy w porównaniu do podejścia cloud-native, co ostatecznie stanowi stratę czasu i pieniędzy.
Przejście
W tworzeniu aplikacji tradycyjnych deweloperzy przekazują gotowy kod aplikacji zespołowi operacyjnemu, który jest odpowiedzialny za uruchomienie kodu w produkcji - co tworzy silosy, które każdy nowoczesny zespół powinien dążyć do usunięcia. Natomiast podejście cloud-native zapewnia szybkie i płynne przejście kodu aplikacji do środowiska produkcyjnego.
Koszt rozwoju/operacji
Cloud-native jest opłacalne - płacisz tylko za to, czego używasz, nie jak w przypadku aplikacji tradycyjnych, gdzie musisz zbudować infrastrukturę przechowywania danych i wszystkie usługi. Pomimo że wykonywana jest praca, przerwy w działaniu są niskie, co oznacza, że wydajność pracy jest poprawiona. Zysk wzrasta w dłuższym czasie.
Twarde kodowanie (Hard‑Coding)
Istnieje zawsze ryzyko, że pewne błędy ludzkie zostaną zakodowane w istotnej infrastrukturze podczas automatyzacji procesów. Z kolei operatorzy ludzie często spowalniają proces debugowania problemów. Automatyzacja eliminuje te problemy.
Przestoje
W chmurze istnieje duża możliwość, by wiele zadań wykonywanych ręcznie zostało w pełni zautomatyzowanych. W aplikacjach cloud-native łatwiej uzyskać niemal zerowy downtime przy wdrożeniach. Stało się to popularne dzięki stosowaniu CI/CD. Skalowalność, ciągłe testy, jak również przydzielanie zasobów mogą być w pełni zautomatyzowane. Ponadto wszystkie mikroserwisy są izolowane w kontenerach, co oznacza, że jeśli coś zawiedzie, jest to ograniczone do jednego mikrousługi; cała aplikacja nie przestaje działać, co czyni ją bardziej niezawodną. W przypadku szerokiej awarii, automatyzacja przywraca wdrożoną aplikację do poprzedniego stabilnego stanu; w takich przypadkach przestój aplikacji jest minimalny lub nieistniejący. Testy automatyczne są ochroną - jeśli aplikacja odbiega od określonych parametrów, zostaje to wykryte, a zespół zaczyna nad tym pracować.
Wyzwania związane z backupem
Aplikacje tradycyjne oferują w większości przypadków niewielką zdolność do tworzenia kopii zapasowych, a każdy błąd może prowadzić do awarii. Natomiast backupy w chmurze są wykonywane w sposób bardziej zautomatyzowany. Aplikację tradycyjną zawsze można refaktorować przez zmianę kodu i migrację do chmury.

Zalety Cloud Native
Abstrakcja OS
Dzięki użyciu kontenerów i modeli chmurowych takich jak „Platform as a Service” (PaaS) deweloperzy nie muszą martwić się zarządzaniem warstwą systemu operacyjnego, ponieważ zostaje to przekazane dostawcy chmury. To wielka zaleta w porównaniu z modelem tradycyjnym, ponieważ deweloperzy mogą skupić się na swoim podstawowym zadaniu – tworzeniu oprogramowania.
Z drugiej strony architektura aplikacji tradycyjnej jest silnie związana z systemem operacyjnym, co czyni ją nieodpowiednią do migracji i skalowania w różnych środowiskach hostujących.
Modularność
Nie tylko aplikacje tradycyjne są silnie związane z systemem operacyjnym, ale nawet ich usługi i funkcjonalności są mocno ze sobą powiązane w wdrożeniu. Dokładniej, aplikacje tradycyjne mogą mieć strukturę modularną podczas fazy rozwoju, ale w produkcji są wdrażane jako monolity. To sprawia, że procesy takie jak ulepszanie, testowanie i skalowanie są trudniejsze, wolniejsze i droższe.
Aplikacje cloud-native wprowadzają wysoką modularność przez mikroserwisy i kontenery. W takim środowisku zarówno procesy rozwoju, jak i utrzymania nie muszą być wykonywane na całej aplikacji, lecz tylko na jej niezależnych częściach – co czyni je łatwiejszymi, szybszymi i tańszymi.
Elastyczność
Elastyczność w chmurze pozwala wdrażać, powtarzać i ponownie wdrażać zasoby szybko i łatwo, kiedy i tak długo jak to konieczne. Ta elastyczność ułatwia eksperymentowanie i wdrażanie w chmurze.
Automatyzacja
Aplikacje cloud-native są budowane na idei architektury jako kodu i mają wysoko rozwinięty proces automatyzacji. Pewien poziom automatyzacji jest konieczny, aby produkować wyniki szybciej. To zmniejsza nasz wysiłek w testowaniu i dostarczaniu produktu.
Wydajność
Rozwiązania cloud-native umożliwiają łatwy dostęp i monitorowanie każdego procesu. Używają modelu „infrastruktury jako kodu” do automatyzacji wielu zadań wdrożeniowych i operacyjnych. Jednocześnie ułatwiają zespołom operacyjnym wdrażanie i zarządzanie całym procesem w sposób standaryzowany.
Testowalność
Podejście cloud-native używa CI/CD (ciągła integracja/ciągłe dostarczanie), aby ustanowić zautomatyzowany sposób testowania aplikacji i wdrażania ich od razu, gdy kod jest zbudowany.
Dzięki temu zespoły deweloperskie mogą szybciej i bardziej niezawodnie wprowadzać zmiany w kodzie, co prowadzi do lepszej współpracy i jakości oprogramowania. Efektem tego podejścia jest większa pewność niż zwykle.
Możliwość łatwego wyłączenia (Disposability)
Infrastruktura cloud-native wspiera procesy, które szybko się uruchamiają i uprzejmie zamykają, zapewniając maksymalną odporność i szybką rekonwalescencję po nieoczekiwanych awariach.
Które powinieneś wybrać
Rzeczywiście, przez lata aplikacje tradycyjne pomogły nam lepiej prowadzić biznes, jaki był w przeszłości. Niemniej jednak przetwarzanie w chmurze podnosi to na kilka poziomów dalej. Skupia się na ulepszeniu infrastruktury i zapewnieniu, że pełny potencjał biznesu zostanie osiągnięty.
Głównym przesłaniem z tego artykułu powinny być korzyści, jakie chmura przynosi nowoczesnym firmom. Podsumowując, obecny stan przestrzeni technologicznej/biznesowej wymaga od organizacji ciągłej innowacji i szybkiego dostarczania rozwiązań i to jest największa i najważniejsza korzyść aplikacji opartych na chmurze. W przypadku aplikacji tradycyjnej trudno osiągnąć bardziej modularną architekturę i automatyzację DevOps. To spowalnia tempo wydawania funkcji. Natomiast organizacje, które stosują nowoczesne podejście, zyskują wyższy poziom efektywności zespołu i całego procesu developmentu, co również ułatwia przyjęcie kultury DevOps.
Istnieje kilka powodów, dla których Twój biznes powinien korzystać z chmury. Aplikacje chmurowe / mikrousługi mają zalety, które zawierają:
Orkiestracja kontenerów: która umożliwia nam posiadanie aplikacji o wysokiej odporności na błędy, bezprzerwowych aktualizacji i zerowego przestoju. To sprawia, że doświadczenie użytkownika jest jeszcze lepsze. Ponadto automatyczne przygotowywanie zasobów umożliwia płacenie w oparciu o faktyczne zużycie, co znacząco obniża koszty w porównaniu do tradycyjnego podejścia.
Szybkie tempo innowacji biznesowych, które napędza transformację cyfrową, nie może być już wspierane przez tradycyjne metody tworzenia aplikacji. Zamiast tego organizacje przekształcają swoje strategie i filozofie dotyczące tworzenia aplikacji, aby dostosować się do mentalności cloud-native.
