Tania infrastruktura pod twoje MVP w Azure

Posted by Maciej Gos on Monday, March 30, 2020

Masz pomysł na aplikację którą chciałbyś/chciała utrzymywać w możliwie jak najtańszy sposób?

Chcecie uruchomić aplikację ale jeszcze nie wiecie czy pomysł się przyjmie?

O to parę pomysłów jak to zrobić tanio i „szybko” w Azure.

Składniki

Poniżej moja propozycja z jakich usług mogła by się taka infrastruktura składać. Każda z nich ma swoje plusy i minusy ale dla wprawnego oka mają one jedną wspólną cechę „serverless” (Nie wszystkie są typowymi usługami serverless ale na pewno da się ich użyć tanio).

  • Function Apps
  • API Management
  • Blob Storage
  • Table Storage
  • Azure SQL Database
  • Azure AD B2C

Przejdźmy sobie teraz po kolei przez każdą z nich.

Function Apps

Jest to odpowiedź Microsoft na hasło serverless ale nie chce teraz tutaj opisywać usługi tylko bardziej chce się skupić na jej plusach i minusach (pod kątem kosztów).

  • Koszt wykonania to: €0.000014/GB-s
  • Koszt za liczbę wykonani: €0.169 per million executions

Policzmy coś na szybko:

  • 2 miliony wykonani naszej funkcji
  • czas trwania 2 sekundy
  • konsumpcja pamięci 128 MB

2 sekundy * 2 000 000 miliony = 4 000 000 miliony sekund * 128 MB / 1024 MB = 500 000 GB – 400 000 GB = 100 000 GB * €0.000014 = €1.4

2 000 000 miliony wywołani – 1 000 000 = 1 000 000 * €0.169 = €0.169

Całkowity koszt miesięczny takiej infrastruktury to: €1.4 + €0.169 = €1,57

Uff… udało się policzyć ale czemu te funkcje są takie fajne? Są ponieważ tak jak większość usług mają swoje darmowe limity w których z moich doświadczeń da się jak najbardziej użyć do projektów MVP.

W ramach miesięcznych darmowych limitów mamy:

  • 400 000 GB-s czasu wykonania
  • 1 000 000 wywołani naszej funkcji

Z minusów jakie należy wziąć pod uwagę korzystając z Function Apps jest tzw. Cold Start, czyli czas potrzeby na uruchomienie instancji naszej aplikacji.

Możemy sobie z „nim” poradzić np. poprzez zastosowanie planu Consumption Plan Premium lub ustawienie App Service Plan (Basic, Standard, Premium) .

API Management

Kolejnym elementem przydatnym w naszej przykładowej infrastrukturze jest usługa API Management która również oferuje wersję serverless.

Możemy jej użyć w formie gateway dla naszej infrastruktury, oraz wcześniej przygotowanego API na Azure Functions.

Przy jej pomocy wszystkie elementy naszego API zostaną zabezpieczone przy pomocy np. subscription key i polityk jakie ono udostępnia.

Niestety ale obecnie dokumentacja Microsoft nie udostępnia informacji ile płacimy za 1 wywołanie wiemy natomiast, że 1 milion wywołani jest za darmo ( https://azure.microsoft.com/en-us/pricing/details/api-management/).

Blob Storage i Table Storage

Są to dwie usługi do przechowywania danych w formie „NoSQL” jest to trochę sformułowanie na wyrost ale postaram się to wyjaśnić.

Blob Storage jest usługą w której będziemy przechowywać wszelkiego rodzaju pliki np. zdjęcia, JSON. Tak możemy tam również użyć sztuczki w której nasze dane są przechowane na blob jako pliki JSON.

Table Storage jest usługą typowo NoSQL która przechowuje dane w postaci wierszy i zestawu kolumn. Jest ona szybka bardzo skalowalna ale pod warunkiem zachowania ostrożności i pamiętania, że dane w niej przechowywane są indeksowane tylko po kolumnach Partition Key i Row Key.

Z obu tych usług możemy skorzystać w naszej aplikacji aby przechować dane których potrzebujemy w czasie działania naszego systemu lub jako archiwum np. dla logów jakie nasza aplikacja odkłada.

Ceny i koszty korzystania z powyższech usług:

  • Blob Storage przy założeniu, że korzystamy z ZRS HOT (Zone Redundant Storage) przy pierwszych 50 TB w miesiącu zapłacimy €0.0203 za GB, czyli przechowując np. 10 GB danych na których wykonamy 10.000 operacji (read, write) zapłacimy ok. 10 GB * €0.0203 = €0.203 + €0.0037 = €0.2067
  • Table Storage przy założeniu, że z ZRS HOT (Zone Redundant Storage) zapłacimy €0.0474 za GB, czyli przechowując np. 10 GB danych na których wykonamy 10.000 operacji (read, write) zapłacimy ok. 10 GB * €0.0474 = €0.474 + €0.000304 = €0.474304

Podsumowując usługi storage płacimy w nich za przechowanie danych oraz za operacje na nich wykonane gdzie:

  • Dla Blob Storage
    • przechowanie: €0.0203 za GB
    • operacje: $0.0037 za 10.000 operacji w miesiącu
  • Dla Table Storage
    • przechowanie: €0.0474 za GB
    • operacje: €0.000304 za 10.000 operacji w miesiącu

Azure SQL Database

Jak sama nazwa wskazuje jest dobrze nam znana baza danych Microsoft SQL Server świadczona jako usługa SaaS w chmurze. Jednak nas interesuje jedna szczególna konfiguracja Service Tier: General Purpose, Compute Tier: Serverless.

Przejdźmy do kosztów tej usługi. Dla przykładu przyjąłem sobie:

  • Aplikacja działa 8h dziennie przez 20 dni w miesiącu (dni pracujące)
  • Danych mamy 10 GB

Policzmy to

  • vCore: 8h * €0.484 = 3.87 + (1h * 0.484) = 4.36 * 20 = €87.12
  • Storage: 10 GB * €0.1155 = €1.16
  • Point-In-Time backup: 10 GB * €0.201 = €2.01

Azure AD B2C

Jest to usługa z której możemy skorzystać aby wykonać prosto i szybko mechanizm logowania do naszej aplikacji. Umożliwia ona również stworzenie mechanizmów logowania powiązanych z social providers.

Największym plusem tej usługi jest fakt, że pozwala na obsługę do 50.000 użytkowników miesięcznie całkowicie za darmo.

Podsumowanie

Koszt naszej przykładowej architektury to orientacyjnie ok. €100 miesięcznie. Oczywiście da się taką architekturę zbudować używając innych komponentów ale w mojej ocenie jest to dobry punkt wyjścia gdy zaczyna się budowę jakiegoś rozwiązania lub chcemy przygotować jakiś prototyp.

W wymienionym rozwiązaniu największym kosztem jest baza danych ale przy niedużych systemach można również próbować wykorzystać Cosmos DB i jego Free Tier.

Photo on Unsplash

Maciej Gos

真诚赞赏,手留余香

使用微信扫描二维码完成支付


comments powered by Disqus