Microservicearchitectuur
Tip
Deze inhoud is een fragment uit het eBook, .NET Microservices Architecture for Containerized .NET Applications, beschikbaar op .NET Docs of als een gratis downloadbare PDF die offline kan worden gelezen.
Zoals de naam al aangeeft, is een microservicesarchitectuur een benadering voor het bouwen van een servertoepassing als een set kleine services. Dat betekent dat een microservicesarchitectuur voornamelijk is gericht op de back-end, hoewel de benadering ook wordt gebruikt voor de front-end. Elke service wordt uitgevoerd in een eigen proces en communiceert met andere processen met behulp van protocollen zoals HTTP/HTTPS, WebSockets of AMQP. Elke microservice implementeert een specifiek end-to-end domein of bedrijfsmogelijkheid binnen een bepaalde contextgrens en elk moet autonoom worden ontwikkeld en onafhankelijk kunnen worden geïmplementeerd. Ten slotte moet elke microservice eigenaar zijn van het bijbehorende domeingegevensmodel en domeinlogica (soevereiniteit en gedecentraliseerd gegevensbeheer) en kunnen worden gebaseerd op verschillende technologieën voor gegevensopslag (SQL, NoSQL) en verschillende programmeertalen.
Welke grootte moet een microservice zijn? Bij het ontwikkelen van een microservice mag de grootte niet het belangrijke punt zijn. In plaats daarvan moet het belangrijke punt zijn om losjes gekoppelde services te maken, zodat u autonomie hebt van ontwikkeling, implementatie en schaal voor elke service. Natuurlijk moet u bij het identificeren en ontwerpen van microservices proberen ze zo klein mogelijk te maken, zolang u niet te veel directe afhankelijkheden hebt met andere microservices. Belangrijker dan de omvang van de microservice is de interne samenhang die zij moet hebben en haar onafhankelijkheid van andere diensten.
Waarom een microservicesarchitectuur? Kortom, het biedt flexibiliteit op lange termijn. Microservices maken een betere onderhoudbaarheid mogelijk in complexe, grote en uiterst schaalbare systemen door u toepassingen te laten maken op basis van veel onafhankelijk implementeerbare services die elk een gedetailleerde en autonome levenscyclus hebben.
Als extra 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. Op die manier kunt u 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.
Afbeelding 4-6. Monolithische implementatie versus de microservicesbenadering
Zoals in afbeelding 4-6 wordt weergegeven, schaalt de toepassing in de traditionele monolithische benadering door de hele app op verschillende servers/VM's te klonen. In de microservicesbenadering wordt de functionaliteit gescheiden in kleinere services, zodat elke service onafhankelijk kan worden geschaald. 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. Met een fijnmazige samenstelling van toepassingen kunt u microservices in isolatie uitvoeren en testen en autonoom ontwikkelen terwijl er duidelijke contracten tussen worden onderhouden. 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.
Hieronder volgen belangrijke aspecten om succes in de productie met een systeem op basis van microservices mogelijk te maken:
Bewaking en statuscontroles van de services en infrastructuur.
Schaalbare infrastructuur voor de services (dat wil gezegd cloud- en orchestrators).
Beveiligingsontwerp en implementatie op meerdere niveaus: verificatie, autorisatie, geheimenbeheer, beveiligde communicatie, enzovoort.
Snelle levering van toepassingen, meestal met verschillende teams die zich richten op verschillende microservices.
DevOps- en CI/CD-procedures en -infrastructuur.
Van deze worden slechts de eerste drie behandeld of geïntroduceerd in deze handleiding. De laatste twee punten, die betrekking hebben op de levenscyclus van toepassingen, worden behandeld in de extra levenscyclus van Docker-toepassingen met Microsoft Platform en Tools e-book.
Aanvullende bronnen
Mark Russinovich. Microservices: Een toepassings revolutie mogelijk gemaakt door de cloud
https://azure.microsoft.com/blog/microservices-an-application-revolution-powered-by-the-cloud/Martin Fowler. Microservices
https://www.martinfowler.com/articles/microservices.htmlMartin Fowler. Vereisten voor microservices
https://martinfowler.com/bliki/MicroservicePrerequisites.htmlJimmy Nilsson. Segment cloudcomputing
https://www.infoq.com/articles/CCC-Jimmy-NilssonCaesar de la Torre. Levenscyclus van Docker-toepassingen in containers met Microsoft-platform en -hulpprogramma's (downloadbaar e-book)
https://aka.ms/dockerlifecycleebook