Beräkna förbrukningsbaserade kostnader
Den här artikeln visar hur du beräknar plankostnader för värdplaner för Flex-förbrukning och -förbrukning.
Azure Functions erbjuder för närvarande dessa olika värdalternativ för dina funktionsappar, där varje alternativ har en egen prissättningsmodell för värdplaner:
Plan | beskrivning |
---|---|
Flex-förbrukningsplan | Du betalar för körningstiden för de instanser där dina funktioner körs, plus alla alltid redo instanser. Instanser läggs till och tas bort dynamiskt baserat på antalet inkommande händelser. Detta är den rekommenderade planen för dynamisk skalning, som också stöder integrering av virtuella nätverk. |
Premium | Ger dig samma funktioner och skalningsmekanism som förbrukningsplanen, men med förbättrad prestanda och integrering av virtuella nätverk. Kostnaden baseras på din valda prisnivå. Mer information finns i Azure Functions Premium-plan. |
Dedikerad (App Service) (grundläggande nivå eller högre) |
När du behöver köra på dedikerade virtuella datorer eller isolerat använder du anpassade avbildningar eller vill använda din överskjutande App Service-plankapacitet. Använder vanlig App Service-planfakturering. Kostnaden baseras på din valda prisnivå. |
Container Apps | Skapa och distribuera appar för containerbaserade funktioner i en fullständigt hanterad miljö som hanteras av Azure Container Apps, vilket gör att du kan köra dina funktioner tillsammans med andra mikrotjänster, API:er, webbplatser och arbetsflöden som värdbaserade program för containrar. |
Förbrukning | Du debiteras bara för den tid som funktionsappen körs. Den här planen innehåller ett kostnadsfritt bidrag per prenumeration. |
Du bör alltid välja det alternativ som bäst stöder funktions-, prestanda- och kostnadskraven för dina funktionskörningar. Mer information finns i Skala och hantera Azure Functions.
Den här artikeln fokuserar på flexförbruknings- och förbrukningsplaner eftersom faktureringen i dessa planer beror på aktiva körningsperioder i varje instans.
Durable Functions kan också köras i båda dessa planer. Mer information om kostnadsöverväganden när du använder Durable Functions finns i Durable Functions-fakturering.
Förbrukningsbaserade kostnader
Hur förbrukningsbaserade kostnader beräknas, inklusive kostnadsfria bidrag, beror på den specifika planen. Information om den senaste kostnaden och beviljandet finns på sidan med priser för Azure Functions.
Det finns två lägen där dina kostnader bestäms när du kör dina appar i Flex Consumption-planen. Varje läge bestäms per instans.
Faktureringsläge | beskrivning |
---|---|
På begäran | När du kör i läget på begäran debiteras du endast under den tid som funktionskoden körs på dina tillgängliga instanser. I läget på begäran krävs inget minsta antal instanser. Du debiteras för: • Den totala mängden minne som etablerats medan varje instans på begäran aktivt kör funktioner (i GB-sekunder), minus ett kostnadsfritt beviljande av GB per månad. • Det totala antalet körningar, minus ett kostnadsfritt bidrag (antal) körningar per månad. |
Alltid redo | Du kan konfigurera en eller flera instanser, tilldelade till specifika utlösartyper (HTTP/Durable/Blob) och enskilda funktioner, som alltid är tillgängliga för att hantera begäranden. När du har aktiverat alla alltid redo instanser debiteras du för: • Den totala mängden minne som har etablerats för alla dina alltid klara instanser, så kallad baslinje (i GB-sekunder). • Den totala mängden minne som har etablerats under den tid då varje alltid redo instans aktivt kör funktioner (i GB-sekunder). • Det totala antalet körningar. I alltid redo fakturering finns det inga kostnadsfria bidrag. |
Den senaste informationen om körningspriser, alltid redo baslinjekostnader och kostnadsfria bidrag för körningar på begäran finns på prissättningssidan för Azure Functions.
Det här diagrammet visar hur kostnader på begäran fastställs i den här planen:
Förutom körningstiden debiteras du även med en lägre baslinjefrekvens för antalet alltid redo instanser som du underhåller när du använder en eller flera alltid redo instanser. Körningstiden för alltid redo instanser kan vara billigare än körningstid på instanser med körning på begäran.
Viktigt!
I den här artikeln används priser på begäran för att förstå exempelberäkningar. Kontrollera alltid de aktuella kostnaderna på prissättningssidan för Azure Functions när du beräknar kostnader som du kan medföra när du kör dina funktioner i Flex Consumption-planen.
Överväg en funktionsapp som endast består av HTTP-utlösare med och dessa grundläggande fakta:
- HTTP-utlösare hanterar 40 konstanta begäranden per sekund.
- HTTP-utlösare hanterar 10 samtidiga begäranden.
- Inställningen för minnesstorlek för instansen är
2048 MB
. - Det finns inga alltid redo instanser konfigurerade, vilket innebär att appen kan skalas till noll.
I en situation som denna beror prissättningen mer på vilken typ av arbete som utförs under kodkörningen. Nu ska vi titta på två arbetsbelastningsscenarier:
CPU-bunden arbetsbelastning: I en CPU-bunden arbetsbelastning finns det ingen fördel med att bearbeta flera begäranden parallellt i samma instans. Det innebär att du är bättre på att distribuera varje begäran till sin egen instans så att begäranden slutförs så snabbt som möjligt utan konkurrens. I det här scenariot bör du ange en låg HTTP-utlösarkonkurritet för
1
. Med 10 samtidiga begäranden skalas appen till ett stabilt tillstånd på ungefär 10 instanser, och varje instans bearbetar kontinuerligt en begäran i taget.Eftersom storleken på varje instans är ~2 GB är
2 GB * 3600 s = 7200 GB-s
förbrukningen för en enda kontinuerligt aktiv instans , som enligt den antagna körningstakten på begäran (utan några kostnadsfria bidrag tillämpas$0.1152 USD
) per timme per instans. Eftersom den CPU-bundna appen skalas till 10 instanser är$1.152 USD
den totala timtaxa för körningstiden .På samma sätt är kostnaden per körning på begäran (utan kostnadsfria bidrag) på 40 begäranden per sekund lika
40 * 3600 = 144,000
med eller 0,144 miljoner körningar per timme. Den totala (kostnadsfria) timkostnaden för körningar är sedan0.144 * $0.20
, vilket är$0.0288
per timme.I det här scenariot är
$1.152 + $0.0288 = $1.1808 USD
den totala timkostnaden för att köra på begäran på 10 instanser .I/O-bunden arbetsbelastning: I en I/O-bunden arbetsbelastning ägnas större delen av programtiden åt att vänta på inkommande begäran, vilket kan begränsas av nätverkets dataflöde eller andra överordnade faktorer. På grund av de begränsade indata kan koden bearbeta flera åtgärder samtidigt utan negativa effekter. I det här scenariot antar du att du kan bearbeta alla tio samtidiga begäranden på samma instans.
Eftersom förbrukningsavgifter endast baseras på minnet för varje aktiv instans är beräkningen av förbrukningsavgiften helt enkelt
2 GB * 3600 s = 7200 GB-s
, som enligt den antagna körningstakten på begäran (utan några kostnadsfria bidrag tillämpas) per$0.1152 USD
timme för den enskilda instansen.Precis som i det CPU-bundna scenariot är kostnaden per körning på begäran (utan kostnadsfria bidrag) på 40 begäranden per sekund lika
40 * 3600 = 144,000
med eller 0,144 miljoner körningar per timme. I det här fallet den totala (kostnadsfria) timkostnaden för körningar0.144 * $0.20
, vilket är$0.0288
per timme.I det här scenariot är
$0.1152 + $0.0288 = $0.144 USD
den totala timkostnaden för att köra på begäran på en enda instans .
Övriga relaterade kostnader
När du beräknar den totala kostnaden för att köra dina funktioner i en plan bör du komma ihåg att Functions-körningen använder flera andra Azure-tjänster, som var och en faktureras separat. När du beräknar prissättningen för funktionsappar kräver alla utlösare och bindningar som du har som integreras med andra Azure-tjänster att du skapar och betalar för dessa andra tjänster.
För funktioner som körs i en förbrukningsplan är den totala kostnaden körningskostnaden för dina funktioner, plus kostnaden för bandbredd och andra tjänster.
När du beräknar de totala kostnaderna för din funktionsapp och relaterade tjänster använder du Priskalkylatorn för Azure.
Relaterad kostnad | beskrivning |
---|---|
Lagringskonto | Varje funktionsapp kräver att du har en associerad Generell användning Azure Storage-konto, som faktureras separat. Det här kontot används internt av Functions-körningen, men du kan också använda det för Storage-utlösare och bindningar. Om du inte har något lagringskonto skapas ett åt dig när funktionsappen skapas. Mer information finns i Krav för lagringskonto. |
Application Insights | Functions förlitar sig på Application Insights för att tillhandahålla en övervakningsupplevelse med höga prestanda för dina funktionsappar. Även om det inte krävs bör du aktivera Application Insights-integrering. Ett kostnadsfritt beviljande av telemetridata ingår varje månad. Mer information finns på prissättningssidan för Azure Monitor. |
Nätverksbandbredd | Du kan medföra kostnader för dataöverföring beroende på riktningen och scenariot för dataflytten. Mer information finns i Prisinformation om bandbredd. |
Beteenden som påverkar körningstiden
Följande funktioners beteende kan påverka körningstiden:
Utlösare och bindningar: Den tid det tar att läsa indata från och skriva utdata till dina funktionsbindningar räknas som körningstid. När din funktion till exempel använder en utdatabindning för att skriva ett meddelande till en Azure-lagringskö inkluderar körningstiden den tid det tar att skriva meddelandet till kön, vilket ingår i beräkningen av funktionskostnaden.
Asynkron körning: Den tid som funktionen väntar på resultatet av en asynkron begäran (
await
i C#) räknas som körningstid. GB-sekundersberäkningen baseras på start- och sluttiden för funktionen och minnesanvändningen under den perioden. Vad som händer under den tiden när det gäller CPU-aktivitet räknas inte in i beräkningen. Du kanske kan minska kostnaderna under asynkrona åtgärder med hjälp av Durable Functions. Du debiteras inte för tid som ägnas åt väntan i orkestreringsfunktioner.
Visa kostnadsrelaterade data
På fakturan kan du visa kostnadsrelaterade data för Totalt antal körningar – Funktioner och körningstid – Funktioner, tillsammans med de faktiska fakturerade kostnaderna. Dessa fakturadata är dock en månatlig aggregering för en tidigare fakturaperiod.
Funktionsmått på appnivå
För att bättre förstå kostnaderna för dina funktioner kan du använda Azure Monitor för att visa kostnadsrelaterade mått som för närvarande genereras av dina funktionsappar.
Använd Azure Monitor Metrics Explorer för att visa kostnadsrelaterade data för dina funktionsappar för förbrukningsplan i ett grafiskt format.
Gå till funktionsappen i Azure Portal.
I den vänstra panelen rullar du ned till Övervakning och väljer Mått.
Från Mått väljer du Antal funktionskörningar och Summa för sammansättning. Detta lägger till summan av körningsantalet under den valda perioden i diagrammet.
Välj Lägg till mått och upprepa steg 2–4 för att lägga till funktionskörningsenheter i diagrammet.
Det resulterande diagrammet innehåller summorna för båda körningsmåtten i det valda tidsintervallet, vilket i det här fallet är två timmar.
Eftersom antalet körningsenheter är så mycket större än körningsantalet visar diagrammet bara körningsenheter.
Det här diagrammet visar totalt 1,11 miljarder Function Execution Units
förbrukade under en tvåtimmarsperiod, mätt i MB-millisekunder. Om du vill konvertera till GB-sekunder dividerar du med 1024000. I det här exemplet förbrukade funktionsappen 1110000000 / 1024000 = 1083.98
GB-sekunder. Du kan ta det här värdet och multiplicera med det aktuella priset för körningstiden på sidan Functions-priser, vilket ger dig kostnaden för dessa två timmar, förutsatt att du redan har använt några kostnadsfria beviljanden av körningstid.
Mått på funktionsnivå
Funktionskörningsenheter är en kombination av körningstid och minnesanvändning, vilket gör det till ett svårt mått för att förstå minnesanvändning. Minnesdata är för närvarande inte ett mått som är tillgängligt via Azure Monitor. Men om du vill optimera minnesanvändningen för din app kan du använda prestandaräknardata som samlas in av Application Insights.
Om du inte redan har gjort det aktiverar du Application Insights i funktionsappen. Med den här integreringen aktiverad kan du köra frågor mot dessa telemetridata i portalen.
Du kan använda azure monitor-måttutforskaren i Azure Portal- eller REST-API:er för att hämta data för övervakningsmått.
Fastställa minnesanvändning
Under Övervakning väljer du Loggar (Analys), kopierar sedan följande telemetrifråga och klistrar in den i frågefönstret och väljer Kör. Den här frågan returnerar den totala minnesanvändningen vid varje sampeltillfälle.
performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value
Resultatet ser ut som i följande exempel:
tidsstämpel [UTC] | name | värde |
---|---|---|
2019-09-12, 01:05:14.947 | Privata byte | 209,932,288 |
2019-09-12, 01:06:14.994 | Privata byte | 212,189,184 |
2019-09-12, 01:06:30.010 | Privata byte | 231,714,816 |
2019-09-12, 01:07:15.040 | Privata byte | 210,591,744 |
2019-09-12, 01:12:16.285 | Privata byte | 216,285,184 |
2019-09-12, 01:12:31.376 | Privata byte | 235,806,720 |
Fastställa varaktighet
Azure Monitor spårar mått på resursnivå, vilket för Functions är funktionsappen. Application Insights-integrering genererar mått per funktion. Här är ett exempel på en analysfråga för att få den genomsnittliga varaktigheten för en funktion:
customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
name | averageDurationMilliseconds |
---|---|
QueueTrigger AvgDurationMs | 16.087 |
QueueTrigger MaxDurationMs | 90.249 |
QueueTrigger MinDurationMs | 8.522 |