Co to są mikrousługi?
Chmura napędza dzisiejsze tworzenie aplikacji i zarządzanie systemami IT. Nowoczesne aplikacje w chmurze muszą być szybkie, zwinne, wysoce skalowalne i niezawodne.
Korzystanie z kontenerów może ułatwić wdrażanie aplikacji spełniających wszystkie te wymagania. Ale wprowadzenie aplikacji do kontenera bez podążania za strategicznym wzorcem projektowym jest jak wejście do pojazdu i nadzieję znaleźć drogę do nowego miasta bez korzystania z mapy lub GPS. Możesz trafić do miejsca docelowego, ale trasa prawdopodobnie nie będzie bezpośrednia ani najbardziej wydajna.
Architektura mikrousług jest przydatna w tym scenariuszu. Mikrousługi zapewniają podejście do tworzenia i wdrażania oprogramowania, które doskonale nadaje się do wymagań dotyczących elastyczności, skalowalności i niezawodności nowoczesnych aplikacji w chmurze.
Czym jest architektura mikrousług?
W architekturze mikrousług duża aplikacja jest podzielona na zestaw mniejszych usług. 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, WebSocket lub Advanced Message Queuing Protocol (AMQP). Każda mikrousługa implementuje konkretną, kompleksową domenę lub możliwości biznesowe w ramach określonej granicy kontekstu. Każda mikrousługa musi być opracowywana autonomicznie i musi być niezależnie wdrażana. Na koniec każda mikrousługa powinna być właścicielem powiązanego modelu danych domeny i logiki domeny. Mikrousługi mogą być oparte na różnych technologiach magazynowania danych (SQL, NoSQL) i różnych językach programowania.
Poniżej przedstawiono niektóre kluczowe cechy mikrousług:
- Są małe, niezależne i luźno powiązane.
- Każda mikrousługa ma oddzielną bazę kodu, którą może zarządzać mały zespół programistyczny.
- Są one wdrażane niezależnie. Zespół może zaktualizować istniejącą mikrousługę bez ponownego kompilowania i ponownego wdrażania całej aplikacji.
- Utrwalają swoje dane lub stan zewnętrzny w odpowiednich bazach danych. W przeciwieństwie do architektury monolitycznej mikrousługi nie współużytkują baz danych.
- Komunikują się ze sobą przy użyciu dobrze zdefiniowanych interfejsów API. Szczegóły wewnętrznej implementacji poszczególnych usług są ukryte przed innymi usługami.
- Obsługują one programowanie wielolotowe. Na przykład mikrousługi tworzące aplikację internetową nie muszą współdzielić tego samego stosu technologii, bibliotek ani struktur.
Dlaczego warto opracowywać przy użyciu architektury mikrousług?
Mikrousługi zwykle hermetyzują prostsze funkcje wymagań klienta, które można skalować w poziomie lub skalować w poziomie. Można je testować, wdrażać i zarządzać nimi niezależnie. Ważną zaletą podejścia mikrousług jest to, że zespoły są napędzane bardziej przez scenariusze klientów niż przy użyciu określonej technologii. Każdy mały zespół programistyczny opracowuje mikrousługę na podstawie scenariusza klienta. Zespół wybiera używane technologie.
Mikrousługi zapewniają długoterminową elastyczność. Mikrousługi obsługują konserwację 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.
Kolejną 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. Można skalować tylko obszar funkcjonalny, który wymaga większej mocy obliczeniowej lub przepustowości sieci, aby obsługiwać zapotrzebowanie, zamiast skalować inne obszary aplikacji, które nie muszą być skalowane. Oznacza to oszczędności kosztów, ponieważ potrzebujesz mniej sprzętu.
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. Mikrousługi można uruchamiać i testować w izolacji i rozwijać je autonomicznie, zachowując jasne kontrakty między usługami. 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.
Jaką rolę odgrywają kontenery?
Konteneryzacja to podejście do tworzenia oprogramowania, w którym aplikacja lub usługa, jej zależności i konfiguracja (abstrakcja jako pliki manifestu wdrożenia) są pakowane razem jako obraz kontenera. Aplikację konteneryzowaną można przetestować jako jednostkę i wdrożyć jako wystąpienie obrazu kontenera w systemie operacyjnym hosta.
Kontenery oprogramowania działają jako standardowa jednostka wdrażania oprogramowania, która może zawierać różne kod i zależności. Jest to podobne do tego, jak kontenery przewozowe transportują towary wszelkiego rodzaju przez statek, pociąg lub ciężarówkę. Deweloperzy i specjaliści IT mogą używać konteneryzowanego oprogramowania do wdrażania kodu i zależności w różnych środowiskach bez modyfikacji.
Jeśli wygląda na to, że konteneryzowanie aplikacji może być doskonałym sposobem zaimplementowania wzorca architektury mikrousług, jest to. Korzyści wynikające z używania kontenerów są niemal dokładnie zgodne z korzyściami korzystania z architektury mikrousług.
Uwaga
Konteneryzowanie aplikacji nie jest jedynym sposobem wdrażania mikrousług. Mikrousługi można wdrażać jako poszczególne usługi w usłudze aplikacja systemu Azure, na maszynach wirtualnych lub na dowolną liczbę sposobów. Kontenery to narzędzie wdrażania, które będzie używane dla naszych mikrousług w pozostałej części tego modułu.
Kolejną zaletą konteneryzacji jest skalowalność. Możesz szybko skalować w poziomie, tworząc nowe kontenery do użycia na potrzeby krótkoterminowych zadań. Z punktu widzenia aplikacji utworzenie wystąpienia obrazu (tworzenie kontenera) jest podobne do tworzenia wystąpienia procesu, takiego jak usługa lub aplikacja internetowa.
Krótko mówiąc, kontenery oferują zalety izolacji, przenośności, elastyczności, skalowalności i kontroli w całym przepływie pracy cyklu życia aplikacji.
Mikrousługi utworzone w tym module będą uruchamiane w kontenerze platformy Docker opublikowanym przy użyciu interfejsu wiersza polecenia platformy .NET.
Publikowanie kontenera zestawu .NET SDK
Na platformie .NET 7 zestaw .NET SDK zyskał możliwość tworzenia obrazów kontenerów za pomocą dotnet publish
polecenia . Narzędzia wykonują szereg wnioskowania na podstawie właściwości projektu i jego danych wyjściowych. Następnie platforma .NET tworzy ten sam obraz, który zostanie utworzony przez plik Dockerfile. Utworzenie nowej aplikacji i opublikowanie jej jako obrazu może potrwać nawet dwa polecenia:
dotnet new webapi
dotnet publish --os linux --arch x64 /t:PublishContainer -c Release
Poprzednie polecenia interfejsu wiersza polecenia platformy .NET tworzą nowy internetowy interfejs API i publikują aplikację jako kontener:
- Określanie systemu Linux jako systemu operacyjnego (--os linux).
- Określanie architektury x64 (--arch x64).
- Przy użyciu konfiguracji wydania (-c Release).
Możesz kontrolować wiele aspektów wygenerowanego kontenera za pomocą właściwości programu MSBuild. Ogólnie rzecz biorąc, jeśli możesz użyć polecenia w pliku Dockerfile w celu ustawienia konfiguracji, możesz to zrobić za pośrednictwem programu MSBuild.
Dlaczego warto tworzyć mikrousługi na platformie .NET?
Począwszy od platformy .NET Core i kontynuując bieżące iteracji, platforma .NET jest tworzona jako natywna dla chmury. Działa międzyplatformowo, więc obraz platformy Docker może być oparty na odmianie systemu Linux, a kod platformy .NET nadal działa. Firma Microsoft utworzyła już obrazy platformy .NET dla platformy Docker. Ponadto platforma .NET jest bardzo szybka. Serwer internetowy ASP.NET Kestrel rutynowo przewyższa inne serwery internetowe.
Docker
Docker to platforma typu open source, której można użyć do automatyzacji wdrażania aplikacji jako przenośnych, samodzielnie wystarczających kontenerów, które mogą działać w chmurze lub lokalnie. Platforma Docker jest również firmą, która promuje i rozwija tę technologię. Platforma Docker jako organizacja współpracuje z dostawcami usług w chmurze, Linux i Windows, w tym z firmą Microsoft.
Kontenery platformy Docker mogą działać w dowolnym miejscu: lokalnie w centrum danych klienta, u zewnętrznego dostawcy usług lub w chmurze. Kontenery obrazów platformy Docker mogą działać natywnie w systemach Linux i Windows.
Co to jest obraz?
Gdy deweloper używa platformy Docker, tworzy aplikację lub usługę. Następnie pakują aplikację lub usługę i jej zależności w obrazie kontenera. Obraz jest statyczną reprezentacją aplikacji lub usługi oraz jej konfiguracji i zależności.
Obraz, po uruchomieniu, staje się kontenerem. Kontener to wystąpienie obrazu w pamięci.
Nie można zmienić obrazu kontenera. Po utworzeniu obrazu nie można zmienić obrazu. Ponieważ nie możesz zmienić obrazu, jeśli musisz wprowadzić zmiany w aplikacji lub usłudze i jej zależnościach, utwórz nowy obraz. Ta funkcja gwarantuje, że obraz używany w środowisku produkcyjnym jest tym samym obrazem, który jest używany podczas programowania i testowania.
Co to jest plik Dockerfile?
Plik Dockerfile to plik tekstowy zawierający instrukcje dotyczące tworzenia obrazu platformy Docker. Pliki Dockerfile są pisane w minimalnym języku skryptowym przeznaczonym do tworzenia i konfigurowania obrazów. Pliki Dockerfile dokumentują również operacje wymagane do utworzenia obrazu, począwszy od obrazu podstawowego.
Aby utworzyć obraz platformy Docker zawierający aplikację, zazwyczaj zaczynasz od zidentyfikowania obrazu podstawowego. Następnie dodasz więcej plików i konfiguracji do obrazu podstawowego. Proces identyfikowania odpowiedniego obrazu podstawowego zwykle rozpoczyna się od wyszukiwania w usłudze Docker Hub. Szukasz gotowego obrazu, który zawiera już strukturę aplikacji oraz wszystkie narzędzia i narzędzia dystrybucji systemu Linux, takie jak Ubuntu lub Alpine. Jeśli na przykład masz aplikację ASP.NET, którą chcesz spakować w kontenerze, firma Microsoft publikuje obraz o nazwie mcr.microsoft.com/dotnet/aspnet , który zawiera już środowisko uruchomieniowe ASP.NET.
Obraz można dostosować, uruchamiając kontener przy użyciu obrazu podstawowego, a następnie wprowadzając w nim zmiany. Zmiany zwykle obejmują działania, takie jak kopiowanie plików do kontenera z lokalnego systemu plików i uruchamianie różnych narzędzi i narzędzi do kompilowania kodu.
Plik Dockerfile to zestaw instrukcji, które tworzą obraz platformy Docker zawierający dokładne oprogramowanie potrzebne do uruchamiania aplikacji, w tym samą aplikację.