Nowoczesne aplikacje – Jak nimi zarządzać oraz jak odnieść sukces w wykorzystaniu rozwoju aplikacji do zwiększenia zwinności i szybkości innowacji w organizacjach.
Najlepsze praktyki dla nowoczesnych aplikacji obejmują znacznie więcej niż tylko zmianę sposobu, w jaki projektuje się i buduje technologię. Należy również przemyśleć na nowo, jak nią zarządzać. Aby odnieść sukces w wykorzystaniu rozwoju aplikacji do zwiększenia zwinności i szybkości innowacji, organizacje powinny przyjąć pięć elementów w dowolnej kolejności: mikrousługi, dedykowane bazy danych, automatyczne procesy wdrażania nowych wersji systemów, bezserwerowy model operacyjny oraz zautomatyzowane, stale zapewniane bezpieczeństwo – mówi dr Werner Vogels, CTO w Amazon.com.
Wzory architektoniczne: mikrousługi
W architekturze mikrousług, aplikacja składa się z niezależnych komponentów, które uruchamiają i przetwarzają procesy/żądania aplikacji – mikrousługi zwane są również usługami. Budowane są one z myślą o możliwościach biznesowych, a każda usługa pełni jedną funkcję. Działa ona niezależnie i jest zarządzana przez jeden zespół programistów, dzięki czemu każda usługa może być aktualizowana, wdrażana i skalowana w celu zaspokojenia zapotrzebowania na określone funkcje aplikacji.
„W miarę jak firmy przechodzą do mikrousług, wielu programistów szuka również sposobów na usprawnienie zarządzania zależnościami – wykorzystywanymi przy budowie danej usługi. Przykładami technologii, która służą do usprawnienia tego etapu budowy aplikacji są kontenery oraz funkcje AWS Lambda. Zwłaszcza kontenery stają się bardzo popularnym sposobem tworzenia aplikacji mikrousługowych i modernizacji już istniejących systemów, ponieważ oferują doskonałą przenośność i elastyczność w zakresie ustawień aplikacji. Z kolei dzięki AWS Lambda programista otrzymuje sposobność najszybszego zbudowania nowych funkcjonalności i aplikacji – jednocześnie ograniczając do minimum późniejsze zadania utrzymaniowe.” – zauważa Tomasz Stachlewski, CEE Solutions Architecture Manager w AWS.
W mikrousługach istotny jest też sposob komunikacji między sobą. Wiele aplikacji nadal korzysta z połączeń API, ale istnieje kilka innych opcji, np. strumieniowe przetwarzanie danych w czasie rzeczywistym, zdarzenia uruchamiające reakcje na zmiany danych oraz tzw. siatki serwisowe (ang. service mesh).
Zarządzanie danymi: dedykowane bazy danych
Nowoczesne aplikacje budowane są często z użyciem wielu niezależnych i różnego typu baz danych zamiast pojedynczej bazy mającej na celu przechowywanie wszelkiego typu danych aplikacji. Jest to ważna zmiana w stosunku do tradycyjnej architektury aplikacji, ponieważ monolityczna aplikacja stwarza wyzwania związane ze skalowaniem i odpornością na błędy wraz ze wzrostem, tak samo jak baza danych. Ponadto, pojedyncza baza danych jest pojedynczym punktem awarii i trudno jest jej spełnić specyficzne potrzeby zestawu różnorodnych mikrousług. Różnego rodzaju aplikacje wymagają różnych typów baz danych – w celu optymalizacji kosztów i zwiększenia szybkości ich działania. Na przykład, jeśli uruchamia się aplikacje, które będzie wymagała analizy relacji pomiędzy danymi zapisanymi w bazie, czy też budujemy silnik rekomendacyjny dla naszje platformy e-commerce, to wówczas można wybrać tzw. bazę grafową (np. Amazon Neptune), która przechowuje i nawiguje relacjami. Natomiast jeśli dane aplikacje potrzebują dostępu do danych w czasie rzeczywistym, bazę danych in-memory (np. Amazon ElastiCache), która jest powszechnie wykorzystywana w grach i aplikacjach Internetu Rzeczy.
„Proces budowy nowoczesnych aplikacji można podzielić na dwie fazy: standaryzacja i automatyzacja. Po pierwsze, istotnym jest aby zdefiniować szablony, zgodne z najlepszymi praktykami, które opisują elementy infrastrukturalne, z których chcemy korzystać podczas budowy naszej aplikacji. Budowa rozwiązań w oparciu o tego typu szablony – określana jako „Infrastruktura jako kod” pomaga zespołom rozpocząć pracę we właściwym miejscu ponieważ szablon automatyzuje proces uruchamiania całego stosu technologicznego – tym samym przyśpiesza proces powstawania nowych aplikacji i minimalizuje możliwość popełnienia błędów. Drugą istotną fazą jest automatyzacja procesów wdrażania nowych wersji aplikacji na środowiska docelowe. Naszym celem powinno być ograniczenie a nawet usunięcie manualnych zadań z procesu. Dzięki zautomatyzowaniu procesu, dokonywaniu ciągłej integracji pomiędzy komponentami, testowaniu ich i ostatecznie wdrażaniu aplikacji na środowiska produkcyjne – jesteśmy w stanie przyśpieszyć proces dostarczania zmian dla klientów końcowych oraz minimalizujemy możliwości wystąpienia błędów i problemów poprzez ciągle przeprowadzanie automatycznych testów. Proces ciągłego wdrażania pozwala testować i wprowadzać zmiany wielokrotnie szybciej niż to miało odczynienia w procesach manualnych.” – podkreśla Tomasz Stachlewski, CEE Solutions Architecture Manager w AWS.
Model operacyjny: tak bezserwerowy, jak to tylko możliwe
Nowoczesne aplikacje mają wiele części ruchomych. Zamiast pojedynczej aplikacji i bazy danych, nowoczesna aplikacja może składać się z tysięcy usług, z których każda ma specjalnie zbudowaną bazę danych i zespół stale dodający nowe funkcje. Stosy aplikacji zazwyczaj składają się z trzech elementów: usługi obliczeniowej do uruchamiania logiki aplikacji (np. AWS Fargate), danych przechowywanych w bazach danych MySQL i PostgreSQL lub Amazon Aurora, warstwy integrującej do przenoszenia danych (np. Amazon EventBridge). Wykorzystanie modelu budowy aplikacji serverless – czyli bezserwerowego, pozwala na szyszą budowę nowoczesnych aplikacji i tym samym maksymalizację korzyści biznesowych.
Bezpieczeństwo: odpowiedzialność każdego z nas
W nowoczesnych aplikacjach, funkcje bezpieczeństwa są wbudowane w każdy komponent aplikacji i są automatycznie testowane oraz wdrażane wraz z każdą nową wersją. Oznacza to, że bezpieczeństwo nie jest już wyłączną odpowiedzialnością zespołu ds. bezpieczeństwa. Raczej jest ono głęboko zintegrowane z każdym etapem cyklu życia aplikacji. Zespoły inżynieryjne, operacyjne i zespoły ds. zgodności mają tu do odegrania swoje role.
Bezpieczeństwo jest zintegrowane z narzędziami, takimi jak repozytoria kodu, budowanie programów zarządzania i narzędzi wdrożeniowych. Innymi słowy elementy dbania o bezpieczeństwo osadzone są zarówno w automatycznych procesach wdrażania zmian jak i w poszczególnych elementach z których składa się nowoczesna aplikacja. Dzięki usługom bezserwerowym, postawa bezpieczeństwa jest jeszcze łatwiejsza do utrzymania, ponieważ do każdej usługi wbudowane są aktualizacje wersji systemu operacyjnego, aktualizacja oprogramowania i monitorowanie tych, które są związane z bezpieczeństwem infrastruktury.