Wprowadzenie do natywnych aplikacji w chmurze

Napiwek

Ta zawartość jest fragmentem książki eBook, Architekting Cloud Native .NET Applications for Azure, dostępnej na platformie .NET Docs lub jako bezpłatny plik PDF do pobrania, który można odczytać w trybie offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Kolejny dzień, w biurze, pracując nad "następną wielką rzeczą".

Dzwonki telefonu komórkowego. To twój przyjazny rekruter - ten, który dzwoni codziennie z ekscytującymi nowymi możliwościami.

Ale tym razem jest inaczej: Start-up, kapitał i mnóstwo finansowania.

Wzmianka o chmurze, mikrousług i najnowocześniejszej technologii wypycha Cię przez brzeg.

Szybko do przodu kilka tygodni i jesteś teraz nowym pracownikiem w sesji projektowania tworzenia architektury głównej aplikacji handlu elektronicznego. Będziesz konkurować z wiodącymi witrynami handlu elektronicznego.

Jak go skompilujesz?

Jeśli zastosujesz się do wskazówek z ostatnich 15 lat, najprawdopodobniej skompilujesz system przedstawiony na rysunku 1.1.

Traditional monolithic design

Rysunek 1–1. Tradycyjny monolityczny projekt

Tworzysz dużą podstawową aplikację zawierającą całą logikę domeny. Obejmuje moduły, takie jak Identity, Catalog, Ordering i inne. Bezpośrednio komunikują się ze sobą w ramach jednego procesu serwera. Moduły współdzielą dużą relacyjną bazę danych. Podstawowe funkcje uwidacznia za pośrednictwem interfejsu HTML i aplikacji mobilnej.

Gratulacje! Właśnie utworzono aplikację monolityczną.

Nie wszystko jest złe. Monolity oferują pewne różne zalety. Na przykład są one proste...

  • build
  • test
  • deploy
  • troubleshoot
  • skalowanie w pionie

Wiele udanych aplikacji, które już istnieją, zostało utworzonych jako monolityczne. Aplikacja jest hitem i nadal ewoluuje, iteracji po iteracji, dodając więcej funkcji.

W pewnym momencie jednak zaczynasz czuć się nieswojo. Uważasz, że tracisz kontrolę nad aplikacją. W miarę upływu czasu uczucie staje się bardziej intensywne, a w końcu wchodzisz w stan znany jako Fear Cycle:

  • Aplikacja stała się tak przytłaczająco skomplikowana, że żadna osoba jej nie rozumie.
  • Obawiasz się wprowadzania zmian - każda zmiana ma niezamierzone i kosztowne skutki uboczne.
  • Nowe funkcje/poprawki stają się trudne, czasochłonne i kosztowne do zaimplementowania.
  • Każda wersja staje się jak najmniejsza i wymaga pełnego wdrożenia całej aplikacji.
  • Jeden niestabilny składnik może ulec awarii całego systemu.
  • Nowe technologie i struktury nie są opcją.
  • Wdrożenie metodologii dostarczania elastycznego jest trudne.
  • Erozja architektury ustawia się w miarę pogarszania się bazy kodu z niekończącymi się "szybkimi poprawkami".
  • Wreszcie, konsultantów przyjść i powiedzieć, aby przepisać go.

Brzmi znajomo?

Wiele organizacji rozwiązało ten monolityczny cykl strachu, stosując podejście natywne dla chmury do tworzenia systemów. Rysunek 1–2 przedstawia ten sam system, który stosuje natywne dla chmury techniki i praktyki.

Cloud-Native Design

Rysunek 1–2. Projekt natywny dla chmury

Zwróć uwagę, jak aplikacja jest rozłożona na zestaw małych izolowanych mikrousług. Każda usługa jest samodzielna i hermetyzuje własny kod, dane i zależności. Każda z nich jest wdrażana w kontenerze oprogramowania i zarządzana przez koordynatora kontenerów. Zamiast dużej relacyjnej bazy danych każda usługa jest właścicielem magazynu danych, którego typ różni się w zależności od potrzeb związanych z danymi. Zwróć uwagę, że niektóre usługi zależą od relacyjnej bazy danych, ale innych baz danych NoSQL. Jedna usługa przechowuje swój stan w rozproszonej pamięci podręcznej. Zwróć uwagę na to, jak cały ruch jest kierowany przez usługę API Gateway, która jest odpowiedzialna za kierowanie ruchu do podstawowych usług zaplecza i wymuszanie wielu problemów związanych z krzyżowym cięciem. Co najważniejsze, aplikacja w pełni korzysta z funkcji skalowalności, dostępności i odporności dostępnych na nowoczesnych platformach w chmurze.

Przetwarzanie natywne dla chmury

Hmm... Właśnie użyliśmy terminu Cloud Native. Twoja pierwsza myśl może brzmieć: "Co dokładnie oznacza?" Inny brzęczyk branży wymyślił przez dostawców oprogramowania do obrotu więcej rzeczy?"

Na szczęście jest to znacznie inne i miejmy nadzieję, że ta książka pomoże Ci przekonać.

W krótkim czasie natywny dla chmury stał się trendem w branży oprogramowania. Jest to nowy sposób tworzenia dużych, złożonych systemów. Takie podejście w pełni wykorzystuje nowoczesne rozwiązania programistyczne, technologie i infrastrukturę chmury. Natywna chmura zmienia sposób projektowania, implementowania, wdrażania i operacjonalizacji systemów.

W przeciwieństwie do ciągłego szumu, który napędza naszą branżę, natywna dla chmury jest prawdziwa. Weźmy pod uwagę Cloud Native Computing Foundation (CNCF), konsorcjum ponad 400 dużych korporacji. Jej karta polega na tym, aby natywne dla chmury obliczenia były wszechobecne w obrębie technologii i stosów w chmurze. Jako jedna z najbardziej wpływowych grup open source hostuje wiele najszybciej rozwijających się projektów open source w usłudze GitHub. Te projekty obejmują platformy Kubernetes, Prometheus, Helm, Envoy i gRPC.

CNCF wspiera ekosystem neutralności open source i dostawcy. Po tym przewodniku w tej książce przedstawiono natywne dla chmury zasady, wzorce i najlepsze rozwiązania, które są niezależne od technologii. Jednocześnie omawiamy usługi i infrastrukturę dostępną w chmurze platformy Microsoft Azure do tworzenia systemów natywnych dla chmury w chmurze.

Co dokładnie to jest chmura natywna? Usiądź, zrelaksowaj się i pozwól nam poznać ten nowy świat.