Co jsou mikroslužby?

Dokončeno

Cloud řídí dnešní vývoj aplikací a správu IT systémů. Moderní cloudové aplikace musí být rychlé, agilní, široce škálovatelné a spolehlivé.

Použití kontejnerů vám může pomoct s nasazením aplikací, které splňují všechny tyto požadavky. Ale uvedení aplikace do kontejneru bez sledování strategického vzoru návrhu je jako dostat se do vozidla a doufat, že najít cestu k novému městu bez použití mapy nebo GPS. Možná skončíte v cíli, ale trasa pravděpodobně nebude přímá ani nejúčinnější.

Architektura mikroslužeb je v tomto scénáři užitečná. Mikroslužby poskytují přístup k vývoji a nasazení softwaru, který je dokonale vhodný pro požadavky na flexibilitu, škálovatelnost a spolehlivost moderních cloudových aplikací.

Co je architektura mikroslužeb?

V architektuře mikroslužeb se velká aplikace rozdělí do sady menších služeb. Každá služba běží ve vlastním procesu a komunikuje s jinými procesy pomocí protokolů, jako jsou HTTP/HTTPS, WebSocket nebo Advanced Message Queuing Protocol (AMQP). Každá mikroslužba implementuje konkrétní komplexní doménu nebo obchodní funkce v rámci určitého kontextu. Každá mikroslužba se musí vyvíjet samostatně a musí být nezávisle nasaditelná. Nakonec by každá mikroslužba měla vlastnit svůj související datový model domény a logiku domény. Mikroslužby můžou být založené na různých technologiích úložiště dat (SQL, NoSQL) a různých programovacích jazycích.

Tady jsou některé klíčové charakteristiky mikroslužeb:

  • Jsou malé, nezávislé a volně svázané.
  • Každá mikroslužba má samostatný základ kódu, který může spravovat malý vývojový tým.
  • Nasazují se nezávisle. Tým může aktualizovat existující mikroslužbu bez opětovného sestavení a opětovného nasazení celé aplikace.
  • Uchovávají svá data nebo externí stav v příslušných databázích. Na rozdíl od monolitické architektury mikroslužby nesdílely databáze.
  • Komunikují mezi sebou pomocí dobře definovaných rozhraní API. Podrobnosti interní implementace každé služby jsou ostatním službám skryté.
  • Podporují polyglotní programování. Například mikroslužby, které tvoří webovou aplikaci, nemusí sdílet stejnou sadu technologií, knihovny nebo architektury.

Proč vyvíjet pomocí architektury mikroslužeb?

Mikroslužby obvykle zapouzdřují jednodušší funkce požadavků zákazníků, které můžete škálovat nebo škálovat. Můžete je testovat, nasazovat a spravovat nezávisle. Důležitou výhodou přístupu k mikroslužbám je to, že týmy jsou řízeny více scénáři zákazníků než používáním konkrétních technologií. Každý malý vývojový tým vyvíjí mikroslužbu založenou na scénáři zákazníka. Tým zvolí technologie, které používá.

Mikroslužby poskytují dlouhodobou flexibilitu. Mikroslužby podporují udržovatelnost ve složitých, velkých a vysoce škálovatelných systémech tím, že umožňují vytvářet aplikace založené na mnoha nezávisle nasazovatelných službách, které mají podrobné a autonomní životní cyklus.

Jako další výhodu můžou mikroslužby škálovat nezávisle na sobě. Místo jediné monolitické aplikace, kterou musíte škálovat jako jednotku, můžete místo toho škálovat konkrétní mikroslužby na více instancí. Můžete škálovat pouze funkční oblast, která potřebuje větší výpočetní výkon nebo šířku pásma sítě, aby podporovala poptávku místo horizontálního navýšení kapacity dalších oblastí aplikace, které není potřeba škálovat. To znamená úsporu nákladů, protože potřebujete méně hardwaru.

Diagram that shows how microservices can scale across virtual machines.

Přístup k mikroslužbám umožňuje agilní změny a rychlé iterace jednotlivých mikroslužeb, protože můžete měnit konkrétní, malé oblasti složitých, velkých a škálovatelných aplikací.

Navrhování jemně odstupňovaných aplikací založených na mikroslužbách umožňuje kontinuální integraci a postupy průběžného doručování. Také zrychluje doručování nových funkcí do aplikace. Mikroslužby můžete spouštět a testovat izolovaně a vyvíjet je samostatně a přitom udržovat jasné kontrakty mezi službami. Pokud rozhraní ani kontrakty nezměníte, můžete změnit interní implementaci jakékoli mikroslužby nebo přidat nové funkce bez přerušení jiných mikroslužeb.

Jakou roli hrají kontejnery?

Kontejnerizace je přístup k vývoji softwaru, ve kterém se aplikace nebo služba, její závislosti a konfigurace (abstrakce jako soubory manifestu nasazení) zabalí dohromady jako image kontejneru. Kontejnerizovanou aplikaci můžete otestovat jako jednotku a nasadit ji jako instanci image kontejneru v hostitelském operačním systému.

Stejně jako přepravní kontejnery umožňují přepravovat zboží všech druhů lodí, vlaku nebo nákladního vozu, softwarové kontejnery fungují jako standardní jednotka nasazení softwaru, která může obsahovat různé kódy a závislosti. Vývojáři a IT specialisté můžou pomocí kontejnerizovaného softwaru nasazovat kód a závislosti napříč prostředími s malými nebo žádnými úpravami.

Pokud to zní jako kontejnerizace aplikace, může to být skvělý způsob, jak implementovat model architektury mikroslužeb, je to. Výhody používání kontejnerů se rovnaly téměř přesně s výhodami použití architektury mikroslužeb.

Diagram that shows multiple containers running on a single host.

Poznámka:

Kontejnerizace aplikace není jediným způsobem, jak nasadit mikroslužby. Mikroslužby můžete nasadit jako jednotlivé služby ve službě Aplikace Azure Service, na virtuálních počítačích nebo v libovolném počtu způsobů. Kontejnery jsou nástroj pro nasazení, který použijeme pro naše mikroslužby pro zbytek tohoto modulu.

Další výhodou kontejnerizace je škálovatelnost. Horizontální navýšení kapacity můžete rychle rozšířit vytvořením nových kontejnerů, které se použijí pro krátkodobé úkoly. Z pohledu aplikace je vytvoření instance image (vytvoření kontejneru) podobné vytvoření instance procesu, jako je služba nebo webová aplikace.

Stručně řečeno, kontejnery nabízejí výhody izolace, přenositelnosti, flexibility, škálovatelnosti a řízení napříč celým pracovním postupem životního cyklu aplikace.

Mikroslužby, které v tomto modulu sestavíte, se spustí v kontejneru Dockeru publikovaném pomocí .NET CLI.

Publikování kontejnerů sady .NET SDK

V .NET 7 získala sada .NET SDK možnost vytvářet image kontejneru dotnet publish pomocí příkazu. Nástroje, které to mají udělat, dělají spoustu odvozování na základě vlastností projektu a jeho výstupů. .NET pak vytvoří stejnou image, kterou vytvoří soubor Dockerfile. Vytvoření nové aplikace a jeho publikování jako image může trvat až dva příkazy:

dotnet new webapi
dotnet publish --os linux --arch x64 /t:PublishContainer -c Release

Předchozí příkazy rozhraní příkazového řádku .NET vytvoří nové webové rozhraní API a publikuje aplikaci jako kontejner:

  • Cílení na Linux jako operační systém (--os linux).
  • Určení architektury x64 (--arch x64).
  • Použití konfigurace vydané verze (-c Release).

Pomocí vlastností NÁSTROJE MSBuild můžete řídit mnoho aspektů vygenerovaného kontejneru. Obecně platí, že pokud můžete pomocí příkazu v souboru Dockerfile nastavit určitou konfiguraci, můžete to udělat prostřednictvím nástroje MSBuild.

Proč vytvářet mikroslužby v .NET?

Počínaje .NET Core a pokračováním v aktuálních iteracích se .NET sestaví tak, aby byl jako první nativní pro cloud. Běží na různých platformách, takže image Dockeru může být založená na variantě Linuxu a váš kód .NET stále běží. Microsoft už pro Docker vytvořil image .NET. Rozhraní .NET je také extrémně rychlé. Webový server ASP.NET Kestrel pravidelně snižuje výkon jiných webových serverů.

Docker

Docker je opensourcová platforma , kterou můžete použít k automatizaci nasazení aplikací jako přenositelných, samoobslužných kontejnerů, které můžou běžet v cloudu nebo místně. Docker je také společnost, která podporuje a vyvíjí tuto technologii. Docker jako organizace spolupracuje s dodavateli cloudu, Linuxu a Windows, včetně Microsoftu.

Kontejnery Dockeru se můžou spouštět kdekoli: místně v datacentru zákazníka, v externím poskytovateli služeb nebo v cloudu. Kontejnery imagí Dockeru se dají nativně spouštět v Linuxu a Windows.

Co je obrázek?

Když vývojář používá Docker, vytvoří aplikaci nebo službu a pak zabalí aplikaci nebo službu a její závislosti do image kontejneru. Obrázek je statická reprezentace aplikace nebo služby a její konfigurace a závislosti.

Image se po spuštění stane kontejnerem. Kontejner je instance image existující v paměti.

Image kontejneru je neměnná. Po vytvoření image se image nedá změnit. Vzhledem k tomu, že nemůžete změnit image, vytvořte novou image, pokud potřebujete provést změny v aplikaci nebo službě a jejích závislostech. Tato funkce zaručuje, že imageF, kterou používáte v produkčním prostředí, je stejná image, která se používá při vývoji a testování.

Co je soubor Dockerfile?

Soubor Dockerfile je textový soubor, který obsahuje pokyny k sestavení image Dockeru. Soubory Dockerfile jsou napsané v minimálním skriptovacím jazyce, který je určený pro vytváření a konfiguraci imagí. Soubory Dockerfile také dokumentují operace potřebné k sestavení image počínaje základní imagí.

Pokud chcete vytvořit image Dockeru, která obsahuje vaši aplikaci, obvykle začnete identifikací základní image. Pak do základní image přidáte další soubory a konfiguraci. Zjišťování vhodné základní image probíhá většinou tak, že na Docker Hubu vyhledáte připravenou image, která už obsahuje aplikační architekturu a všechny nástroje některé distribuce Linuxu, jako je Ubuntu nebo Alpine. Pokud máte například ASP.NET aplikaci, kterou chcete zabalit do kontejneru, Microsoft publikuje image s názvem mcr.microsoft.com/dotnet/aspnet , která už obsahuje modul runtime ASP.NET.

Image můžete přizpůsobit spuštěním kontejneru se základní imagí a následnými změnami. Změny obvykle zahrnují aktivity, jako je kopírování souborů do kontejneru z místního systému souborů a spouštění různých nástrojů a nástrojů pro kompilaci kódu.

Dockerfile je sada instrukcí, které vytvoří image Dockeru, která má přesný software, který v něm potřebujete ke spuštění aplikace, včetně samotné aplikace.

1.

Který z následujících scénářů by byl kandidátem na vytvoření mikroslužby?

2.

Jaký účel má image Dockeru ve vzoru architektury mikroslužeb?

3.

Jaký je rozdíl mezi kontejnerem a imagí?