Integrace služby Event Hubs s bezserverovými funkcemi v Azure

Azure Event Hubs
Azure Functions
Azure Monitor

Řešení využívající Azure Event Hubs společně s Azure Functions těží z bezserverové architektury, která je škálovatelná, nákladově efektivní a schopná zpracovávat velké objemy dat téměř v reálném čase. I když tyto služby bezproblémově spolupracují, existuje mnoho funkcí, nastavení a záludností, které jejich vztah zkompilují. Tento článek obsahuje pokyny, jak efektivně využít výhod této integrace tím, že zdůrazníte klíčové aspekty a techniky z hlediska výkonu, odolnosti, zabezpečení, pozorovatelnosti a škálování.

Základní koncepty služby Event Hubs

Azure Event Hubs je vysoce škálovatelná služba pro zpracování událostí, která může přijímat miliony událostí za sekundu. Než se ponoříte do vzorů a osvědčených postupů pro integraci Azure Functions, je nejlepší porozumět základním komponentám služby Event Hubs.

Následující diagram znázorňuje architekturu zpracování datových proudů služby Event Hubs:

Architektura služby Event Hubs

Události

Událost je oznámení nebo změna stavu, která je reprezentována jako skutečnost, která se stala v minulosti. Události jsou neměnné a trvalé v centru událostí, které se v systému Kafka označuje také jako téma. Centrum událostí se skládá z jednoho nebo několika oddílů.

Oddíly

Pokud odesílatel nezadá oddíl, přijaté události se distribuují napříč oddíly v centru událostí. Každá událost je napsaná přesně v jednom oddílu a není vícenásobně přetypovaná napříč oddíly. Každý oddíl funguje jako protokol, ve kterém se záznamy zapisují ve vzoru jen pro doplňování. Analogie protokolu potvrzení se často používá k popisu povahy způsobu, jakým se události přidávají na konec sekvence v oddílu.

Zápis do oddílů

Pokud se používá více než jeden oddíl, umožňuje používat paralelní protokoly ze stejného centra událostí. Toto chování poskytuje více stupňů paralelismu a zvyšuje propustnost pro uživatele.

Spotřebitelé a skupiny uživatelů

Oddíl může být využíván více než jedním příjemcem, přičemž každý z nich čte a spravuje své vlastní posuny.

Příjemci oddílů

Služba Event Hubs má koncept skupin příjemců, který umožňuje, aby každá z aplikací využívajících více uživatelů měla samostatné zobrazení streamu událostí a četla datový proud nezávisle vlastním tempem a s vlastním posunem.

Další informace najdete v tématu Podrobné informace o konceptech a funkcích služby Event Hubs.

Využívání událostí s Azure Functions

Azure Functions podporuje vazby triggerů a výstupů pro službu Event Hubs. Tato část popisuje, jak Azure Functions reagovat na události odeslané do streamu událostí centra událostí pomocí triggerů.

Každá instance funkce aktivované službou Event Hubs je podporována jednou instancí Třídy EventProcessorHost . Trigger (využívající službu Event Hubs) zajišťuje, že zapůjčení v daném oddílu může získat pouze jedna instance EventProcessorHost .

Představte si například centrum událostí s následujícími charakteristikami:

  • 10 oddílů.
  • 1 000 událostí distribuovaných rovnoměrně ve všech oddílech s různým počtem zpráv v každém oddílu.

Když je funkce poprvé povolená, existuje pouze jedna instance funkce. Zavoláme první instanci Function_1funkce . Function_1 má jednu instanci Třídy EventProcessorHost , která má zapůjčení všech 10 oddílů. Tato instance načítá události z oddílů 1–10. Od tohoto okamžiku dojde k jedné z následujících situací:

  • Nové instance funkcí nejsou potřeba: Function_1 mohou zpracovat všech 1 000 událostí před tím, než se logika škálování funkcí projeví. V tomto případě zpracovává všech 1 000 zpráv .Function_1

    Jedna instance služby Event Hubs a Functions

  • Přidá se další instance funkce: Škálování na základě událostí nebo jiná automatizovaná nebo ruční logika může určit, že obsahuje více zpráv, Function_1 než může zpracovat, a pak vytvoří novou instanci aplikace funkcí (Function_2). Tato nová funkce má také přidruženou instanci Třídy EventProcessorHost. Vzhledem k tomu, že podkladové centrum událostí zjistí, že se nová instance hostitele pokouší číst zprávy, vyrovnává zatížení oddílů mezi instancemi hostitele. Například oddíly 1–5 mohou být přiřazeny a Function_1 oddíly 6–10 k Function_2.

    Event Hubs a Functions se dvěma instancemi

  • Přidá se n více instancí funkcí: škálování na základě událostí nebo jiná automatizovaná nebo ruční logika určuje, že se Function_1Function_2 vytvoří nové Function_N instance aplikace funkcí a obsahují více zpráv, než mohou zpracovat. Instance se vytvářejí do bodu, kde N je roven nebo větší než počet oddílů centra událostí. V našem příkladu služba Event Hubs opět vyrovnává zatížení oddílů, v tomto případě napříč instancemi Function_1...Function_10.

    Event Hubs a Functions s více instancemi

S tím, jak dochází ke škálování, může být počet instancí N větší než počet oddílů centra událostí. K této situaci může dojít, když škálování řízené událostmi stabilizuje počty instancí nebo protože jiná automatizovaná nebo ruční logika vytvořila více instancí než oddílů. V tomto případě instance EventProcessorHost získají zámky pouze na oddíly, jakmile budou k dispozici z jiných instancí, protože v daném okamžiku může k oddílům, na které má zámky, přistupovat nebo číst pouze jedna instance funkce ze stejné skupiny příjemců.

Po dokončení provádění všech funkcí (s chybami nebo bez chyb) se do přidruženého účtu úložiště přidají kontrolní body. Pokud je kontrolní bod úspěšný, všech 1 000 zpráv se už nikdy nenačte.

Dynamické škálování na základě událostí je možné s plány Consumption a Premium Azure. Aplikace funkcí hostované v Kubernetes můžou také využívat škálovací nástroj KEDA pro službu Event Hubs. Škálování na základě událostí v současné době není možné, pokud je aplikace funkcí hostovaná v plánu Dedicated (App Service), který vyžaduje, abyste na základě vaší úlohy určili správný počet instancí.

Další informace najdete v tématech o Azure Event Hubs vazbách pro Azure Functions a triggeru Azure Event Hubs pro Azure Functions.

Přispěvatelé

Tento článek spravuje Microsoft. Původně ji napsali následující přispěvatelé.

Hlavní autor:

Pokud chcete zobrazit neveřejné profily LinkedIn, přihlaste se k LinkedInu.

Další kroky