Viktiga lärdomar om .NET Microservices-arkitektur
Dricks
Det här innehållet är ett utdrag från eBook, .NET Microservices Architecture for Containerized .NET Applications, tillgängligt på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.
Som en sammanfattning och viktiga lärdomar är följande de viktigaste slutsatserna från den här guiden.
Fördelar med att använda containrar. Containerbaserade lösningar ger viktiga kostnadsbesparingar eftersom de bidrar till att minska distributionsproblem som orsakas av misslyckade beroenden i produktionsmiljöer. Containrar förbättrar DevOps och produktionsåtgärder avsevärt.
Containrar kommer att vara allmänt förekommande. Docker-baserade containrar håller på att bli de facto-standarden i branschen, med stöd av viktiga leverantörer i Windows- och Linux-ekosystemen, till exempel Microsoft, Amazon AWS, Google och IBM. Docker kommer förmodligen snart att vara allestädes närvarande i både moln- och lokala datacenter.
Containrar som en distributionsenhet. En Docker-container håller på att bli standarddistributionsenheten för alla serverbaserade program eller tjänster.
Microtjänster. Arkitekturen för mikrotjänster blir den bästa metoden för distribuerade och stora eller komplexa verksamhetskritiska program baserade på många oberoende undersystem i form av autonoma tjänster. I en mikrotjänstbaserad arkitektur skapas programmet som en samling tjänster som utvecklas, testas, versioneras, distribueras och skalas separat. Varje tjänst kan innehålla valfri relaterad autonom databas.
Domändriven design och SOA. Arkitekturmönstren för mikrotjänster härleds från tjänstorienterad arkitektur (SOA) och domändriven design (DDD). När du utformar och utvecklar mikrotjänster för miljöer med föränderliga affärsbehov och regler är det viktigt att överväga DDD-metoder och mönster.
Mikrotjänstutmaningar. Mikrotjänster erbjuder många kraftfulla funktioner, till exempel oberoende distribution, starka undersystemsgränser och teknisk mångfald. De ger dock också upphov till många nya utmaningar som rör utveckling av distribuerade program, till exempel fragmenterade och oberoende datamodeller, elastisk kommunikation mellan mikrotjänster, slutlig konsekvens och driftkomplexitet som beror på aggregering av loggnings- och övervakningsinformation från flera mikrotjänster. Dessa aspekter ger en mycket högre komplexitetsnivå än ett traditionellt monolitiskt program. Därför är endast specifika scenarier lämpliga för mikrotjänstbaserade program. Dessa omfattar stora och komplexa program med flera utvecklande undersystem. I dessa fall är det värt att investera i en mer komplex programvaruarkitektur, eftersom den ger bättre långsiktig flexibilitet och programunderhåll.
Containrar för alla program. Containrar är praktiska för mikrotjänster, men kan också vara användbara för monolitiska program som baseras på det traditionella .NET Framework när du använder Windows-containrar. Fördelarna med att använda Docker, till exempel att lösa många distributions-till-produktion-problem och tillhandahålla toppmoderna Utvecklings- och testmiljöer, gäller för många olika typer av program.
CLI jämfört med IDE. Med Microsoft-verktyg kan du utveckla containerbaserade .NET-program med den metod du föredrar. Du kan utveckla med en CLI och en redigeringsbaserad miljö med hjälp av Docker CLI och Visual Studio Code. Eller så kan du använda en IDE-fokuserad metod med Visual Studio och dess unika funktioner för Docker, till exempel felsökning med flera containrar.
Elastiska molnprogram. I molnbaserade system och distribuerade system i allmänhet finns det alltid risk för partiella fel. Eftersom klienter och tjänster är separata processer (containrar) kanske en tjänst inte kan svara i tid på en klients begäran. En tjänst kan till exempel vara avstängd på grund av ett partiellt fel eller för underhåll. tjänsten kan vara överbelastad och svara långsamt på begäranden. eller så kanske den inte är tillgänglig under en kort tid på grund av nätverksproblem. Därför måste ett molnbaserat program omfatta dessa fel och ha en strategi för att svara på dessa fel. Dessa strategier kan omfatta återförsöksprinciper (skicka meddelanden igen eller försöka begäranden igen) och implementera kretsbrytarmönster för att undvika exponentiell belastning av upprepade begäranden. I grund och botten måste molnbaserade program ha motståndskraftiga mekanismer , antingen baserade på molninfrastruktur eller anpassade, som de på hög nivå som tillhandahålls av orkestratorer eller servicebussar.
Säkerhet. Vår moderna värld av containrar och mikrotjänster kan avslöja nya sårbarheter. Det finns flera sätt att implementera grundläggande programsäkerhet baserat på autentisering och auktorisering. Containersäkerhet måste dock överväga ytterligare viktiga komponenter som resulterar i säkrare program. En viktig del av att skapa säkrare appar är att ha ett säkert sätt att kommunicera med andra appar och system, något som ofta kräver autentiseringsuppgifter, token, lösenord och liknande, som ofta kallas programhemligheter. Alla säkra lösningar måste följa rekommenderade säkerhetsmetoder, till exempel kryptering av hemligheter under överföring och i vila, och förhindra att hemligheter läcker när de används av det slutliga programmet. Dessa hemligheter måste lagras och bevaras på ett säkert sätt, som när du använder Azure Key Vault.
Orkestrerare. Containerbaserade orkestrerare, till exempel Azure Kubernetes Service och Azure Service Fabric, är en viktig del av alla viktiga mikrotjänster och containerbaserade program. Dessa program har hög komplexitet, skalbarhetsbehov och går igenom konstant utveckling. Den här guiden har introducerat orkestrerare och deras roll i mikrotjänstbaserade och containerbaserade lösningar. Om dina programbehov flyttar dig mot komplexa containerbaserade appar är det bra att söka efter ytterligare resurser för att lära dig mer om orkestrerare.