Dela via


Arkitekturstilar

En arkitekturstil är en serie arkitekturer som delar specifika egenskaper. N-nivån är till exempel ett vanligt arkitekturformat. På senare tid har mikrotjänstarkitekturer börjat gynnas . Arkitekturformat kräver inte användning av specifika tekniker, men vissa tekniker passar bättre för vissa arkitekturer. Containrar passar till exempel bra för mikrotjänster.

Vi har identifierat en uppsättning arkitekturformat som ofta finns i molnprogram. Artikeln för varje format innehåller följande komponenter:

  • En beskrivning och ett logiskt diagram över formatet
  • Rekommendationer för när du ska välja det här formatet
  • Fördelar, utmaningar och metodtips
  • En rekommenderad distribution som använder relevanta Azure-tjänster

En snabb rundtur i stilarna

Det här avsnittet ger en snabb genomgång av de arkitekturformat som vi har identifierat, tillsammans med några överväganden på hög nivå för deras användning. Den här listan är inte fullständig. Läs mer i de länkade artiklarna.

N-nivå

Logiskt diagram över ett N-nivåarkitekturformat.

N-nivån är en traditionell arkitektur för företagsprogram som delar upp ett program i logiska lager och fysiska nivåer. Varje lager har ett specifikt ansvar, och lager hanterar beroenden genom att bara anropa i lager under dem. Vanliga lager är presentation, affärslogik och dataåtkomst.

N-nivåarkitekturer passar bra för migrering av befintliga program som redan använder en arkitektur i flera lager. Den här metoden kräver minimala ändringar när du flyttar till Azure och stöder blandade miljöer med både lokala komponenter och molnkomponenter. Men den vågräta skiktningen kan göra det svårt att införa ändringar utan att påverka flera delar av programmet, vilket begränsar flexibiliteten för frekventa uppdateringar.

Webb-kö-arbetare

Logiskt diagram över arkitekturformatet Web-Queue-Worker.

Web-Queue-Worker är en arkitektur som består av en webbklientdel, en meddelandekö och en serverdelsarbetare. Webbklientdelen hanterar HTTP-begäranden och användarinteraktioner, medan arbetaren utför resursintensiva uppgifter, långvariga arbetsflöden eller batchåtgärder. Kommunikationen mellan klientdelen och arbetaren sker via en asynkron meddelandekö.

Den här arkitekturen är perfekt för program med relativt enkla domäner som har vissa resursintensiva bearbetningskrav. Det är enkelt att förstå och distribuera med hanterade Azure-tjänster som App Service och Azure Functions. Du kan skala frontend-delen och arbetarprocessen oberoende av varandra för att ge flexibilitet i resursallokeringen. Men utan noggrann design kan båda komponenterna bli stora och monolitiska.

Mikrotjänster

Logiskt diagram över arkitekturformatet för mikrotjänster.

Mikrotjänstarkitekturen delar upp program i en samling små, autonoma tjänster. Varje tjänst implementerar en enda affärsfunktion i en begränsad kontext och är fristående med sin egen datalagring. Tjänster kommunicerar via väldefinierade API:er och kan utvecklas, distribueras och skalas separat.

Mikrotjänster gör det möjligt för team att arbeta autonomt och stödja frekventa uppdateringar med högre lanseringshastighet. Den här arkitekturen passar bra för komplexa domäner som kräver frekventa ändringar och innovation. Men det medför betydande komplexitet inom områden som tjänstidentifiering, datakonsekvens och distribuerad systemhantering. Framgång kräver mogen utveckling och DevOps-metoder, vilket gör det mer lämpligt för organisationer som har avancerade tekniska funktioner.

Händelsedriven arkitektur

Diagram över ett händelsedrivet arkitekturformat.

Diagrammet illustrerar ett frikopplat, asynkront kommunikationsmönster som är grundläggande för händelsedrivna arkitekturer. Flera händelseproducenter arbetar oberoende av varandra. De genererade strömmarna av händelser baserat på affärsaktiviteter, användarinteraktioner eller systemtillståndsändringar utan någon kunskap om nedströmskonsumenter. Producenterna matar in sina händelser i ett centraliserat system för händelseinmatning som fungerar som en intelligent mäklare. Mäklaren tar emot, validerar, lagrar och distribuerar händelser tillförlitligt över arkitekturen. Komponenten för händelseinmatning fungerar som en kritisk avkopplingspunkt. Det säkerställer att producenterna förblir isolerade från konsumenterna samtidigt som det ger garantier kring händelseleverans, beställning och hållbarhet. Från den här centrala hubben distribueras händelser via ett utbläst mönster till flera oberoende händelsekonsumenter placerade till höger i diagrammet. Varje konsument representerar en distinkt affärskapacitet eller tjänst som prenumererar på specifika händelsetyper som är relevanta för dess domänansvar. Konsumenterna bearbetar händelser asynkront och parallellt, vilket gör att systemet kan skalas horisontellt samtidigt som lös koppling bibehålls. Det här arkitekturmönstret tar bort direkta beroenden mellan producenter och konsumenter. Det gör att varje komponent kan utvecklas, skalas och distribueras oberoende av varandra samtidigt som systemets motståndskraft bibehålls genom händelsehanterarens buffrings- och återförsöksfunktioner.

Händelsedrivna arkitekturer använder en publiceringsprenumereringsmodell där händelseproducenter genererar strömmar av händelser och händelsekonsumenter svarar på dessa händelser nästan i realtid. Producenter och konsumenter frikopplas från varandra, med kommunikation som sker via händelsekanaler eller mäklare. Den här arkitekturen stöder både enkel händelsebearbetning och komplex händelsemönsteranalys.

Händelsedrivna arkitekturer utmärker sig i scenarier som kräver realtidsbearbetning med minimal svarstid. Några exempel är IoT-lösningar, finansiella handelssystem eller program som behöver bearbeta stora mängder strömmande data. Händelsedrivna arkitekturer ger utmärkt skalbarhet och felisolering, men medför utmaningar kring garanterad leverans, händelseordning och eventuell konsistens mellan distribuerade komponenter.

Stordata

Logiskt diagram över ett arkitekturformat för stordata.

Diagrammet visar en omfattande stordataarkitektur med två kompletterande bearbetningspipelines som hanterar olika dataresurser och analytiska krav. Batchbearbetningspipelinen börjar med olika datakällor som matas in i skalbara datalagringssystem, vanligtvis datasjöar eller distribuerade filsystem som kan lagra enorma volymer strukturerade, halvstrukturerade och ostrukturerade data. Batchbearbetningskomponenten utför storskaliga omvandlingar, aggregeringar och analytiska beräkningar på historiska data. Den fungerar enligt schemalagda intervall eller när tillräckligt med data ackumuleras. Resultat från batchbearbetnings-flöde flyter genom två kanaler: direkt till analys- och rapporteringssystem för omedelbar användning, och till analysdatalager där bearbetade data sparas i optimerade format för att hantera komplexa frågor och historisk analys. Samtidigt samlar realtidsbearbetningspipelinen in strömmande data via system för inmatning av meddelanden i realtid som hanterar dataströmmar med hög hastighet från källor som IoT-enheter, webbprogram eller transaktionssystem. Dataströmbearbetningskomponenter analyserar dessa data i rörelse och utför aggregeringar i realtid, filtrering och mönsteridentifiering för att generera omedelbara insikter. Realtidsresultaten följer också dubbla vägar och flödar in både direkt till dataanalys och rapportering för omedelbara instrumentpaneler och notiser, och in i samma analysdatalager för att skapa en samlad vy som kombinerar historiska och aktuella data. Orkestreringsskiktet sträcker sig över båda pipelines. Den samordnar komplexa arbetsflöden, hanterar beroenden mellan batch- och strömningsjobb, schemalägger bearbetningsuppgifter och säkerställer datakonsekvens i hela arkitekturen. Med den här orkestreringen kan du skapa lambda-arkitekturer där både batch- och realtidsbearbetning kan användas på samma datauppsättningar, vilket ger både omfattande historisk analys och omedelbar driftsinformation.

Stordataarkitekturer hanterar inmatning, bearbetning och analys av data som är för stora eller komplexa för traditionella databassystem. Dessa arkitekturer omfattar vanligtvis komponenter för datalagring (t.ex. datasjöar), batchbearbetning för historisk analys, dataströmbearbetning för realtidsinsikter och analysdatalager för rapportering och visualisering.

Stordataarkitekturer är viktiga för organisationer som behöver extrahera insikter från massiva datamängder, stödja förutsägelseanalys med hjälp av maskininlärning eller bearbeta strömmande data i realtid från IoT-enheter. Moderna implementeringar använder ofta hanterade tjänster som Microsoft Fabric för att förenkla komplexiteten med att skapa och underhålla stordatalösningar.

Storskalig Beräkning

Diagram som illustrerar ett stort format för beräkningsarkitektur.

Diagrammet illustrerar ett avancerat jobbdistributions- och åtgärdssystem som är utformat för databehandling med höga prestanda. Vid startpunkten skickar klientprogram beräkningsintensiva jobb via ett jobbkögränssnitt som fungerar som en buffert- och intagsmekanism för inkommande arbetsbegäranden. Jobben flödar in i en centraliserad scheduler- eller koordinatorkomponent som fungerar som systemets intelligenta hjärna, som ansvarar för att analysera jobbegenskaper, resurskrav och beräkningsberoenden. Schemaläggaren utför viktiga funktioner som jobbdelning, resursallokeringsplanering och arbetsbelastningsoptimering baserat på tillgängliga beräkningsresurser och beroenden mellan aktiviteter. Från denna centrala samordningspunkt dirigerar schemaläggaren intelligent arbete längs två distinkta operationsvägar baserat på de beräkningsmässiga egenskaperna hos varje uppgift. Den första vägen leder arbetet till parallella uppgiftshanteringsmiljöer som är utformade för pinsamt parallella arbetsbelastningar där enskilda uppgifter kan köras oberoende utan att kräva kommunikation mellan bearbetningsenheter. Dessa parallella uppgifter distribueras över hundratals eller tusentals kärnor samtidigt, där varje kärna bearbetar diskreta arbetsenheter i isolation. Den andra vägen hanterar nära kopplade uppgifter som kräver frekvent kommunikation mellan processer, delad minnesåtkomst eller synkroniserade åtgärdsmönster. Dessa nära kopplade arbetsbelastningar använder vanligtvis höghastighetsanslutningar som InfiniBand eller RDMA-nätverk (Remote Direct Memory Access) för att möjliggöra snabbt datautbyte mellan bearbetningsnoder. Schemaläggaren övervakar kontinuerligt båda åtgärdsmiljöerna, hanterar resursallokering, hanterar feltolerans och optimerar prestanda genom att dynamiskt justera arbetsfördelningen baserat på systemkapacitet, jobbprioriteringar och slutförandekrav. Den bifurcated metoden gör att arkitekturen effektivt kan hantera olika beräkningsarbetsbelastningar samtidigt som resursanvändningen maximeras i hela databehandlingsinfrastrukturen.

Stora beräkningsarkitekturer stöder storskaliga arbetsbelastningar som kräver hundratals eller tusentals kärnor för beräkningsintensiva åtgärder. Arbetet kan delas upp i diskreta uppgifter som körs över många kärnor samtidigt, där varje uppgift tar indata, bearbetar den och producerar utdata. Uppgifter kan vara antingen oberoende (pinsamt parallella) eller nära kopplade som kräver höghastighetskommunikation.

Stor beräkning är viktigt för simuleringar, modellering av finansiella risker, vetenskaplig databehandling, teknisk stressanalys och 3D-rendering. Azure tillhandahåller alternativ som Azure Batch för hanterade stora beräkningsarbetsbelastningar eller HPC Pack för mer traditionell klusterhantering. Dessa arkitekturer kan öka kapaciteten på begäran och skala till tusentals kärnor när det behövs.

Arkitekturformat som begränsningar

Ett arkitekturformat begränsar designen, inklusive den uppsättning element som kan visas och de tillåtna relationerna mellan dessa element. Begränsningar vägleder en arkitekturs "form" genom att begränsa valuniversumet. När en arkitektur överensstämmer med begränsningarna för ett visst format uppstår vissa önskvärda egenskaper.

Till exempel omfattar begränsningarna i mikrotjänster:

  • En tjänst representerar ett enda ansvar.
  • Varje tjänst är oberoende av de andra.
  • Data är privat för den tjänst som äger det. Tjänster delar inte data.

När du följer dessa begränsningar får du ett system som gör att du kan vidta följande åtgärder:

  • Distribuera tjänster oberoende av varandra.
  • Isolera felaktigheter.
  • Skicka mer frekventa uppdateringar.
  • Introducera ny teknik i programmet enklare.

Varje arkitekturstil har sina egna kompromisser. Innan du väljer ett arkitekturformat är det viktigt att du förstår de underliggande principerna och begränsningarna. Utan den förståelsen riskerar du att skapa en design som ytligt överensstämmer med stilen utan att inse dess fulla fördelar. Fokusera mer på varför du väljer ett specifikt format än på hur du implementerar det. Var praktisk. Ibland är det bättre att lätta på en begränsning än att jaga arkitektonisk renhet.

Helst bör valet av arkitekturstil göras med indata från informerade arbetsbelastningsintressenter. Arbetsbelastningsteamet bör börja med att identifiera vilket problem de löser. De bör sedan definiera viktiga affärsdrivrutiner och motsvarande arkitekturegenskaper, även kallade icke-funktionella krav, och prioritera dem. Om tiden till marknaden till exempel är kritisk kan teamet prioritera underhåll, testbarhet och tillförlitlighet för att möjliggöra snabb distribution. Om teamet har snäva budgetbegränsningar kan genomförbarhet och enkelhet ha företräde. Att välja och upprätthålla ett arkitekturformat är inte en engångsuppgift. Det kräver löpande mätning, validering och förfining. Eftersom det kan bli dyrt att ändra arkitekturriktningen senare är det ofta värt att investera mer arbete i förväg för att stödja långsiktig effektivitet och minska riskerna.

I följande tabell sammanfattas hur varje format hanterar beroenden och vilka typer av domäner som passar bäst för varje formatmall.

Arkitekturstil Beroendehantering Domäntyp
N-nivå Vågräta nivåer indelade efter undernät Traditionell affärsdomän. Uppdateringsfrekvensen är låg.
Web-Queue-Worker Front-end- och back-end-jobb, frikopplade genom asynkrona meddelanden. Relativt enkel domän med vissa resursintensiva uppgifter.
Mikrotjänster Vertikalt (funktionellt) neddelade tjänster som anropar varandra via API:er. Komplicerad domän. Frekventa uppdateringar.
Evenemangsstyrd arkitektur Producent eller konsument. Oberoende vy för varje undersystem. Sakernas Internet (IoT) och realtidssystem.
Stordata Dela upp en enorm datamängd i små segment. Parallell bearbetning på lokala datauppsättningar. Batch- och realtidsdataanalys. Förutsägande analys med hjälp av maskininlärning.
Storskalig beräkning Dataallokering till tusentals kärnor. Beräkningsintensiva domäner som simulering.

Överväg utmaningar och fördelar

Begränsningar skapar också utmaningar, så det är viktigt att förstå kompromisserna när du använder någon av dessa formatmallar. Avgör om fördelarna med arkitekturstilen överväger utmaningarna för den här underdomänen och den avgränsade kontexten.

Tänk på följande typer av utmaningar när du väljer ett arkitekturformat:

  • Komplexitet: Arkitekturens komplexitet måste matcha domänen. Om det är för förenklat kan det resultera i en stor boll av lera, där beroenden inte hanteras väl och strukturen bryts ner.

  • Asynkrona meddelanden och eventuell konsekvens: Asynkrona meddelanden används för att frikoppla tjänster och förbättra tillförlitligheten eftersom meddelanden kan göras om. Det förbättrar även skalbarheten. Men asynkrona meddelanden skapar också utmaningar när det gäller att hantera eventuell konsekvens och möjligheten att duplicera meddelanden.

  • Kommunikation mellan tjänster: Att dela upp ett program i separata tjänster kan öka kommunikationskostnaderna. I mikrotjänstarkitekturer resulterar den här kostnaden ofta i problem med svarstid eller nätverksbelastning.

  • Hanterbarhet: Hantering av programmet omfattar uppgifter som övervakning, distribution av uppdateringar och underhåll av drifthälsa.

  • Tio designprinciper för Azure-applikationer

Nästa steg