Wat zijn microservices?

Voltooid

De cloud stimuleert de ontwikkeling van toepassingen en het beheer van IT-systemen. Moderne cloudtoepassingen moeten snel, flexibel, zeer schaalbaar en betrouwbaar zijn.

Met behulp van containers kunt u toepassingen implementeren die voldoen aan al deze vereisten. Maar als u een toepassing in een container plaatst zonder een strategisch ontwerppatroon te volgen, is het alsof u in een voertuig komt en hoopt u uw weg naar een nieuwe stad te vinden zonder een kaart of GPS te gebruiken. U komt mogelijk terecht op uw bestemming, maar de route is waarschijnlijk niet direct of de meest efficiënte.

Een microservicesarchitectuur is handig in dit scenario. Microservices bieden u een benadering van softwareontwikkeling en -implementatie die perfect geschikt is voor de vereisten voor flexibiliteit, schaalbaarheid en betrouwbaarheid van moderne cloudtoepassingen.

Wat is een microservicesarchitectuur?

In een microservicesarchitectuur wordt een grote toepassing opgesplitst in een set kleinere services. Elke service wordt uitgevoerd in een eigen proces en communiceert met andere processen met behulp van protocollen zoals HTTP/HTTPS, WebSocket of Advanced Message Queuing Protocol (AMQP). Elke microservice implementeert een specifiek end-to-end-domein of bedrijfsmogelijkheid binnen een bepaalde contextgrens. Elke microservice moet autonoom worden ontwikkeld en moet onafhankelijk kunnen worden geïmplementeerd. Ten slotte moet elke microservice eigenaar zijn van het bijbehorende domeingegevensmodel en domeinlogica. Microservices kunnen worden gebaseerd op verschillende technologieën voor gegevensopslag (SQL, NoSQL) en verschillende programmeertalen.

Hier volgen enkele belangrijke kenmerken van microservices:

  • Ze zijn klein, onafhankelijk en losjes gekoppeld.
  • Elke microservice heeft een afzonderlijke codebasis die een klein ontwikkelteam kan beheren.
  • Ze worden onafhankelijk geïmplementeerd. Een team kan een bestaande microservice bijwerken zonder de hele toepassing opnieuw te bouwen en opnieuw te implementeren.
  • Ze behouden hun gegevens of de externe status in hun respectieve databases. In tegenstelling tot in een monolithische architectuur delen microservices geen databases.
  • Ze communiceren met elkaar met behulp van goed gedefinieerde API's. Interne implementatiegegevens van een service zijn onzichtbaar voor andere services.
  • Ze ondersteunen polyglotprogrammering . De microservices waaruit een webtoepassing bestaat, hoeven bijvoorbeeld niet dezelfde technologiestack, bibliotheken of frameworks te delen.

Waarom ontwikkelen met behulp van een microservicesarchitectuur?

Microservices bevatten doorgaans eenvoudigere functionaliteit voor klantvereisten, die u kunt uitschalen of inschalen. U kunt ze onafhankelijk testen, implementeren en beheren. Een belangrijk voordeel van een microservicesbenadering is dat teams meer worden aangestuurd door klantscenario's dan met behulp van specifieke technologie. Elk klein ontwikkelingsteam ontwikkelt een microservice op basis van een klantscenario. Het team kiest de technologieën die het gebruikt.

Microservices bieden flexibiliteit op lange termijn. Microservices ondersteunen onderhoudbaarheid in complexe, grote en zeer schaalbare systemen door u toepassingen te laten maken op basis van veel onafhankelijk implementeerbare services die elk een gedetailleerde en autonome levenscyclus hebben.

Als een ander voordeel kunnen microservices onafhankelijk worden uitgeschaald. In plaats van één monolithische toepassing te hebben die u als eenheid moet uitschalen, kunt u in plaats daarvan specifieke microservices uitschalen. U kunt alleen het functionele gebied schalen waarvoor meer verwerkingskracht of netwerkbandbreedte nodig is om de vraag te ondersteunen in plaats van andere gebieden van de toepassing uit te schalen die niet hoeven te worden geschaald. Dat betekent kostenbesparingen omdat u minder hardware nodig hebt.

Diagram dat laat zien hoe microservices kunnen worden geschaald op virtuele machines.

De microservicesbenadering maakt flexibele wijzigingen en snelle iteratie van elke microservice mogelijk, omdat u specifieke, kleine gebieden van complexe, grote en schaalbare toepassingen kunt wijzigen.

Het ontwerpen van verfijnde microservicestoepassingen maakt continue integratie en continue levering mogelijk. Het versnelt ook de levering van nieuwe functies in de toepassing. U kunt microservices geïsoleerd uitvoeren en testen en deze autonoom ontwikkelen, terwijl u duidelijke contracten tussen services onderhoudt. Zolang u de interfaces of contracten niet wijzigt, kunt u de interne implementatie van een microservice wijzigen of nieuwe functionaliteit toevoegen zonder andere microservices te breken.

Welke rol spelen containers?

Containerisatie is een benadering van softwareontwikkeling waarbij een toepassing of service, de bijbehorende afhankelijkheden en de configuratie (geabstraheerd als manifestbestanden voor implementatie) worden verpakt als een containerinstallatiekopieën. U kunt de containertoepassing testen als een eenheid en deze implementeren als een exemplaar van een containerinstallatiekopie op het hostbesturingssysteem.

Softwarecontainers fungeren als een standaardeenheid van software-implementatie die verschillende code en afhankelijkheden kan bevatten. Dit is vergelijkbaar met hoe transportcontainers goederen van allerlei soorten per schip, trein of vrachtwagen vervoeren. Ontwikkelaars en IT-professionals kunnen containersoftware gebruiken om code en afhankelijkheden in omgevingen te implementeren met weinig of geen wijzigingen.

Als het lijkt alsof het containeriseren van een toepassing een uitstekende manier is om het architectuurpatroon voor microservices te implementeren, is dit een goede manier. De voordelen van het gebruik van containers komen bijna precies overeen met de voordelen van het gebruik van een microservicesarchitectuur.

Diagram met meerdere containers die op één host worden uitgevoerd.

Notitie

Het containeriseren van een toepassing is niet de enige manier om microservices te implementeren. U kunt microservices implementeren als afzonderlijke services in Azure-app Service, op virtuele machines of op verschillende manieren. Containers zijn het implementatieprogramma dat we voor de rest van deze module gebruiken voor onze microservices.

Een ander voordeel van containerisatie is schaalbaarheid. U kunt snel uitschalen door nieuwe containers te maken voor kortetermijntaken. Vanuit een toepassingspunt is het instantiëren van een installatiekopie (het maken van een container) vergelijkbaar met het instantiëren van een proces, zoals een service of web-app.

Kortom, containers bieden de voordelen van isolatie, draagbaarheid, flexibiliteit, schaalbaarheid en controle over de gehele levenscycluswerkstroom van toepassingen.

De microservices die u in deze module bouwt, worden uitgevoerd in een Docker-container, gepubliceerd met behulp van .NET CLI.

.NET SDK-containerpublicatie

In .NET 7 heeft de .NET SDK de mogelijkheid gekregen om containerinstallatiekopieën te maken via de dotnet publish opdracht. De hulpprogramma's voeren een heleboel deductie uit op basis van de eigenschappen van uw project en de bijbehorende uitvoer. .NET maakt vervolgens dezelfde installatiekopieën die een Dockerfile zou maken. Het kan slechts twee opdrachten duren om een nieuwe toepassing te maken en deze als een installatiekopieën te publiceren:

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

Met de voorgaande .NET CLI-opdrachten maakt u een nieuwe web-API en publiceert u de app als een container:

  • Gericht op Linux als het besturingssysteem (--os linux).
  • Een x64-architectuur opgeven (--arch x64).
  • De releaseconfiguratie (-c Release) gebruiken.

U kunt veel aspecten van de gegenereerde container beheren via MSBuild-eigenschappen. Als u in het algemeen een opdracht in een Dockerfile kunt gebruiken om een bepaalde configuratie in te stellen, kunt u hetzelfde doen via MSBuild.

Waarom microservices bouwen in .NET?

Vanaf .NET Core en doorgaan met de huidige iteraties, is .NET gebouwd om eerst cloudeigen te zijn. Het wordt platformoverschrijdend uitgevoerd, zodat uw Docker-installatiekopieën kunnen worden gebaseerd op een variant van Linux en uw .NET-code nog steeds wordt uitgevoerd. Microsoft heeft al .NET-installatiekopieën gemaakt voor Docker. Ook is .NET zeer snel. De ASP.NET Kestrel-webserver presteert regelmatig beter dan andere webservers.

Docker

Docker is een opensource-platform dat u kunt gebruiken om de implementatie van toepassingen te automatiseren als draagbare, zelfvoorzienende containers die in de cloud of on-premises kunnen worden uitgevoerd. Docker is ook het bedrijf dat deze technologie bevordert en ontwikkelt. Docker als organisatie werkt samen met cloud-, Linux- en Windows-leveranciers, waaronder Microsoft.

Docker-containers kunnen overal worden uitgevoerd: on-premises in het datacenter van de klant, in een externe serviceprovider of in de cloud. Docker-installatiekopieëncontainers kunnen systeemeigen worden uitgevoerd op Linux en Windows.

Wat is een afbeelding?

Wanneer een ontwikkelaar Docker gebruikt, maken ze een app of service. Vervolgens verpakken ze de app of service en de bijbehorende afhankelijkheden in een containerinstallatiekopieën. Een afbeelding is een statische weergave van de app of service en de bijbehorende configuratie en afhankelijkheden.

De installatiekopie, wanneer deze wordt uitgevoerd, wordt de container. De container is de instantie van een installatiekopie in het geheugen.

Een containerinstallatiekopie is onveranderbaar. Nadat u een installatiekopieën hebt gebouwd, kan de installatiekopieën niet meer worden gewijzigd. Omdat u een installatiekopieën niet kunt wijzigen, maakt u een nieuwe installatiekopieën als u wijzigingen wilt aanbrengen in de app of service en de bijbehorende afhankelijkheden. Deze functie garandeert dat de installatiekopieën die u in productie gebruikt, dezelfde installatiekopieën zijn die in ontwikkeling en testen worden gebruikt.

Wat is een Dockerfile?

Een Dockerfile is een tekstbestand met instructies voor het bouwen van een Docker-installatiekopieën. Dockerfiles worden geschreven in een minimale scripttaal die is ontworpen voor het bouwen en configureren van installatiekopieën. Dockerfiles documenteren ook de bewerkingen die nodig zijn om een installatiekopieën te bouwen, te beginnen met een basisinstallatiekopieën.

Als u een Docker-installatiekopieën wilt maken die uw toepassing bevat, begint u meestal met het identificeren van een basisinstallatiekopieën. Vervolgens voegt u meer bestanden en configuratie toe aan de basisinstallatiekopieën. Het proces voor het identificeren van een geschikte basisinstallatiekopieën begint meestal met een zoekopdracht op Docker Hub. U zoekt naar een kant-en-klare installatiekopie die al een toepassingsframework bevat en alle hulpprogramma's en hulpprogramma's van een Linux-distributie zoals Ubuntu of Alpine. Als u bijvoorbeeld een ASP.NET-toepassing hebt die u in een container wilt verpakken, publiceert Microsoft een installatiekopieën met de naam mcr.microsoft.com/dotnet/aspnet die al de ASP.NET runtime bevat.

U kunt een installatiekopieën aanpassen door een container te starten met een basisinstallatiekopieën en deze vervolgens te wijzigen. Wijzigingen omvatten meestal activiteiten zoals het kopiëren van bestanden naar de container vanuit het lokale bestandssysteem en het uitvoeren van verschillende hulpprogramma's en hulpprogramma's om code te compileren.

Een Dockerfile is een set instructies waarmee u een Docker-installatiekopieën maakt met de exacte software die u erin nodig hebt om uw toepassing uit te voeren, inclusief de toepassing zelf.

1.

Welke van de volgende scenario's zou een kandidaat zijn om een microservice te worden?

2.

Welk doel heeft een Docker-installatiekopieën in een architectuurpatroon voor microservices?

3.

Wat is het verschil tussen een container en een installatiekopieën?