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:
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.
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.
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_1
funkcji . 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 programFunction_1
.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 doFunction_1
partycji i partycje 6–10 doFunction_2
.Dodano n więcej wystąpień funkcji: skalowanie oparte na zdarzeniach lub inna automatyczna lub ręczna logika określa, że oba
Function_1
Function_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ąpieniamiFunction_1
...Function_10
.
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:
- David Barkol | Główny specjalista ds. rozwiązań GBB
Aby wyświetlić niepubliowe profile usługi LinkedIn, zaloguj się do serwisu LinkedIn.
Następne kroki
Powiązane zasoby
- Monitorowanie przetwarzania zdarzeń bezserwerowych zawiera wskazówki dotyczące monitorowania architektur opartych na zdarzeniach bezserwerowych.
- Przetwarzanie zdarzeń bezserwerowych to architektura referencyjna opisując typową architekturę tego typu, z przykładami kodu i omówieniem ważnych zagadnień.
- De-batching and filtering in serverless event processing with Event Hubs (Odsadanie i filtrowanie w przetwarzaniu zdarzeń bezserwerowych za pomocą usługi Event Hubs ) opisuje bardziej szczegółowo sposób działania tych fragmentów architektury referencyjnej.