Dela via


Arkitekturmetoder för kostnadshantering och allokering i en lösning med flera klientorganisationer

Lösningar för flera klienter kräver ofta särskild hänsyn när du mäter, allokerar och optimerar kostnader. Den här artikeln innehåller viktig vägledning som hjälper dig att utvärdera och hantera kostnader effektivt som lösningsarkitekt som arbetar med program med flera klienter.

Viktiga överväganden och krav

Överväg de krav som du har för att mäta förbrukningen i din lösning. Dessa krav beskrivs mer detaljerat i Mäta förbrukningen för varje klientorganisation.

Mätningssyfte

Det är viktigt att bestämma vad ditt mål är. Tänk på följande exempelmål:

  • Beräkna en ungefärlig kostnad för sålda varor för varje klientorganisation. Om du till exempel distribuerar ett stort antal delade resurser kanske du bara behöver en ungefärlig uppskattning av kostnaden för varje klientorganisation.

  • Beräkna den exakta kostnad som varje klientorganisation medför. Om du till exempel debiterar dina klienter för den exakta förbrukning som de medför måste du ha exakt information om hur mycket varje klientorganisations resurser kostar.

  • Identifiera avvikande klienter som kostar betydligt mer än andra klienter. Om du till exempel tillhandahåller en fast prismodell kan du behöva avgöra om några klienter förbrukar en oproportionerlig mängd av din etablerade kapacitet så att du kan tillämpa principer för rättvis användning. I många scenarier kräver det här användningsfallet inte exakta kostnadsmätningar.

  • Minska den totala Azure-kostnaden för din lösning. Du kanske till exempel vill utvärdera kostnaden för varje komponent och sedan avgöra om du har överetablerade för arbetsbelastningen.

Genom att förstå målet att mäta en klientorganisations förbrukning kan du avgöra om kostnadsallokeringar måste vara ungefärliga eller exakta. Den här skillnaden påverkar de specifika verktyg som du kan använda och de metoder som du bör följa.

Delade komponenter

Du kanske kan minska kostnaden för en lösning med flera klienter genom att flytta klienter till delad infrastruktur. Du måste dock noga överväga effekten av att dela resurser, till exempel om dina klienter börjar uppleva det bullriga granneproblemet.

Du måste också överväga hur du mäter och allokerar kostnaderna för delade komponenter. Du kan till exempel jämnt dela upp kostnaden mellan var och en av de klienter som använder den delade komponenten. Eller så kan du mäta varje klientorganisations användning för att få en mer exakt mätning av deras förbrukning av delade komponenter.

Metoder och mönster att tänka på

När du planerar kostnadsallokering i en arkitektur med flera klientorganisationer bör du överväga följande strategier och designmönster för att säkerställa transparens, rättvisa och skalbarhet.

Allokera kostnader med hjälp av resurstaggar

Med Azure kan du använda taggar för dina resurser. En tagg är ett nyckel/värde-par. Du använder taggar för att lägga till anpassade metadata. Taggar är användbara för många hanteringsåtgärder, och de är också användbara för att analysera kostnaden för din Azure-förbrukning. När du har tillämpat taggar kan du fastställa kostnader som är associerade med varje tagg.

Hur du använder taggar i en lösning med flera klientorganisationer varierar förmodligen beroende på din arkitektur.

I vissa lösningar kan du distribuera dedikerade resurser för varje klientorganisation. Du kan till exempel distribuera dedikerade distributionsstämplar för varje klientorganisation. I dessa scenarier är det tydligt att all Azure-förbrukning som är associerad med dessa resurser ska allokeras till motsvarande klientorganisation. För att stödja den här metoden kan du tagga dina Azure-resurser med klientorganisations-ID:t.

I andra scenarier kan du ha uppsättningar med delade resurser. När du till exempel använder horisontell partitioneringsmönstret kan du distribuera flera databaser och sprida klientorganisationer över dem. Överväg att tagga resurserna med en identifierare för gruppen med klienter. Du kanske inte enkelt kan allokera kostnader till en enda klientorganisation. Du kan dock använda den här metoden för att begränsa kostnaden till en definierad grupp klienter. Du kan också använda förbrukningsinformationen för att balansera om klientorganisationer mellan shards om du märker att en viss shard medför högre kostnader än de andra shardsna.

Anmärkning

Det finns en gräns för hur många taggar som kan tillämpas på en resurs. När du arbetar med delade resurser är det bäst att inte lägga till en tagg för varje klientorganisation som delar resursen. Överväg i stället att lägga till en tagg med shard-ID:t eller något annat sätt att identifiera gruppen med klienter.

Tänk dig en exempellösning för flera klientorganisationer som skapas med hjälp av mönstret Distributionsstämplar och en vertikalt partitionerad innehavarmodell. Varje distributionsstämpel innehåller en delad webbserver och fragmenterade databaser. Du kan använda taggar för var och en av Azure-komponenterna, som du ser i följande diagram.

Diagram som visar två stämplar med taggar som läggs till i varje komponent.

Överväg följande taggningsstrategi:

  • Varje resurs har en stamp-id tagg.
  • Varje fragmenterad databas har en shard-id tagg.
  • Varje resurs som är dedikerad till en specifik klientorganisation har en tenant-id tagg.

Med den här taggningsstrategin är det enkelt att filtrera kostnadsinformationen till en enda stämpel. Det är också enkelt att hitta kostnaden för de klientspecifika resurserna, till exempel den totala kostnaden för databasen för klientorganisation C. Delade komponenter har tenant-id ingen tagg, men kostnaden för de delade komponenterna för en stämpel kan delas mellan de klienter som har tilldelats att använda den stämpeln eller fragmentet.

Instrumentera ditt program

I scenarier där du inte har en direkt relation mellan en Azure-resurs och en klientorganisation bör du överväga att instrumentera programmet för att samla in telemetri.

Programnivån kanske redan samlar in loggar och mått som är användbara för att besvara frågor om mätning. Tänk på följande användningsegenskaper:

  • Antalet API-begäranden som görs för varje klientorganisation över tid.
  • De högsta aktivitetsperioderna för specifika klienter under dagen.
  • Skillnaderna i användningsmönster mellan klient A och klient B.

I Azure samlar Application Insights ofta in dessa mått. Genom att använda telemetriinitierare kan du utöka telemetrin som Application Insights samlar in för att inkludera en klientidentifierare eller andra anpassade data.

Application Insights och andra lösningar för loggning och övervakning är dock inte lämpliga för exakta kostnadsmätningar eller för mätningsändamål. Application Insights är utformat för exempeldata, särskilt när ditt program har en stor mängd begäranden. Sampling är utformat för att minska kostnaden för att övervaka din lösning eftersom det ofta kan bli dyrt att samla in alla telemetrier.

Om du behöver spåra exakt information om förbrukning eller användning i faktureringssyfte bör du i stället skapa en anpassad pipeline för att logga nödvändiga data. Du bör sedan aggregera data baserat på dina krav. Azure-tjänster som kan vara användbara för det här ändamålet inkluderar Azure Event Hubs för att samla in stora mängder telemetri och Azure Stream Analytics för att bearbeta dem i realtid.

Använda Azure-reservationer och Azure-sparplan för att minska kostnaderna

Med Azure-reservationer kan du minska dina Azure-kostnader genom att förbestäma en viss utgiftsnivå. Reservationer gäller för många Azure-resurstyper.

Reservationer kan användas effektivt i en lösning med flera klientorganisationer. Överväg följande faktorer:

  • När du distribuerar en lösning med flera klientorganisationer som innehåller delade resurser bör du överväga den baslinjeförbrukningsnivå som du behöver för arbetsbelastningen. Du kan överväga en reservation för baslinjeförbrukningen och sedan betala standardpriser för högre förbrukning under oförutsägbara toppar.

  • När du distribuerar resurser för varje klientorganisation bör du överväga om du kan genomföra resursförbrukningen i förväg för en specifik klientorganisation eller i hela din portfölj med klienter.

Med Azure-reservationer kan du omfångsbegränsa dina reservationer för en resursgrupp, en prenumeration eller en uppsättning prenumerationer. Den här funktionen innebär att du kan dra nytta av reservationer, även om du fragmentera din arbetsbelastning i flera prenumerationer.

Reservationsomfång kan också vara till hjälp när dina klienter har oförutsägbara arbetsbelastningar. Tänk dig till exempel en lösning där klient A bara behöver en instans av en specifik resurs, men klientorganisationer B och C behöver två instanser vardera. Sedan blir klient B mindre upptagen, så du minskar antalet instanser och klient A blir mer upptagen, så du ökar antalet instanser. Dina reservationer tillämpas på de klienter som behöver dem.

Azures sparplan för beräkning är en flexibel kostnadsbesparande plan som genererar betydande besparingar jämfört med betala per användning-priser. Du godkänner ett ett- eller treårskontrakt och får rabatter på berättigade beräkningstjänster. Dessa tjänster omfattar virtuella datorer, dedikerade värdar, containerinstanser, Azure Premium-funktioner och Azure-apptjänster. Besparingarna gäller för dessa beräkningstjänster oavsett region, instansstorlek eller operativsystem. Mer information finns i Översikt över Azure-sparplan och Dokumentation om Azure-sparplan.

Kombinera reservationer och en sparplan för att ytterligare optimera kostnader och flexibilitet.

Antimönster att undvika

  • Ignorera kostnadsspårning helt och hållet. Det är viktigt att ha minst en ungefärlig uppfattning om de kostnader som du ådrar dig och hur varje klientorganisation påverkar kostnaden för att leverera din lösning. Annars, om dina kostnader ändras över tid, har du ingen baslinje att jämföra med. Du kanske inte heller kan förutsäga hur en ökning av klientorganisationer kan påverka dina kostnader och lönsamhet.

  • Anta eller gissa utan data. Se till att kostnadsmätningen baseras på verklig information. Du kanske inte behöver exakta mått, men basera dina uppskattningar på faktiska data.

  • Överengineer för precision. Du kanske inte behöver ha en detaljerad redovisning av varje kostnad som varje klientorganisation medför. Att skapa onödigt exakta kostnadsmätnings- och optimeringsprocesser kan vara kontraproduktivt eftersom de lägger till teknisk komplexitet och skapar spröda processer.

  • Mät kostnader i realtid. De flesta lösningar behöver inte kostnadsmätningar på upp till minut. Eftersom mätnings- och förbrukningsdata kan vara komplexa att bearbeta bör du logga nödvändiga data och sedan asynkront aggregera och bearbeta data senare.

  • Använd övervakningsverktyg för fakturering. Se till att du använder verktyg som är utformade för kostnadsövervakning och mätning. Programövervakningslösningar är vanligtvis inte bra kandidater för den här typen av data, särskilt när du behöver hög precision.

Bidragsgivare

Microsoft ansvarar för den här artikeln. Följande deltagare skrev den här artikeln.

Huvudförfattare:

  • John Downs | Principal Software Engineer, Azure Patterns &Practices

Övriga medarbetare:

Om du vill se linkedin-profiler som inte är offentliga loggar du in på LinkedIn.