Integrowanie usługi Event Hubs z funkcjami bezserwerowymi na platformie Azure

Azure Event Hubs
Azure Functions
Azure Monitor

Rozwiązania korzystające z Azure Event Hubs razem z Azure Functions korzystają z architektury bezserwerowej, która jest skalowalna, opłacalna i umożliwia przetwarzanie dużych ilości danych w czasie niemal rzeczywistym. Podobnie jak te usługi działają bezproblemowo, istnieje wiele funkcji, ustawień i zawiłości, które dodają złożoność do ich relacji. Ten artykuł zawiera wskazówki dotyczące efektywnego korzystania z tej integracji przez wyróżnienie kluczowych zagadnień i technik wydajności, odporności, zabezpieczeń, możliwości obserwowania i skalowania.

Podstawowe pojęcia dotyczące usługi Event Hubs

Azure Event Hubs to wysoce skalowalna usługa przetwarzania zdarzeń, która może odbierać miliony zdarzeń na sekundę. Przed rozpoczęciem pracy ze wzorcami i najlepszymi rozwiązaniami dotyczącymi integracji Azure Functions najlepiej zrozumieć podstawowe składniki usługi Event Hubs.

Na poniższym diagramie przedstawiono architekturę przetwarzania strumienia usługi Event Hubs:

Architektura usługi Event Hubs

Zdarzenia

Zdarzenie to zmiana powiadomienia lub stanu reprezentowana jako fakt, który wystąpił w przeszłości. Zdarzenia są niezmienne i utrwalane w centrum zdarzeń, nazywane również tematem na platformie Kafka. Centrum zdarzeń składa się z co najmniej jednej partycji.

Partycje

Gdy partycja nie jest określona przez nadawcę, odebrane zdarzenia są dystrybuowane między partycjami w centrum zdarzeń. Każde zdarzenie jest zapisywane w dokładnie jednej partycji i nie jest rzutowanie wielowymiarowe między partycjami. Każda partycja działa jako dziennik, w którym rekordy są zapisywane we wzorcu tylko do dołączania. Analogia dziennika zatwierdzeń jest często używana do opisywania charakteru dodawania zdarzeń na końcu sekwencji w partycji.

Zapisywanie w partycjach

Gdy jest używana więcej niż jedna partycja, umożliwia używanie dzienników równoległych z poziomu tego samego centrum zdarzeń. To zachowanie zapewnia wiele stopni równoległości i zwiększa przepływność dla użytkowników.

Konsumenci i grupy odbiorców

Partycja może być zużywana przez więcej niż jednego użytkownika, każdy odczyt z własnych przesunięć i zarządzać własnymi przesunięciami.

Użytkownicy partycji

Usługa Event Hubs ma koncepcję grup odbiorców, która umożliwia korzystanie z wielu aplikacji do każdego z nich ma oddzielny widok strumienia zdarzeń i odczytuje strumień niezależnie we własnym tempie i z własnymi przesunięciami.

Aby dowiedzieć się więcej, zobacz Szczegółowe omówienie pojęć i funkcji usługi Event Hubs.

Korzystanie ze zdarzeń przy użyciu Azure Functions

Azure Functions obsługuje powiązania wyzwalacza i danych wyjściowych dla usługi Event Hubs. W tej sekcji opisano, jak Azure Functions reaguje na zdarzenia wysyłane do strumienia zdarzeń centrum zdarzeń przy użyciu wyzwalaczy.

Każde wystąpienie wyzwalanej funkcji usługi Event Hubs jest wspierane przez pojedyncze wystąpienie klasy EventProcessorHost . Wyzwalacz (obsługiwany przez usługę Event Hubs) gwarantuje, że tylko jedno wystąpienie klasy EventProcessorHost może uzyskać dzierżawę dla danej partycji.

Rozważmy na przykład centrum zdarzeń o następujących cechach:

  • 10 partycji.
  • 1000 zdarzeń dystrybuowanych równomiernie wszystkich partycji z różną liczbą komunikatów w każdej partycji.

Po pierwszym włączeniu funkcji istnieje tylko jedno wystąpienie funkcji. Wywołajmy pierwsze wystąpienie Function_1funkcji . Function_1 ma jedno wystąpienie klasy EventProcessorHost , które przechowuje dzierżawę na wszystkich 10 partycjach. To wystąpienie odczytuje zdarzenia z partycji 1–10. Od tego momentu następuje jedna z następujących czynności:

  • Nowe wystąpienia funkcji nie są potrzebne: Function_1 może przetwarzać wszystkie 1000 zdarzeń, zanim logika skalowania funkcji zacznie obowiązywać. W takim przypadku wszystkie 1000 komunikatów są przetwarzane przez program Function_1.

    Pojedyncze wystąpienie usługi Event Hubs i functions

  • Dodano dodatkowe wystąpienie funkcji: skalowanie oparte na zdarzeniach lub inna automatyczna lub ręczna logika może określić, że Function_1 ma więcej komunikatów niż może przetworzyć, a następnie utworzyć nowe wystąpienie aplikacji funkcji (Function_2). Ta nowa funkcja ma również skojarzone wystąpienie klasy EventProcessorHost. Ponieważ bazowe centrum zdarzeń wykrywa, że nowe wystąpienie hosta próbuje odczytywać komunikaty, równoważenie obciążenia partycji między wystąpieniami hosta. Na przykład partycje 1-5 mogą być przypisane do Function_1 partycji i partycje 6–10 do Function_2.

    Usługa Event Hubs i funkcje z dwoma wystąpieniami

  • Dodano n więcej wystąpień funkcji: skalowanie oparte na zdarzeniach lub inna automatyczna lub ręczna logika określa, że oba Function_1Function_2 i mają więcej komunikatów niż mogą przetwarzać, tworzone są nowe wystąpienia aplikacji funkcji Function_N. Wystąpienia są tworzone do punktu, w którym N jest równe lub większe niż liczba partycji centrum zdarzeń. W naszym przykładzie usługa Event Hubs ponownie równoważy obciążenie partycji, w tym przypadku między wystąpieniami Function_1...Function_10.

    Usługa Event Hubs i funkcje z wieloma wystąpieniami

W miarę skalowania wystąpień N może być liczbą większą niż liczba partycji centrum zdarzeń. Taka sytuacja może wystąpić, gdy skalowanie sterowane zdarzeniami stabilizuje liczbę wystąpień lub dlatego, że inna zautomatyzowana lub ręczna logika utworzyła więcej wystąpień niż partycje. W takim przypadku wystąpienia klasy EventProcessorHost będą uzyskiwać blokady tylko na partycjach, ponieważ stają się dostępne z innych wystąpień, ponieważ w danym momencie tylko jedno wystąpienie funkcji z tej samej grupy odbiorców może uzyskiwać dostęp do/odczytywać z partycji, na których ma blokady.

Po zakończeniu wykonywania wszystkich funkcji (z błędami lub bez tych błędów) punkty kontrolne są dodawane do skojarzonego konta magazynu. Po pomyślnym zakończeniu sprawdzania wszystkie 1000 komunikatów nigdy nie zostaną ponownie pobrane.

Dynamiczne skalowanie oparte na zdarzeniach jest możliwe w przypadku planów Użycia i Premium platformy Azure. Aplikacje funkcji hostowanych na platformie Kubernetes mogą również korzystać z usługi KEDA scaler dla usługi Event Hubs. Skalowanie oparte na zdarzeniach nie jest obecnie możliwe, gdy aplikacja funkcji jest hostowana w planie dedykowanej (App Service), co wymaga określenia odpowiedniej liczby wystąpień na podstawie obciążenia.

Aby dowiedzieć się więcej, zobacz Azure Event Hubs powiązania dla wyzwalacza Azure Functions i Azure Event Hubs dla Azure Functions.

Współautorzy

Ten artykuł jest obsługiwany przez firmę Microsoft. Pierwotnie został napisany przez następujących współautorów.

Główny autor:

Aby wyświetlić niepubliowe profile usługi LinkedIn, zaloguj się do serwisu LinkedIn.

Następne kroki