Belangrijke punten van .NET Microservices Architecture
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.
Als samenvatting en belangrijke punten zijn het volgende de belangrijkste conclusies uit deze handleiding.
Voordelen van het gebruik van containers. Oplossingen op basis van containers bieden belangrijke kostenbesparingen omdat ze helpen implementatieproblemen te verminderen die worden veroorzaakt door mislukte afhankelijkheden in productieomgevingen. Containers verbeteren DevOps en productiebewerkingen aanzienlijk.
Containers zijn alomtegenwoordig. Docker-containers worden de feitelijke standaard in de branche, ondersteund door belangrijke leveranciers in de Windows- en Linux-ecosystemen, zoals Microsoft, Amazon AWS, Google en IBM. Docker is waarschijnlijk binnenkort overal aanwezig in zowel de cloud- als on-premises datacenters.
Containers als een implementatie-eenheid. Een Docker-container wordt de standaardimplementatie-eenheid voor elke servertoepassing of -service.
Microservices. De microservicesarchitectuur wordt de voorkeursbenadering voor gedistribueerde en grote of complexe bedrijfskritieke toepassingen op basis van veel onafhankelijke subsystemen in de vorm van autonome services. In een microservicearchitectuur wordt de toepassing gebouwd als een verzameling services die onafhankelijk van elkaar zijn ontwikkeld, getest, geversied, geïmplementeerd en geschaald. Elke service kan elke gerelateerde autonome database bevatten.
Domeingestuurd ontwerp en SOA. De microservicesarchitectuurpatronen zijn afgeleid van servicegeoriënteerde architectuur (SOA) en domain-driven design (DDD). Wanneer u microservices ontwerpt en ontwikkelt voor omgevingen met veranderende bedrijfsbehoeften en -regels, is het belangrijk om DDD-benaderingen en -patronen te overwegen.
Problemen met microservices. Microservices bieden veel krachtige mogelijkheden, zoals onafhankelijke implementatie, sterke subsysteemgrenzen en technologische diversiteit. Ze veroorzaken echter ook veel nieuwe uitdagingen met betrekking tot de ontwikkeling van gedistribueerde toepassingen, zoals gefragmenteerde en onafhankelijke gegevensmodellen, flexibele communicatie tussen microservices, uiteindelijke consistentie en operationele complexiteit die het gevolg zijn van het samenvoegen van logboek- en bewakingsgegevens van meerdere microservices. Deze aspecten zorgen voor een veel hogere complexiteit dan een traditionele monolithische toepassing. Als gevolg hiervan zijn alleen specifieke scenario's geschikt voor microservicetoepassingen. Deze omvatten grote en complexe toepassingen met meerdere veranderende subsystemen. In deze gevallen is het de moeite waard om te investeren in een complexere softwarearchitectuur, omdat het een betere flexibiliteit op lange termijn en toepassingsonderhoud biedt.
Containers voor elke toepassing. Containers zijn handig voor microservices, maar kunnen ook nuttig zijn voor monolithische toepassingen op basis van het traditionele .NET Framework wanneer u Windows-containers gebruikt. De voordelen van het gebruik van Docker, zoals het oplossen van veel implementatie-naar-productieproblemen en het bieden van geavanceerde dev- en testomgevingen, zijn van toepassing op veel verschillende soorten toepassingen.
CLI versus IDE. Met Microsoft-hulpprogramma's kunt u in containers geplaatste .NET-toepassingen ontwikkelen met behulp van uw voorkeursbenadering. U kunt ontwikkelen met een CLI en een op editor gebaseerde omgeving met behulp van de Docker CLI en Visual Studio Code. U kunt ook een op IDE gerichte benadering gebruiken met Visual Studio en de unieke functies voor Docker, zoals foutopsporing met meerdere containers.
Tolerante cloudtoepassingen. In cloudsystemen en gedistribueerde systemen in het algemeen is er altijd het risico op gedeeltelijke storingen. Omdat clients en services afzonderlijke processen (containers) zijn, kan een service mogelijk niet tijdig reageren op de aanvraag van een client. Een service kan bijvoorbeeld niet actief zijn vanwege een gedeeltelijke fout of vanwege onderhoud; de service kan overbelast zijn en langzaam reageren op aanvragen; of het is mogelijk niet gedurende korte tijd toegankelijk vanwege netwerkproblemen. Daarom moet een cloudtoepassing deze fouten omarmen en een strategie hebben om op deze fouten te reageren. Deze strategieën kunnen beleidsregels voor opnieuw proberen bevatten (berichten opnieuw verzenden of aanvragen opnieuw proberen) en het implementeren van circuitonderbrekerpatronen om exponentieel laden van herhaalde aanvragen te voorkomen. In principe moeten cloudtoepassingen flexibele mechanismen hebben, hetzij op basis van cloudinfrastructuur of aangepast, als de hoogwaardige toepassingen die worden geleverd door orchestrators of servicebussen.
Beveiliging. Onze moderne wereld van containers en microservices kan nieuwe beveiligingsproblemen blootstellen. Er zijn verschillende manieren om eenvoudige toepassingsbeveiliging te implementeren op basis van verificatie en autorisatie. Containerbeveiliging moet echter rekening houden met aanvullende belangrijke onderdelen die inherent veiligere toepassingen tot gevolg hebben. Een essentieel element van het bouwen van veiligere apps is het hebben van een veilige manier om te communiceren met andere apps en systemen, iets dat vaak referenties, tokens, wachtwoorden en dergelijke vereist, meestal toepassingsgeheimen wordt genoemd. Elke veilige oplossing moet de aanbevolen beveiligingsprocedures volgen, zoals het versleutelen van geheimen tijdens overdracht en at-rest, en het voorkomen dat geheimen worden gelekt wanneer ze worden gebruikt door de uiteindelijke toepassing. Deze geheimen moeten veilig worden opgeslagen en bewaard, net als bij het gebruik van Azure Key Vault.
Orchestrators. Orchestrators op basis van containers, zoals Azure Kubernetes Service en Azure Service Fabric, maken deel uit van elke belangrijke microservice en containertoepassing. Deze toepassingen hebben een hoge complexiteit, schaalbaarheidsbehoeften en gaan door constante evolutie. Deze handleiding heeft orchestrators en hun rol geïntroduceerd in oplossingen op basis van microservices en containers. Als uw toepassing u verplaatst naar complexe container-apps, vindt u het handig om aanvullende bronnen te zoeken voor meer informatie over orchestrators.