Een Azure Compute-optie kiezen voor microservices

De term compute verwijst naar het hostingmodel voor de computing-resources waarmee uw toepassing wordt uitgevoerd. Voor een microservicearchitectuur zijn twee benaderingen vooral populair:

  • Een service-orchestrator die services beheert die worden uitgevoerd op toegewezen knooppunten (VM's).
  • Een serverloze architectuur die gebruik maakt van Functions as a Service (FaaS).

Hoewel dit niet de enige opties zijn, zijn ze beide bewezen benaderingen voor het bouwen van microservices. Een toepassing kan beide methoden bevatten.

Service-orchestrators

Een orchestrator verwerkt taken met betrekking tot het implementeren en beheren van een set services. Deze taken omvatten het plaatsen van services op knooppunten, het bewaken van de status van services, het opnieuw starten van slechte services, taakverdeling van netwerkverkeer over service-exemplaren, servicedetectie, het schalen van het aantal exemplaren van een service en het toepassen van configuratie-updates. Populaire orchestrators zijn Kubernetes, Service Fabric, DC/OS en Docker Swarm.

Overweeg de volgende opties op het Azure-platform:

  • Azure Kubernetes Service (AKS) is een beheerde Kubernetes-service. AKS biedt Kubernetes en maakt de Kubernetes-API-eindpunten beschikbaar, maar host en beheert het Kubernetes-besturingsvlak, met automatische upgrades, geautomatiseerde patches, automatisch schalen en andere beheertaken. U kunt AKS zien als 'Kubernetes-API's als een service'.

  • Service Fabric is een platform voor gedistribueerde systemen voor het verpakken, implementeren en beheren van microservices. Microservices kunnen worden geïmplementeerd om Service Fabric containers, als binaire uitvoerbare bestanden of als Reliable Services. Met behulp van het Reliable Services-programmeermodel kunnen services rechtstreeks gebruikmaken van Service Fabric-programmeer-API's om query's uit te voeren op het systeem, de status van het rapport op te vragen, meldingen te ontvangen over configuratie- en codewijzigingen en andere services te ontdekken. Een belangrijk verschil met Service Fabric is de sterke focus op het bouwen van stateful services met behulp van Reliable Collections.

  • Andere opties, zoals Docker Enterprise Edition mesosphere DC/OS, kunnen worden uitgevoerd in een IaaS-omgeving in Azure. U vindt implementatiesjablonen op Azure Marketplace.

Containers

Soms praten mensen over containers en microservices alsof ze hetzelfde zijn. Hoewel dat niet waar is, hebt u geen containers nodig om microservicescontainers te bouwen, maar u hebt wel enkele voordelen die met name relevant zijn voor — — microservices, zoals:

  • Draagbaarheid. Een containerafbeelding is een zelfstandig pakket dat wordt uitgevoerd zonder dat bibliotheken of andere afhankelijkheden hoeven te worden geïnstalleerd. Dit maakt ze eenvoudig te implementeren. Containers kunnen snel worden gestart en gestopt, zodat u nieuwe exemplaren kunt maken om meer belasting te verwerken of om te herstellen van knooppuntfouten.

  • Dichtheid. Containers zijn lichtgewicht vergeleken met het uitvoeren van een virtuele machine, omdat ze besturingssysteembronnen delen. Dit maakt het mogelijk om meerdere containers in één knooppunt te verpakken, wat vooral nuttig is wanneer de toepassing uit veel kleine services bestaat.

  • Resource-isolatie. U kunt de hoeveelheid geheugen en CPU beperken die beschikbaar is voor een container. Dit kan helpen om ervoor te zorgen dat een runaway-proces de hostresources niet uitput. Zie het patroon Bulkhead voor meer informatie.

Serverloos (Functions as a Service)

Met een serverloze architectuur beheert u de VM's of de infrastructuur van het virtuele netwerk niet. In plaats daarvan implementeert u code en verwerkt de hostingservice het plaatsen van die code op een VM en het uitvoeren ervan. Bij deze benadering gaat het vaak om kleine, gedetailleerde functies die worden gecoördineerd met behulp van triggers op basis van gebeurtenissen. Een bericht dat in een wachtrij wordt geplaatst, kan bijvoorbeeld een functie activeren die uit de wachtrij leest en het bericht verwerkt.

Azure Functions is een serverloze rekenservice die ondersteuning biedt voor verschillende functietriggers, waaronder HTTP-aanvragen, Service Bus wachtrijen en Event Hubs gebeurtenissen. Zie triggers en bindingsconcepten Azure Functions een volledige lijst. Overweeg ook Azure Event Grid,een beheerde service voor gebeurtenisroutering in Azure.

Orchestrator of serverloos?

Hier zijn enkele factoren om rekening mee te houden bij het kiezen tussen een orchestrator-benadering en een serverloze benadering.

Beheerbaarheid Een serverloze toepassing is eenvoudig te beheren, omdat het platform alle rekenbronnen voor u beheert. Hoewel een orchestrator een aantal aspecten van het beheren en configureren van een cluster abstract maakt, worden de onderliggende VM's niet volledig verborgen. Met een orchestrator moet u nadenken over problemen zoals taakverdeling, CPU- en geheugengebruik en netwerken.

Flexibiliteit en controle. Een orchestrator geeft u veel controle over het configureren en beheren van uw services en het cluster. De afweging is extra complexiteit. Met een serverloze architectuur geeft u enige mate van controle op omdat deze details worden geabstraheerd.

Draagbaarheid. Alle orchestrators die hier worden vermeld (Kubernetes, DC/OS, Docker Swarm en Service Fabric) kunnen on-premises of in meerdere openbare clouds worden uitgevoerd.

Toepassingsintegratie. Het kan lastig zijn om een complexe toepassing te bouwen met behulp van een serverloze architectuur, vanwege de noodzaak om veel kleine onafhankelijke functies te coördineren, implementeren en beheren. Een optie in Azure is het gebruik van Azure Logic Apps voor het coördineren van een set Azure Functions. Zie Een functie maken die kan worden geïntegreerd met Azure Logic Apps voor een voorbeeld van deze Azure Logic Apps.

Kosten. Met een orchestrator betaalt u voor de VM's die in het cluster worden uitgevoerd. Met een serverloze toepassing betaalt u alleen voor de werkelijke verbruikte rekenbronnen. In beide gevallen moet u rekening houden met de kosten van extra services, zoals opslag, databases en berichtenservices.

Schaalbaarheid. Azure Functions automatisch geschaald om te voldoen aan de vraag, op basis van het aantal binnenkomende gebeurtenissen. Met een orchestrator kunt u uitschalen door het aantal service-exemplaren te verhogen dat in het cluster wordt uitgevoerd. U kunt ook schalen door extra VM's toe te voegen aan het cluster.

Onze referentie-implementatie maakt voornamelijk gebruik van Kubernetes, maar we hebben Azure Functions voor één service gebruikt, namelijk de service Leveringsgeschiedenis. Azure Functions was een goede optie voor deze specifieke service, omdat het een gebeurtenisgestuurde workload is. Door een Event Hubs te gebruiken om de functie aan te roepen, had de service een minimale hoeveelheid code nodig. Bovendien maakt de Leveringsgeschiedenis-service geen deel uit van de hoofdwerkstroom, dus het uitvoeren ervan buiten het Kubernetes-cluster heeft geen invloed op de end-to-end latentie van door de gebruiker geïnitieerde bewerkingen.

Volgende stappen