Architektura mikrousług
Napiwek
Ta zawartość jest fragmentem książki eBook, architektury mikrousług platformy .NET dla konteneryzowanych aplikacji platformy .NET dostępnych na platformie .NET Docs lub jako bezpłatnego pliku PDF, który można odczytać w trybie offline.
Jak sama nazwa wskazuje, architektura mikrousług jest podejściem do tworzenia aplikacji serwera jako zestawu małych usług. Oznacza to, że architektura mikrousług jest głównie zorientowana na zaplecze, chociaż podejście jest również używane dla frontonu. Każda usługa działa we własnym procesie i komunikuje się z innymi procesami przy użyciu protokołów, takich jak HTTP/HTTPS, WebSockets lub AMQP. Każda mikrousługa implementuje konkretną kompleksową domenę lub możliwości biznesowe w ramach określonej granicy kontekstu, a każda z nich musi być opracowywana autonomicznie i może być wdrażana niezależnie. Na koniec każda mikrousługa powinna być właścicielem powiązanego modelu danych domeny i logiki domeny (suwerenności i zdecentralizowanego zarządzania danymi) i może być oparta na różnych technologiach magazynowania danych (SQL, NoSQL) i różnych językach programowania.
Jakiego rozmiaru powinna być mikrousługa? Podczas tworzenia mikrousługi rozmiar nie powinien być ważnym punktem. Zamiast tego ważne jest utworzenie luźno powiązanych usług, dzięki czemu masz autonomię tworzenia, wdrażania i skalowania dla każdej usługi. Oczywiście podczas identyfikowania i projektowania mikrousług należy starać się, aby były tak małe, jak to możliwe, o ile nie masz zbyt wielu bezpośrednich zależności z innymi mikrousługami. Ważniejsze niż wielkość mikrousługi jest wewnętrzna spójność, która musi mieć i jej niezależność od innych usług.
Dlaczego architektura mikrousług? Krótko mówiąc, zapewnia długoterminową elastyczność. Mikrousługi umożliwiają lepszą obsługę złożonych, dużych i wysoce skalowalnych systemów, umożliwiając tworzenie aplikacji opartych na wielu niezależnie wdrażanych usługach, z których każdy ma szczegółowe i autonomiczne cykle życia.
Dodatkową korzyścią jest możliwość niezależnego skalowania mikrousług. Zamiast mieć pojedynczą aplikację monolityczną, którą należy skalować w poziomie jako jednostkę, możesz zamiast tego skalować określone mikrousługi w poziomie. Dzięki temu można skalować tylko obszar funkcjonalny, który wymaga większej mocy obliczeniowej lub przepustowości sieci w celu obsługi zapotrzebowania, zamiast skalować w poziomie innych obszarów aplikacji, które nie muszą być skalowane. Oznacza to oszczędności kosztów, ponieważ potrzebujesz mniej sprzętu.
Rysunek 4–6. Wdrażanie monolityczne a podejście mikrousług
Jak pokazano na rysunku 4–6, w tradycyjnym podejściu monolitycznym aplikacja jest skalowana przez sklonowanie całej aplikacji na kilku serwerach/maszynach wirtualnych. W podejściu mikrousług funkcjonalność jest segregowana w mniejszych usługach, dzięki czemu każda usługa może być skalowana niezależnie. Podejście mikrousług umożliwia elastyczne zmiany i szybką iterację każdej mikrousługi, ponieważ można zmieniać konkretne, małe obszary złożonych, dużych i skalowalnych aplikacji.
Projektowanie precyzyjnych aplikacji opartych na mikrousługach umożliwia ciągłą integrację i ciągłe wdrażanie. Przyspiesza również dostarczanie nowych funkcji do aplikacji. Precyzyjna kompozycja aplikacji pozwala również uruchamiać i testować mikrousługi w izolacji oraz rozwijać je autonomicznie przy zachowaniu jasnych kontraktów między nimi. Tak długo, jak nie zmieniasz interfejsów lub kontraktów, możesz zmienić wewnętrzną implementację dowolnej mikrousługi lub dodać nowe funkcje bez przerywania innych mikrousług.
Poniżej przedstawiono ważne aspekty umożliwiające pomyślne przejście do środowiska produkcyjnego przy użyciu systemu opartego na mikrousługach:
Monitorowanie i sprawdzanie kondycji usług i infrastruktury.
Skalowalna infrastruktura usług (czyli chmura i orkiestratory).
Projektowanie i implementacja zabezpieczeń na wielu poziomach: uwierzytelnianie, autoryzacja, zarządzanie wpisami tajnymi, bezpieczna komunikacja itp.
Szybkie dostarczanie aplikacji, zwykle z różnymi zespołami koncentrującymi się na różnych mikrousługach.
Metodyka DevOps i ciągła integracja/ciągłe wdrażanie oraz infrastruktura.
Z tych, tylko pierwsze trzy są omówione lub wprowadzone w tym przewodniku. Ostatnie dwa punkty, które są związane z cyklem życia aplikacji, zostały omówione w dodatkowej konteneryzowanej cyklu życia aplikacji platformy Docker za pomocą książki e-book platformy i narzędzi firmy Microsoft.
Dodatkowe zasoby
Mark Russinovich. Mikrousługi: rewolucja aplikacji oparta na chmurze
https://azure.microsoft.com/blog/microservices-an-application-revolution-powered-by-the-cloud/Martin Fowler. Mikrousługi
https://www.martinfowler.com/articles/microservices.htmlMartin Fowler. Wymagania wstępne dotyczące mikrousług
https://martinfowler.com/bliki/MicroservicePrerequisites.htmlJimmy Nilsson. Przetwarzanie w chmurze fragmentów
https://www.infoq.com/articles/CCC-Jimmy-NilssonCesar de la Torre. Cykl życia konteneryzowanych aplikacji platformy Docker korzystających z platformy i narzędzi firmy Microsoft (książka elektroniczna do pobrania)
https://aka.ms/dockerlifecycleebook