Udostępnij przez


Wzorce projektowe zestawienia zmian w usłudze Azure Cosmos DB for NoSQL

Źródło zmian usługi Azure Cosmos DB umożliwia efektywne przetwarzanie dużych zestawów danych przy użyciu dużych woluminów zapisu. Stanowi alternatywę dla wykonywania zapytań dotyczących całych zestawów danych w celu identyfikowania zmian. W tym artykule opisano typowe wzorce projektowe zestawienia zmian, ich kompromisy i ograniczenia ułatwiające tworzenie skalowalnych rozwiązań.

Scenariusze

Usługa Azure Cosmos DB jest idealna dla aplikacji IoT, gier, handlu detalicznego i rejestrowania operacyjnego. Typowym wzorcem projektowym w tych aplikacjach jest użycie zmian w danych w celu wyzwolenia innych działań. Te akcje obejmują:

  • Wyzwalanie powiadomienia lub wywołania interfejsu API po wstawieniu, zaktualizowaniu lub usunięciu elementu.
  • Przetwarzanie strumienia w czasie rzeczywistym dla IoT lub analizy danych operacyjnych.
  • Przenoszenie danych, takie jak synchronizowanie z pamięcią podręczną, aparatem wyszukiwania, magazynem danych lub zimnym magazynem.

Zestawienie zmian w usłudze Azure Cosmos DB umożliwia tworzenie wydajnych, skalowalnych rozwiązań dla tych wzorców, jak pokazano na poniższej ilustracji:

Diagram przedstawiający sposób, w jaki zestawienie zmian usługi Azure Cosmos DB obsługuje analizy w czasie rzeczywistym i scenariusze przetwarzania opartego na zdarzeniach.

Obliczenia zdarzeń i powiadomienia

Źródło zmian usługi Azure Cosmos DB upraszcza scenariusze wyzwalające powiadomienie lub wywołujące interfejs API na podstawie określonego zdarzenia. Użyj procesora zestawienia zmian , aby automatycznie sondować kontener pod kątem zmian i wywoływać zewnętrzny interfejs API dla każdego zapisu, aktualizacji lub usuwania.

Selektywne wyzwalanie powiadomienia lub wywoływanie interfejsu API na podstawie określonych kryteriów. Jeśli na przykład odczytujesz ze źródła zmian przy użyciu usługi Azure Functions, dodaj logikę do funkcji, aby wysłać powiadomienie tylko wtedy, gdy warunek zostanie spełniony. Mimo że kod funkcji platformy Azure jest wykonywany dla każdej zmiany, powiadomienie jest wysyłane tylko wtedy, gdy warunek zostanie spełniony.

Przetwarzanie strumienia w czasie rzeczywistym

Źródło zmian usługi Azure Cosmos DB umożliwia wykonywanie przetwarzania strumienia w czasie rzeczywistym na potrzeby IoT lub analizy danych operacyjnych w czasie rzeczywistym. Możesz na przykład odbierać i przechowywać dane zdarzeń z urządzeń, czujników, infrastruktury i aplikacji oraz przetwarzać te zdarzenia w czasie rzeczywistym przy użyciu platformy Spark. Na poniższej ilustracji przedstawiono sposób implementowania architektury lambda przy użyciu zestawienia zmian usługi Azure Cosmos DB:

Diagram przedstawiający potok lambda oparty na usłudze Azure Cosmos DB na potrzeby pozyskiwania i wykonywania zapytań.

W wielu przypadkach implementacje przetwarzania strumieniowego najpierw otrzymują dużą ilość przychodzących danych do tymczasowej kolejki komunikatów, takiej jak Azure Event Hubs lub Apache Kafka. Strumień zmian to świetna alternatywa ze względu na zdolność usługi Azure Cosmos DB do utrzymania wysokiego tempa przyjmowania danych z gwarantowanym niskim opóźnieniem przy odczycie i zapisie.

Stan trwały danych

Dane zapisane w usłudze Azure Cosmos DB są wyświetlane w kanale zmian. W trybie najnowszej wersji dane pozostają w kanale zmian do momentu usunięcia. Kolejki komunikatów zwykle mają maksymalny okres przechowywania. Na przykład usługa Azure Event Hubs oferuje maksymalny czas przechowywania danych wynoszący 90 dni.

Możliwość wykonywania zapytań

Oprócz odczytywania ze źródła zmian kontenera usługi Azure Cosmos DB uruchom zapytania SQL dotyczące danych przechowywanych w usłudze Azure Cosmos DB. Kanał zmian nie jest duplikacją danych, które są już w kontenerze, lecz po prostu innym mechanizmem odczytywania danych. W związku z tym, jeśli odczytujesz dane ze źródła zmian, dane są zawsze zgodne z zapytaniami tego samego kontenera usługi Azure Cosmos DB.

Wysoka dostępność

Usługa Azure Cosmos DB zapewnia do 99,999% dostępności odczytu i zapisu. W przeciwieństwie do wielu kolejek komunikatów dane usługi Azure Cosmos DB mogą być globalnie dystrybuowane i konfigurowane przy użyciu celu czasu odzyskiwania (RTO) zera.

Po przetworzeniu elementów w kanale informacyjnym zmian utwórz zmaterializowany widok i utrwali zagregowane wartości z powrotem w usłudze Azure Cosmos DB. Na przykład użyj zestawienia zmian usługi Azure Cosmos DB, aby zaimplementować rankingi w czasie rzeczywistym na podstawie wyników z ukończonych gier.

Przenoszenie danych

Odczyt z zestawienia zmian na potrzeby przenoszenia danych w czasie rzeczywistym.

Na przykład kanał informacyjny zmian umożliwia wydajne wykonywanie następujących zadań:

  • Aktualizowanie pamięci podręcznej, indeksu wyszukiwania lub magazynu danych przy użyciu danych przechowywanych w usłudze Azure Cosmos DB.

  • Przeprowadź migracje bez przestojów do innego konta usługi Azure Cosmos DB lub do innego kontenera usługi Azure Cosmos DB, który ma inny klucz partycji logicznej.

  • Implementowanie warstw danych na poziomie aplikacji i archiwizowanie. Na przykład przechowywanie "gorących danych" w usłudze Azure Cosmos DB i starzenie się "zimnych danych" do innych systemów magazynowania, takich jak Azure Blob Storage.

Jeśli musisz zdenormalizować dane między partycjami i kontenerami, możesz odczytać ze strumienia zmian swojego kontenera i użyć tego jako źródła do replikacji danych. Replikacja danych w czasie rzeczywistym za pomocą zestawienia zmian gwarantuje tylko spójność ostateczną. Możesz monitorować , jak bardzo procesor strumienia zmian pozostaje w tyle w przetwarzaniu zmian w kontenerze usługi Azure Cosmos DB.

Określanie źródła zdarzeń

Wzorzec określania źródła zdarzeń używa magazynu tylko do dołączania do rejestrowania pełnej serii akcji na danych. Usługa Azure Cosmos DB jako źródło zmian to doskonały wybór jako centralny magazyn danych w architekturach opartych na źródłach zdarzeń, gdzie całe przetwarzanie danych jest modelowane jako zapisy (bez aktualizacji ani usuwania). W takim przypadku każdy zapis w usłudze Azure Cosmos DB jest „zdarzeniem”, więc istnieje pełny rekord przeszłych zdarzeń w strumieniu zmian. Typowe zastosowania zdarzeń publikowanych przez centralny magazyn zdarzeń to utrzymywanie zmaterializowanych widoków lub integrowanie z systemami zewnętrznymi. Ponieważ nie ma limitu czasu przechowywania w trybie najnowszej wersji zestawienia zmian, możesz odtworzyć wszystkie wcześniejsze zdarzenia, odczytując od początku zestawienia zmian kontenera usługi Azure Cosmos DB. Możesz nawet mieć wielu odbiorców kanału zmian subskrybowanych na ten sam kanał zmian kontenera.

Usługa Azure Cosmos DB jest doskonałym centralnym magazynem danych trwałym tylko do dołączania we wzorcu określania źródła zdarzeń ze względu na jej mocne strony w zakresie skalowalności poziomej i wysokiej dostępności. Ponadto procesor zestawienia zmian oferuje gwarancję "co najmniej raz" , zapewniając, że nie przegapisz przetwarzania żadnych zdarzeń.

Bieżące ograniczenia

Kanał informacyjny zmian ma wiele trybów, z których każdy ma ważne ograniczenia, które należy zrozumieć. Istnieje kilka obszarów, które należy wziąć pod uwagę podczas projektowania aplikacji, która używa zestawienia zmian w trybie najnowszej wersji lub wszystkich wersji i usuwa tryb.

Aktualizacje pośrednie

W najnowszym trybie wersji tylko najnowsza zmiana dla określonego elementu jest uwzględniana w strumieniu zmian. Podczas przetwarzania zmian odczytasz najnowszą dostępną wersję elementu. Jeśli w krótkim czasie istnieje wiele aktualizacji tego samego elementu, możliwe jest pominięcie przetwarzania aktualizacji pośrednich. Aby odtworzyć poszczególne aktualizacje elementu, przemodeluj te aktualizacje jako serię zapisów lub użyj wszystkich wersji i trybu usuwania.

Usuń

Tryb najnowszej wersji zestawienia zmian nie przechwytuje usuwania. Po usunięciu elementu z kontenera element zostanie usunięty z zestawienia zmian. Najczęstszą metodą obsługi operacji usuwania jest dodanie znacznika nietrwałego do usuniętych elementów. Możesz dodać właściwość o nazwie deleted i ustawić ją na true w momencie usunięcia. Ta aktualizacja dokumentu pojawia się w strumieniu zmian. Możesz ustawić czas wygaśnięcia (TTL) dla tego elementu, aby można było go automatycznie usunąć później.

Przechowywanie

Kanał informacyjny zmian w trybie najnowszej wersji ma nieograniczone przechowywanie. Tak długo, jak element istnieje w kontenerze, jest dostępny w kanale informacyjnym zmian.

Gwarantowana kolejność

Wszystkie tryby zestawienia zmian mają gwarantowaną kolejność w ramach wartości klucza partycji, ale nie między wartościami klucza partycji. Należy wybrać klucz partycji, który daje gwarancję sensownej kolejności.

Rozważmy aplikację handlu detalicznego, która używa wzorca projektowania określania źródła zdarzeń. W tej aplikacji różne akcje użytkownika to "zdarzenia", które są modelowane jako zapisy w usłudze Azure Cosmos DB. Wyobraź sobie, że niektóre przykładowe zdarzenia wystąpiły w następującej sekwencji:

  1. Klient dodaje element A do koszyka zakupów.
  2. Klient dodaje element B do koszyka zakupów.
  3. Klient usuwa element A z koszyka.
  4. Klient finalizuje zakupy, a zawartość koszyka jest wysyłana.

Zmaterializowany widok bieżącej zawartości koszyka zakupów jest utrzymywany dla każdego klienta. Ta aplikacja musi upewnić się, że te zdarzenia są przetwarzane w kolejności, w której występują. Jeśli na przykład wyewidencjonowanie koszyka miało zostać przetworzone przed usunięciem elementu A, prawdopodobnie element A wysłany do klienta zamiast elementu B klient chciał. Aby upewnić się, że te cztery zdarzenia są przetwarzane w kolejności, powinny należeć do tej samej wartości klucza partycji. Jeśli wybierzesz username jako wartość (każdy klient ma unikalną nazwę użytkownika) klucza partycji, możesz zagwarantować, że te zdarzenia pojawią się w kanale informacyjnym zmian w tej samej kolejności, w jakiej są zapisywane w usłudze Azure Cosmos DB.

Przykłady

Oto rzeczywiste przykłady kodu zestawienia zmian dla najnowszego trybu wersji, który wykracza poza zakres podanych przykładów: