Przetwarzanie bezserwerowe bazy danych przy użyciu usługi Azure Cosmos DB i Azure Functions

DOTYCZY: NoSQL

Przetwarzanie bezserwerowe polega na możliwości skupienia się na poszczególnych elementach logiki, które są powtarzalne i bezstanowe. Te elementy nie wymagają zarządzania infrastrukturą i zużywają zasoby tylko przez sekundy lub milisekundy, dla których są uruchamiane. Podstawowym elementem ruchu przetwarzania bezserwerowego są funkcje, które są udostępniane w ekosystemie platformy Azure przez Azure Functions. Aby dowiedzieć się więcej o innych środowiskach wykonywania bezserwerowych na platformie Azure, zobacz bezserwerowe na stronie platformy Azure .

Dzięki natywnej integracji między usługą Azure Cosmos DB i Azure Functions można tworzyć wyzwalacze bazy danych, powiązania wejściowe i powiązania wyjściowe bezpośrednio z konta usługi Azure Cosmos DB. Korzystając z Azure Functions i usługi Azure Cosmos DB, możesz tworzyć i wdrażać aplikacje bezserwerowe oparte na zdarzeniach z dostępem do zaawansowanych danych dla globalnej bazy użytkowników.

Omówienie

Usługa Azure Cosmos DB i Azure Functions umożliwiają integrowanie baz danych i aplikacji bezserwerowych w następujący sposób:

  • Utwórz wyzwalacz Azure Functions sterowany zdarzeniami dla usługi Azure Cosmos DB. Ten wyzwalacz opiera się na strumieniach zestawienia zmian w celu monitorowania kontenera usługi Azure Cosmos DB pod kątem zmian. Po wprowadzeniu jakichkolwiek zmian w kontenerze strumień zestawienia zmian jest wysyłany do wyzwalacza, który wywołuje funkcję platformy Azure.
  • Alternatywnie powiąż funkcję platformy Azure z kontenerem usługi Azure Cosmos DB przy użyciu powiązania wejściowego. Powiązania wejściowe odczytują dane z kontenera po wykonaniu funkcji.
  • Wiązanie funkcji z kontenerem usługi Azure Cosmos DB przy użyciu powiązania wyjściowego. Powiązania wyjściowe zapisują dane w kontenerze po zakończeniu działania funkcji.

Uwaga

Obecnie wyzwalacz Azure Functions, powiązania wejściowe i powiązania wyjściowe dla usługi Azure Cosmos DB są obsługiwane tylko do użytku z interfejsem API dla noSQL. W przypadku wszystkich innych interfejsów API usługi Azure Cosmos DB należy uzyskać dostęp do bazy danych z funkcji przy użyciu klienta statycznego dla interfejsu API.

Na poniższym diagramie przedstawiono każdą z tych trzech integracji:

Jak usługa Azure Cosmos DB i Azure Functions integrują się

Wyzwalacz Azure Functions, powiązanie danych wejściowych i powiązanie wyjściowe dla usługi Azure Cosmos DB mogą być używane w następujących kombinacjach:

  • Wyzwalacz Azure Functions dla usługi Azure Cosmos DB może być używany z powiązaniem wyjściowym z innym kontenerem usługi Azure Cosmos DB. Po wykonaniu akcji na elemencie w kanale informacyjnym zmian można zapisać go w innym kontenerze (zapisanie go w tym samym kontenerze, z którego pochodzi, skutecznie utworzy pętlę rekursywną). Możesz też użyć wyzwalacza Azure Functions dla usługi Azure Cosmos DB, aby skutecznie migrować wszystkie zmienione elementy z jednego kontenera do innego kontenera przy użyciu powiązania wyjściowego.
  • Powiązania wejściowe i powiązania wyjściowe dla usługi Azure Cosmos DB mogą być używane w tej samej funkcji platformy Azure. Działa to dobrze w przypadkach, gdy chcesz znaleźć pewne dane z powiązaniem wejściowym, zmodyfikować je w funkcji platformy Azure, a następnie zapisać je w tym samym kontenerze lub innym kontenerze po modyfikacji.
  • Powiązanie wejściowe z kontenerem usługi Azure Cosmos DB może być używane w tej samej funkcji co wyzwalacz Azure Functions dla usługi Azure Cosmos DB i może być również używane z powiązaniem wyjściowym lub bez tego powiązania. Możesz użyć tej kombinacji, aby zastosować aktualne informacje wymiany walut (ściągane z powiązaniem wejściowym do kontenera wymiany) do zestawienia zmian nowych zamówień w usłudze koszyka zakupów. Zaktualizowana suma koszyka z zastosowaną bieżącą konwersją walut można zapisać w trzecim kontenerze przy użyciu powiązania wyjściowego.

Przypadki zastosowań

W poniższych przypadkach użycia pokazano kilka sposobów, aby jak najlepiej wykorzystać dane usługi Azure Cosmos DB — łącząc dane z Azure Functions sterowanym zdarzeniami.

Przypadek użycia IoT — Azure Functions wyzwalacz i powiązanie wyjściowe dla usługi Azure Cosmos DB

W implementacjach IoT można wywołać funkcję po wyświetleniu światła silnika kontrolnego w połączonym samochodzie.

Implementacji: Używanie wyzwalacza Azure Functions i powiązania wyjściowego dla usługi Azure Cosmos DB

  1. Wyzwalacz Azure Functions dla usługi Azure Cosmos DB służy do wyzwalania zdarzeń związanych z alertami samochodowymi, takimi jak światło silnika kontrolnego przychodzącego w połączonym samochodzie.
  2. Gdy pojawi się światło aparatu kontrolnego, dane czujnika są wysyłane do usługi Azure Cosmos DB.
  3. Usługa Azure Cosmos DB tworzy lub aktualizuje nowe dokumenty danych czujnika, a następnie te zmiany są przesyłane strumieniowo do wyzwalacza Azure Functions dla usługi Azure Cosmos DB.
  4. Wyzwalacz jest wywoływany przy każdej zmianie danych do zbierania danych czujnika, ponieważ wszystkie zmiany są przesyłane strumieniowo za pośrednictwem zestawienia zmian.
  5. Warunek progu jest używany w funkcji do wysyłania danych czujnika do działu gwarancji.
  6. Jeśli temperatura jest również określoną wartością, alert jest również wysyłany do właściciela.
  7. Powiązanie wyjściowe funkcji aktualizuje rekord samochodu w innym kontenerze usługi Azure Cosmos DB, aby przechowywać informacje o zdarzeniu aparatu sprawdzania.

Na poniższej ilustracji przedstawiono kod napisany w Azure Portal dla tego wyzwalacza.

Tworzenie wyzwalacza Azure Functions dla usługi Azure Cosmos DB w Azure Portal

Przypadek użycia finansowego — wyzwalacz czasomierza i powiązanie wejściowe

W implementacjach finansowych można wywołać funkcję, gdy saldo konta bankowego spadnie w ramach określonej kwoty.

Implementacji: Wyzwalacz czasomierza z powiązaniem wejściowym usługi Azure Cosmos DB

  1. Za pomocą wyzwalacza czasomierza można pobrać informacje o saldie konta bankowego przechowywane w kontenerze usługi Azure Cosmos DB w odstępach czasu przy użyciu powiązania wejściowego.
  2. Jeśli saldo jest poniżej progu niskiego salda ustawionego przez użytkownika, wykonaj akcję z funkcji platformy Azure.
  3. Powiązanie wyjściowe może być integracją usługi SendGrid , która wysyła wiadomość e-mail z konta usługi do adresów e-mail zidentyfikowanych dla każdego z kont o niskim saldu.

Na poniższych obrazach pokazano kod w Azure Portal dla tego scenariusza.

Index.js plik wyzwalacza czasomierza dla scenariusza finansowego

Plik Run.csx wyzwalacza czasomierza dla scenariusza finansowego

Przypadek użycia gier — Azure Functions wyzwalacz i powiązanie wyjściowe dla usługi Azure Cosmos DB

W grach po utworzeniu nowego użytkownika możesz wyszukać innych użytkowników, którzy mogą je znać przy użyciu usługi Azure Cosmos DB dla języka Gremlin. Następnie możesz zapisać wyniki w usłudze Azure Cosmos DB lub bazie danych SQL w celu łatwego pobierania.

Implementacji: Używanie wyzwalacza Azure Functions i powiązania wyjściowego dla usługi Azure Cosmos DB

  1. Korzystając z bazy danych grafów usługi Azure Cosmos DB do przechowywania wszystkich użytkowników, możesz utworzyć nową funkcję z wyzwalaczem Azure Functions dla usługi Azure Cosmos DB.
  2. Za każdym razem, gdy zostanie wstawiony nowy użytkownik, wywołana jest funkcja, a następnie wynik jest przechowywany przy użyciu powiązania wyjściowego.
  3. Funkcja wysyła zapytanie do bazy danych grafu, aby wyszukać wszystkich użytkowników, którzy są bezpośrednio związani z nowym użytkownikiem i zwracają ten zestaw danych do funkcji.
  4. Te dane są następnie przechowywane w usłudze Azure Cosmos DB, co może następnie być łatwo pobierane przez dowolną aplikację frontonu, która pokazuje nowego użytkownika połączonego znajomych.

Przypadek użycia handlu detalicznego — wiele funkcji

W implementacjach handlu detalicznego, gdy użytkownik dodaje element do koszyka, masz teraz elastyczność tworzenia i wywoływania funkcji dla opcjonalnych składników potoku biznesowego.

Implementacji: Wiele wyzwalaczy Azure Functions na potrzeby nasłuchiwania jednego kontenera w usłudze Azure Cosmos DB

  1. Możesz utworzyć wiele Azure Functions, dodając wyzwalacze Azure Functions dla usługi Azure Cosmos DB do każdego — wszystkie te same źródła danych koszyka zakupów nasłuchują tego samego zestawienia zmian. Gdy wiele funkcji nasłuchuje tego samego zestawienia zmian, dla każdej funkcji jest wymagana nowa kolekcja dzierżaw. Aby uzyskać więcej informacji na temat kolekcji dzierżaw, zobacz Omówienie biblioteki procesora zestawienia zmian.
  2. Za każdym razem, gdy nowy element zostanie dodany do koszyka zakupów użytkowników, każda funkcja jest wywoływana niezależnie przez zestawienie zmian z kontenera koszyka zakupów.
    • Jedna funkcja może użyć zawartości bieżącego koszyka, aby zmienić wyświetlanie innych elementów, które użytkownik może zainteresować.

    • Inna funkcja może aktualizować sumy spisu.

    • Inna funkcja może wysyłać informacje o klientach dla niektórych produktów do działu marketingu, który wysyła im promocyjną pocztę.

      Każdy dział może utworzyć Azure Functions dla usługi Azure Cosmos DB, słuchając zestawienia zmian, i upewnij się, że nie opóźnią one krytycznych zdarzeń przetwarzania zamówień w procesie.

We wszystkich tych przypadkach użycia, ponieważ funkcja odłączyła samą aplikację, nie trzeba uruchamiać nowych wystąpień aplikacji przez cały czas. Zamiast tego Azure Functions uruchamia poszczególne funkcje w celu ukończenia dyskretnych procesów zgodnie z potrzebami.

Narzędzia

Natywna integracja między usługą Azure Cosmos DB i Azure Functions jest dostępna w Azure Portal i w programie Visual Studio.

Dlaczego warto wybrać integrację Azure Functions na potrzeby przetwarzania bezserwerowego?

Azure Functions zapewnia możliwość tworzenia skalowalnych jednostek pracy lub zwięzłych elementów logiki, które mogą być uruchamiane na żądanie bez aprowizowania infrastruktury lub zarządzania nią. Korzystając z Azure Functions, nie musisz tworzyć pełnowymiarowej aplikacji w celu reagowania na zmiany w bazie danych usługi Azure Cosmos DB, można tworzyć małe funkcje wielokrotnego użytku dla określonych zadań. Ponadto możesz również użyć danych usługi Azure Cosmos DB jako danych wejściowych lub wyjściowych funkcji platformy Azure w odpowiedzi na zdarzenia, takie jak żądania HTTP lub wyzwalacz o określonym czasie.

Usługa Azure Cosmos DB jest zalecaną bazą danych dla architektury przetwarzania bezserwerowego z następujących powodów:

  • Natychmiastowy dostęp do wszystkich danych: masz szczegółowy dostęp do każdej przechowywanej wartości, ponieważ usługa Azure Cosmos DB automatycznie indeksuje wszystkie dane domyślnie i natychmiast udostępnia te indeksy. Oznacza to, że możesz stale wykonywać zapytania, aktualizować i dodawać nowe elementy do bazy danych i mieć natychmiastowy dostęp za pośrednictwem Azure Functions.

  • Bez schematu. Usługa Azure Cosmos DB jest bez schematu — dzięki temu jest ona unikatowo w stanie obsłużyć wszystkie dane wyjściowe z funkcji platformy Azure. To podejście "obsługa niczego" ułatwia tworzenie różnych funkcji wyjściowych do usługi Azure Cosmos DB.

  • Skalowalna przepływność. Przepływność można skalować w górę i w dół natychmiast w usłudze Azure Cosmos DB. Jeśli masz setki lub tysiące zapytań usługi Functions i zapisujesz je w tym samym kontenerze, możesz skalować w górę jednostkę RU/s , aby obsłużyć obciążenie. Wszystkie funkcje mogą działać równolegle przy użyciu przydzielonych jednostek RU/s, a dane mają gwarancję spójności.

  • Replikacja globalna. Możesz replikować dane usługi Azure Cosmos DB na całym świecie , aby zmniejszyć opóźnienie, lokalizując dane znajdujące się najbliżej miejsca, w którym znajdują się użytkownicy. Podobnie jak w przypadku wszystkich zapytań usługi Azure Cosmos DB, dane z wyzwalaczy opartych na zdarzeniach są odczytywane z usługi Azure Cosmos DB najbliżej użytkownika.

Jeśli chcesz zintegrować się z Azure Functions do przechowywania danych i nie potrzebujesz indeksowania głębokiego lub jeśli musisz przechowywać załączniki i pliki multimedialne, wyzwalacz Azure Blob Storage może być lepszym rozwiązaniem.

Zalety Azure Functions:

  • Sterowane zdarzeniami. Azure Functions jest sterowany zdarzeniami i może nasłuchiwać zestawienia zmian z usługi Azure Cosmos DB. Oznacza to, że nie musisz tworzyć logiki nasłuchiwania. Wystarczy zwrócić uwagę na zmiany, których słuchasz.

  • Brak limitów. Funkcje są wykonywane równolegle, a usługa uruchamia się tak wiele, ile potrzebujesz. Należy ustawić parametry.

  • Dobre dla szybkich zadań. Usługa uruchamia nowe wystąpienia funkcji za każdym razem, gdy zdarzenie zostanie uruchomione i zamknie je zaraz po zakończeniu działania funkcji. Płacisz tylko za czas działania funkcji.

Jeśli nie masz pewności, czy usługa Flow, Logic Apps, Azure Functions lub zadania WebJob są najlepsze dla twojej implementacji, zobacz Wybieranie między usługami Flow, Logic Apps, Functions i WebJobs.

Następne kroki

Teraz połączmy usługę Azure Cosmos DB i Azure Functions w celu uzyskania rzeczywistych danych: