Szacowanie kosztów opartych na użyciu
W tym artykule pokazano, jak oszacować koszty planu dla planów hostingu Flex Consumption and Consumption.
Usługa Azure Functions oferuje obecnie te różne opcje hostingu dla aplikacji funkcji, a każda opcja ma własny model cen planu hostingu:
Plan | Opis |
---|---|
Plan Flex Consumption | Płacisz za czas wykonywania dla wystąpień, na których działają funkcje, oraz za wszystkie zawsze gotowe wystąpienia. Wystąpienia są dynamicznie dodawane i usuwane na podstawie liczby zdarzeń przychodzących. Jest to zalecany plan skalowania dynamicznego, który obsługuje również integrację sieci wirtualnej. |
Premium | Zapewnia te same funkcje i mechanizm skalowania co plan Zużycie, ale z ulepszoną wydajnością i integracją sieci wirtualnej. Koszt jest oparty na wybranej warstwie cenowej. Aby dowiedzieć się więcej, zobacz Plan premium usługi Azure Functions. |
Dedykowane (App Service) (warstwa podstawowa lub nowsza) |
Jeśli musisz uruchomić w dedykowanych maszynach wirtualnych lub w izolacji, użyj obrazów niestandardowych lub chcesz użyć nadmiarowej pojemności planu usługi App Service. Używa regularnego rozliczeń planu usługi App Service. Koszt jest oparty na wybranej warstwie cenowej. |
Aplikacje kontenera | Tworzenie i wdrażanie konteneryzowanych aplikacji funkcji w w pełni zarządzanym środowisku hostowanym przez usługę Azure Container Apps, co umożliwia uruchamianie funkcji wraz z innymi mikrousługami, interfejsami API, witrynami internetowymi i przepływami pracy jako programami hostowanymi w kontenerach. |
Zużycie | Opłaty są naliczane tylko za czas działania aplikacji funkcji. Ten plan obejmuje bezpłatne udzielanie na podstawie subskrypcji. |
Zawsze należy wybrać opcję, która najlepiej obsługuje funkcję, wydajność i wymagania dotyczące kosztów wykonywania funkcji. Aby dowiedzieć się więcej, zobacz Skalowanie i hostowanie usługi Azure Functions.
Ten artykuł koncentruje się na planach Flex Consumption and Consumption, ponieważ w tych planach rozliczenia zależą od aktywnych okresów wykonań wewnątrz każdego wystąpienia.
Rozszerzenie Durable Functions można również uruchomić w obu tych planach. Aby dowiedzieć się więcej o zagadnieniach związanych z kosztami podczas korzystania z rozszerzenia Durable Functions, zobacz Rozliczenia usługi Durable Functions.
Koszty oparte na użyciu
Sposób obliczania kosztów opartych na użyciu, w tym bezpłatnych dotacji, zależy od konkretnego planu. Aby uzyskać najbardziej aktualne informacje o kosztach i udzielaniu, zobacz stronę cennika usługi Azure Functions.
Istnieją dwa tryby, w których koszty są określane podczas uruchamiania aplikacji w planie Flex Consumption. Każdy tryb jest określany dla poszczególnych wystąpień.
Tryb rozliczeniowy | opis |
---|---|
Na żądanie | W przypadku uruchamiania w trybie na żądanie opłaty są naliczane tylko za czas wykonywania kodu funkcji w dostępnych wystąpieniach. W trybie na żądanie nie jest wymagana minimalna liczba wystąpień. Opłaty są naliczane za: • Łączna ilość pamięci aprowizowanej, podczas gdy każde wystąpienie na żądanie aktywnie wykonuje funkcje (w GB-sekund), pomniejszone o bezpłatną dotację GB na miesiąc. • Całkowita liczba wykonań, pomniejszona o bezpłatną dotację (liczbę) wykonań miesięcznie. |
Zawsze gotowe | Można skonfigurować co najmniej jedno wystąpienie przypisane do określonych typów wyzwalaczy (HTTP/Durable/Blob) i poszczególnych funkcji, które są zawsze dostępne do obsługi żądań. Po włączeniu wszystkich zawsze gotowych wystąpień są naliczane opłaty za: • Łączna ilość pamięci aprowizowanej we wszystkich zawsze gotowych wystąpieniach, znana jako punkt odniesienia (w GB-sekund). • Całkowita ilość pamięci aprowizowanej w czasie, gdy każde zawsze gotowe wystąpienie aktywnie wykonuje funkcje (w GB-sekund). • Całkowita liczba wykonań. W przypadku zawsze gotowych rozliczeń nie ma bezpłatnych dotacji. |
Aby uzyskać najbardziej aktualne informacje na temat cen wykonania, zawsze gotowych kosztów planu bazowego i bezpłatnych dotacji dla wykonań na żądanie, zobacz stronę cennika usługi Azure Functions.
Ten diagram przedstawia sposób określania kosztów na żądanie w tym planie:
Oprócz czasu wykonywania, w przypadku korzystania z co najmniej jednego zawsze gotowego wystąpienia, opłaty są również naliczane według niższej, bazowej stawki za liczbę zawsze gotowych wystąpień, które utrzymujesz. Czas wykonywania dla zawsze gotowych wystąpień może być tańszy niż czas wykonywania wystąpień z wykonywaniem na żądanie.
Ważne
W tym artykule są używane ceny na żądanie, aby ułatwić zrozumienie przykładowych obliczeń. Zawsze sprawdzaj bieżące koszty na stronie cennika usługi Azure Functions podczas szacowania kosztów, które mogą zostać naliczone podczas uruchamiania funkcji w planie Flex Consumption.
Rozważmy aplikację funkcji składającą się tylko z wyzwalaczy HTTP z następującymi podstawowymi faktami:
- Wyzwalacze HTTP obsługują 40 żądań stałych na sekundę.
- Wyzwalacze HTTP obsługują 10 współbieżnych żądań.
- Ustawienie rozmiaru pamięci wystąpienia to
2048 MB
. - Nie skonfigurowano zawsze gotowych wystąpień, co oznacza, że aplikacja może skalować do zera.
W takiej sytuacji ceny zależą bardziej od rodzaju pracy wykonywanej podczas wykonywania kodu. Przyjrzyjmy się dwóm scenariuszom obciążenia:
Obciążenie związane z procesorem CPU: W obciążeniu powiązanym z procesorem CPU nie ma możliwości równoległego przetwarzania wielu żądań w tym samym wystąpieniu. Oznacza to, że lepiej dystrybuować każde żądanie do własnego wystąpienia, aby żądania wypełniały się tak szybko, jak to możliwe bez rywalizacji. W tym scenariuszu należy ustawić niską współbieżność wyzwalacza HTTP .
1
W przypadku 10 równoczesnych żądań aplikacja jest skalowana do stałego stanu około 10 wystąpień, a każde wystąpienie jest stale aktywne przetwarzanie jednego żądania naraz.Ponieważ rozmiar każdego wystąpienia wynosi ok. 2 GB, użycie pojedynczego wystąpienia stale aktywnego wynosi
2 GB * 3600 s = 7200 GB-s
, co przy założeniu szybkości wykonywania na żądanie (bez stosowania bezpłatnych dotacji) jest$0.1152 USD
na godzinę na wystąpienie. Ponieważ aplikacja powiązana z procesorem CPU jest skalowana do 10 wystąpień, łączna stawka godzinowa dla czasu wykonywania wynosi$1.152 USD
.Podobnie opłata za wykonanie na żądanie (bez żadnych bezpłatnych dotacji) z 40 żądań na sekundę jest równa
40 * 3600 = 144,000
lub 0,144 mln wykonań na godzinę. Łączny (bezpłatny) koszt godzinowy wykonań wynosi ,0.144 * $0.20
czyli$0.0288
na godzinę.W tym scenariuszu łączny koszt godzinowy działania na żądanie na 10 wystąpień wynosi
$1.152 + $0.0288 = $1.1808 USD
.Obciążenie związane z operacjami we/wy: W obciążeniu powiązanym z operacją we/wy większość czasu aplikacji jest poświęcana na oczekiwanie na żądanie przychodzące, co może być ograniczone przez przepływność sieci lub inne czynniki nadrzędne. Ze względu na ograniczone dane wejściowe kod może przetwarzać wiele operacji jednocześnie bez negatywnego wpływu. W tym scenariuszu przyjęto założenie, że można przetwarzać wszystkie 10 współbieżnych żądań w tym samym wystąpieniu.
Ponieważ opłaty za zużycie są oparte tylko na pamięci każdego aktywnego wystąpienia, obliczenie opłaty za zużycie wynosi po prostu
2 GB * 3600 s = 7200 GB-s
, co przy zakładanym tempie wykonywania na żądanie (bez żadnych bezpłatnych dotacji) jest$0.1152 USD
na godzinę dla pojedynczego wystąpienia.Podobnie jak w scenariuszu powiązanym z procesorem CPU opłaty za wykonanie na żądanie (bez żadnych bezpłatnych dotacji) 40 żądań na sekundę są równe
40 * 3600 = 144,000
lub 0,144 miliona wykonań na godzinę. W tym przypadku łączny (bezpłatny dla grantów) koszt godzinowy wykonań0.144 * $0.20
, czyli$0.0288
na godzinę.W tym scenariuszu łączny koszt godzinowy uruchamiania na żądanie dla pojedynczego wystąpienia to
$0.1152 + $0.0288 = $0.144 USD
.
Inne powiązane koszty
Podczas szacowania ogólnego kosztu uruchamiania funkcji w dowolnym planie należy pamiętać, że środowisko uruchomieniowe usługi Functions używa kilku innych usług platformy Azure, które są rozliczane oddzielnie. Podczas szacowania cen aplikacji funkcji wszystkie wyzwalacze i powiązania, które są zintegrowane z innymi usługami platformy Azure, wymagają utworzenia innych usług i płacenia za te inne usługi.
W przypadku funkcji działających w planie Zużycie całkowity koszt jest kosztem wykonywania funkcji oraz kosztem przepustowości i innych usług.
Podczas szacowania ogólnych kosztów aplikacji funkcji i powiązanych usług użyj kalkulatora cen platformy Azure.
Powiązany koszt | opis |
---|---|
Konto magazynu | Każda aplikacja funkcji wymaga skojarzonego konta usługi Azure Storage ogólnego przeznaczenia, które jest rozliczane oddzielnie. To konto jest używane wewnętrznie przez środowisko uruchomieniowe usługi Functions, ale można go również używać dla wyzwalaczy i powiązań usługi Storage. Jeśli nie masz konta magazynu, zostanie on utworzony podczas tworzenia aplikacji funkcji. Aby dowiedzieć się więcej, zobacz Wymagania dotyczące konta magazynu. |
Application Insights | Usługa Functions korzysta z usługi Application Insights , aby zapewnić środowisko monitorowania o wysokiej wydajności dla aplikacji funkcji. Chociaż nie jest to wymagane, należy włączyć integrację usługi Application Insights. Bezpłatne udzielanie danych telemetrycznych jest uwzględniane co miesiąc. Aby dowiedzieć się więcej, zobacz stronę cennika usługi Azure Monitor. |
Przepustowość sieci | W zależności od kierunku i scenariusza przenoszenia danych można ponieść koszty transferu danych. Aby dowiedzieć się więcej, zobacz Szczegóły cennika przepustowości. |
Zachowania wpływające na czas wykonywania
Następujące zachowania funkcji mogą mieć wpływ na czas wykonywania:
Wyzwalacze i powiązania: czas potrzebny na odczytywanie danych wejściowych z i zapisywanie danych wyjściowych do powiązań funkcji jest liczone jako czas wykonywania. Na przykład gdy funkcja używa powiązania wyjściowego do zapisywania komunikatu w kolejce usługi Azure Storage, czas wykonywania obejmuje czas potrzebny na zapisanie komunikatu w kolejce, który jest uwzględniony w obliczeniu kosztu funkcji.
Wykonywanie asynchroniczne: czas oczekiwania funkcji na wyniki żądania asynchronicznego (
await
w języku C#) jest liowany jako czas wykonywania. Obliczenie GB-sekundy jest oparte na godzinie rozpoczęcia i zakończenia funkcji oraz użycia pamięci w tym okresie. To, co dzieje się w tym czasie pod względem aktywności procesora CPU, nie jest uwzględniane w obliczeniach. Możesz zmniejszyć koszty podczas operacji asynchronicznych przy użyciu rozszerzenia Durable Functions. Nie są naliczane opłaty za czas spędzony w oczekiwaniu na funkcje orkiestratora.
Wyświetlanie danych związanych z kosztami
Na fakturze można wyświetlić dane związane z kosztami łącznych wykonań — funkcje i czas wykonywania — funkcje wraz z rzeczywistymi rozliczanymi kosztami. Jednak te dane faktury są agregacja miesięczna dla ostatniego okresu faktury.
Metryki na poziomie aplikacji funkcji
Aby lepiej zrozumieć koszty funkcji, możesz użyć usługi Azure Monitor, aby wyświetlić metryki związane z kosztami, które są obecnie generowane przez aplikacje funkcji.
Eksplorator metryk usługi Azure Monitor umożliwia wyświetlanie danych związanych z kosztami dla aplikacji funkcji planu zużycie w formacie graficznym.
W witrynie Azure Portal przejdź do aplikacji funkcji.
W panelu po lewej stronie przewiń w dół do pozycji Monitorowanie i wybierz pozycję Metryki.
W obszarze Metryka wybierz pozycję Liczba wykonań funkcji i Sumuj dla agregacji. Spowoduje to dodanie sumy liczby wykonań w wybranym okresie do wykresu.
Wybierz pozycję Dodaj metryki i powtórz kroki 2–4, aby dodać jednostki wykonywania funkcji do wykresu.
Wynikowy wykres zawiera sumy dla obu metryk wykonywania w wybranym zakresie czasu, co w tym przypadku wynosi dwie godziny.
Ponieważ liczba jednostek wykonywania jest o wiele większa niż liczba wykonań, wykres pokazuje tylko jednostki wykonywania.
Ten wykres przedstawia w sumie 1,11 miliarda Function Execution Units
zużytego w okresie dwugodzinnym mierzonym w mb-milisekundach. Aby przekonwertować na GB-s, podziel przez 1024000. W tym przykładzie aplikacja funkcji zużywała 1110000000 / 1024000 = 1083.98
GB-s. Możesz użyć tej wartości i pomnożyć bieżącą cenę czasu wykonania na stronie cennika usługi Functions, co daje koszt tych dwóch godzin, przy założeniu, że już użyto dowolnych bezpłatnych dotacji czasu wykonania.
Metryki na poziomie funkcji
Jednostki wykonywania funkcji to kombinacja czasu wykonywania i użycia pamięci, co utrudnia zrozumienie użycia pamięci. Dane pamięci nie są obecnie dostępne za pośrednictwem usługi Azure Monitor. Jeśli jednak chcesz zoptymalizować użycie pamięci aplikacji, możesz użyć danych licznika wydajności zebranych przez usługę Application Insights.
Jeśli jeszcze tego nie zrobiono, włącz usługę Application Insights w aplikacji funkcji. Po włączeniu tej integracji można wykonywać zapytania dotyczące tych danych telemetrycznych w portalu.
Aby uzyskać dane metryk monitora, możesz użyć eksploratora metryk usługi Azure Monitor w witrynie Azure Portal lub interfejsów API REST.
Określanie użycia pamięci
W obszarze Monitorowanie wybierz pozycję Dzienniki (analiza), a następnie skopiuj następujące zapytanie telemetryczne i wklej je w oknie zapytania, a następnie wybierz pozycję Uruchom. To zapytanie zwraca łączne użycie pamięci w każdym próbkowanym czasie.
performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value
Wyniki wyglądają jak w poniższym przykładzie:
znacznik czasu [UTC] | name | wartość |
---|---|---|
12.09.2019, 1:05:14.947 | Bajty prywatne | 209,932,288 |
12.09.2019, 1:06:14.994 | Bajty prywatne | 212,189,184 |
12.09.2019, 1:06:30.010 | Bajty prywatne | 231,714,816 |
12.09.2019, 1:07:15.040 | Bajty prywatne | 210,591,744 |
12.09.2019, 1:12:16.285 | Bajty prywatne | 216,285,184 |
12.09.2019, 1:12:31.376 AM | Bajty prywatne | 235,806,720 |
Określanie czasu trwania
Usługa Azure Monitor śledzi metryki na poziomie zasobu, który dla usługi Functions jest aplikacją funkcji. Integracja usługi Application Insights emituje metryki dla poszczególnych funkcji. Oto przykładowe zapytanie analityczne umożliwiające uzyskanie średniego czasu trwania funkcji:
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 |