Molnbaserade kommunikationsmönster
Dricks
Det här innehållet är ett utdrag från eBook, Architecting Cloud Native .NET Applications for Azure, tillgängligt på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.
När du skapar ett molnbaserat system blir kommunikation ett viktigt designbeslut. Hur kommunicerar ett klientprogram på klientsidan med en serverdelsmikrotjänst? Hur kommunicerar serverdelsmikrotjänster med varandra? Vilka principer, mönster och metodtips bör du tänka på när du implementerar kommunikation i molnbaserade program?
Kommunikationsöverväganden
I ett monolitiskt program är kommunikationen enkel. Kodmodulerna körs tillsammans i samma körbara utrymme (process) på en server. Den här metoden kan ha prestandafördelar när allt körs tillsammans i delat minne, men resulterar i tätt kopplad kod som blir svår att underhålla, utveckla och skala.
Molnbaserade system implementerar en mikrotjänstbaserad arkitektur med många små, oberoende mikrotjänster. Varje mikrotjänst körs i en separat process och körs vanligtvis i en container som distribueras till ett kluster.
Ett kluster grupperar en pool med virtuella datorer för att bilda en miljö med hög tillgänglighet. De hanteras med ett orkestreringsverktyg som ansvarar för att distribuera och hantera de containerbaserade mikrotjänsterna. Bild 4–1 visar ett Kubernetes-kluster som distribuerats till Azure-molnet med den fullständigt hanterade Azure Kubernetes Services.
Bild 4-1. Ett Kubernetes-kluster i Azure
I hela klustret kommunicerar mikrotjänster med varandra via API:er och meddelandetekniker.
Även om de ger många fördelar, är mikrotjänster ingen gratis lunch. Lokala metodanrop mellan komponenter ersätts nu med nätverksanrop. Varje mikrotjänst måste kommunicera via ett nätverksprotokoll, vilket ökar komplexiteten i systemet:
- Nätverksbelastning, svarstid och tillfälliga fel är ett ständigt problem.
- Återhämtning (dvs. återförsök av misslyckade begäranden) är viktigt.
- Vissa anrop måste vara idempotent för att behålla konsekvent tillstånd.
- Varje mikrotjänst måste autentisera och auktorisera anrop.
- Varje meddelande måste serialiseras och sedan deserialiseras – vilket kan vara dyrt.
- Meddelandekryptering/dekryptering blir viktigt.
Boken .NET Microservices: Architecture for Containerized .NET Applications, som är tillgänglig kostnadsfritt från Microsoft, ger en djupgående täckning av kommunikationsmönster för mikrotjänstprogram. I det här kapitlet ger vi en översikt på hög nivå över dessa mönster tillsammans med implementeringsalternativ som är tillgängliga i Azure-molnet.
I det här kapitlet tar vi först upp kommunikationen mellan klientdelsprogram och serverdelsmikrotjänster. Sedan tittar vi på serverdelsmikrotjänster som kommunicerar med varandra. Vi ska utforska upp- och gRPC-kommunikationstekniken. Slutligen ska vi titta på nya innovativa kommunikationsmönster med hjälp av service mesh-teknik. Vi kommer också att se hur Azure-molnet tillhandahåller olika typer av stödtjänster för molnbaserad kommunikation.