Azure Cosmos DB przechodzi bez serwera

Usługa Azure Cosmos DB to jeden z fundamentów platformy, na którym opiera się wiele jej kluczowych usług. Zaprojektowany od podstaw jako rozproszona baza danych, implementuje zestaw różnych modeli spójności, umożliwiając kompromis między wydajnością a opóźnieniami dla aplikacji. Następnie istnieją różne modele pracy z danymi, od znanych interfejsów API NoSQL i SQL, przez obsługę interfejsu API Mongo DB, po silnik zapytań do graficznej bazy danych Gremlin.

W Cosmos DB jest wystarczająco dużo, aby obsługiwać większość typowych scenariuszy rozwoju chmury, zapewniając spójną platformę danych, która może udostępniać dane w skali globalnej. Microsoft często opisuje to jako „bazę danych o skali planetarnej”, trafny opis.

Bezserwerowa alternatywa dla obsługiwanej przepływności

Mimo wszystkich korzyści Cosmos DB ma pewne wady; nie tylko jego koszt. Chociaż istnieje stosunkowo ograniczona bezpłatna opcja, uruchomienie jej na dużą skalę może być kosztowne i należy to wziąć pod uwagę podczas tworzenia aplikacji wokół niej. Budżetowanie jednostek żądań Cosmos DB jest złożonym procesem, który jest trudny do wykonania za pierwszym razem, zwłaszcza gdy uwzględniasz skalowanie, ręcznie lub automatycznie.

Firma Microsoft od jakiegoś czasu uruchamia wersję zapoznawczą bezserwerowej opcji Cosmos DB w oparciu o jej podstawowy interfejs API SQL. To interesująca alternatywa dla tradycyjnie udostępnianej opcji. Obciąża Cię tylko wtedy, gdy uruchamia żądanie i zawiesza instancję, gdy nic się nie dzieje. Wystąpią dodatkowe opóźnienia w operacjach na bazie danych, ponieważ Twoja instancja musi zostać zawieszona po zawieszeniu. Oczywiście jest opłata za magazyn, ale tak samo jest w przypadku każdej bazy danych Azure. Wstępna wersja próbna została teraz rozszerzona na wszystkie interfejsy API Cosmos DB, a ich ogólna dostępność nie jest zbyt odległa w przyszłości.

Dodanie opcji bezserwerowej do Cosmos DB ma sens w przypadku wielu typów obciążeń, w których otrzymujesz żądania w małych ilościach i partiach. W przypadku małego obciążenia z nieregularnym schematem operacji model wyceny oparty na zużyciu ma wiele sensu - i może zaoszczędzić znaczne kwoty w perspektywie długoterminowej, ponieważ nie ma zobowiązania do zapewnianej przepustowości.

Koszty są niskie: płacisz 0,282 USD za bezserwerową jednostkę żądania dla nawet miliona jednostek RU w cyklu rozliczeniowym. Jeśli potrzebujesz bardziej niezawodnego serwera, możesz skonfigurować strefę dostępności, chociaż zwiększa to koszty o 1,25x. To wciąż rozsądna transakcja, a to, co tracisz na przewidywalności, zyskujesz na niższych kosztach. Koszty magazynowania pozostają takie same dla przepływności obsługiwanej ręcznie i automatycznie.

Wprowadzenie do bezserwerowej bazy danych Cosmos

Wskakiwanie jest dość łatwe. Podobnie jak w przypadku standardowego konta Cosmos DB, musisz udostępnić je w ramach subskrypcji i dodać wystąpienie bezserwerowe do grupy zasobów. Następnie wybierz interfejs API, którego planujesz używać do zapytań, a gdy zostaniesz poproszony o wybranie trybu pojemności, wybierz przepływność bez serwera zamiast aprowizowanej. Na koniec połącz go z regionem, pamiętając, że możesz używać bez serwera tylko w jednym regionie Azure; nie ma opcji nadmiarowości geograficznej. Nie będziesz też mógł go używać z poziomem darmowym.

Po uruchomieniu instancji bezserwerowej możesz używać jej interfejsów API do ładowania danych i wykonywania zapytań. Podobnie jak w przypadku standardowego wystąpienia Cosmos DB, można tworzyć funkcje JavaScript i wyzwalacze, które działają w bazie danych, a także używać wielu różnych interfejsów API do zarządzania zapytaniami.

Bezserwerowa baza danych Cosmos DB powinna wkrótce wyjść z wersji zapoznawczej i dodaje obsługę wszystkich swoich interfejsów API, nawet dla najnowszego interfejsu API Cassandra. Ponieważ jest to publiczna wersja zapoznawcza, możesz ją skonfigurować i zbadać jej działanie bezpośrednio z witryny Azure Portal. W wersji zapoznawczej nie ma wsparcia dla ARM lub innej infrastruktury jako narzędzi do wdrażania kodu, chociaż powinno być, gdy usługa będzie ogólnie dostępna. Nie można zautomatyzować konfiguracji i wdrażania, więc na razie nie będzie można ich używać jako części potoku CI / CD (ciągłej integracji / ciągłego dostarczania), ponieważ wdrożenia będą musiały być wykonywane ręcznie.

Tworzenie kodu za pomocą bezserwerowej bazy danych Cosmos

Jedno miejsce, w którym warto uzyskać dużą wartość z bezserwerowej bazy danych Cosmos DB, jest równoległe z usługą Azure Functions. Te dwa środowiska bezserwerowe dobrze ze sobą współpracują i są idealne do dynamicznych, niewielkich ilości aplikacji sterowanych zdarzeniami. Bezserwerowa baza danych Cosmos DB może szybko przyspieszyć od zera do 5000 jednostek żądań na sekundę, więc jeśli piszesz kod, który używa funkcji do śledzenia warunków błędów lub innych alertów, jest to opcja szybkiego gromadzenia i przechowywania danych.

Firma Microsoft zaleca używanie go jako części środowiska programistycznego, w którym przechwytujesz dane o żądaniach, których potrzebuje aplikacja na pełną skalę. Ponieważ jednostki żądań obsługi administracyjnej są czymś w rodzaju czarnej sztuki, implementacja bezserwerowa działająca z całym kodem w bazie danych jest użytecznym narzędziem programistycznym. Możesz skonfigurować środowisko operacyjne, uruchomić testy, przechwycić liczbę używanych żądań, a następnie użyć tych danych do zapewnienia przepływności dla wdrożenia produkcyjnego.

Zrozumienie ograniczeń bezserwerowych

Istnieją ograniczenia dotyczące korzystania z bezserwerowego konta Cosmos DB. Być może najważniejsze jest to, że nie masz dostępu do wdrożeń wieloregionowych, ponieważ konta bezserwerowe działają tylko w jednym regionie. To ograniczenie ma sens: implementacje Multiregion Cosmos DB wymagają wielu wystąpień działających w tym samym czasie w celu replikacji i spójności między regionami. Jeśli wystąpienia bezserwerowe działają tylko wtedy, gdy przetwarzają żądania, nie ma gwarancji, że inny region będzie w trybie online, aby obsłużyć replikację. W rezultacie wprowadzono zmiany w celu poziomu usługi Cosmos DB dla wystąpień bezserwerowych, przy czym oczekiwany czas zapisu wynosi 30 ms lub mniej i odczytuje 10 ms lub mniej.

Drugie ograniczenie klucza to maksymalnie 5000 jednostek żądań na sekundę. Powinno to wystarczyć w przypadku większości implementacji prostych lub programistycznych, ale wymaga pilnowania aplikacji i gotowości do przełączenia się na aprowizowane wystąpienie Cosmos DB, jeśli regularnie przekraczasz swoje limity. Jednocześnie każdy kontener bezserwerowy może przechowywać tylko 50 GB danych i indeksów. Firma Microsoft udostępnia narzędzia w Azure Portal ułatwiające monitorowanie operacji, a także w Azure Monitor.

Dodanie opcji bezserwerowej do Cosmos DB odpowiada na wiele pytań dotyczących kosztów. W przypadku scenariuszy o niskim zużyciu, w których nie potrzebujesz globalnego zasięgu, powinien to być pierwszy wybór. Przejdź do korzystania z aprowizowanej instancji przepływności tylko wtedy, gdy jesteś w stanie zrozumieć wzorzec żądania aplikacji i możesz odpowiednio budżetować.