Orleans poskytovatelé streamů

Streamy můžou mít různé podoby a formy. Některé datové toky můžou doručovat události přes přímá propojení TCP, zatímco jiné doručují události prostřednictvím trvalých front. Různé typy datových proudů můžou používat různé strategie dávkování, algoritmy ukládání do mezipaměti nebo postupy zpětného tlaku. Zprostředkovatelé streamu jsou body rozšiřitelnosti v Orleans modulu runtime streamování, které umožňují implementovat jakýkoli typ datového proudu a vyhnout se omezením streamovaných aplikací pouze na podmnožinu těchto možností chování. Tento bod rozšiřitelnosti je v duchu podobný Orleans poskytovatelům úložiště.

Poskytovatel streamu centra událostí Azure

Azure Event Hubs je plně spravovaná služba pro příjem dat v reálném čase, která dokáže přijímat a zpracovávat miliony událostí za sekundu. Je navržená tak, aby zpracovávala příjem dat s vysokou propustností, nízkou latencí z více zdrojů a následným zpracováním těchto dat několika příjemci.

Event Hubs se často používá jako základ větší architektury zpracování událostí, která slouží jako "front door" pro kanál událostí. Můžete ho použít k ingestování dat z různých zdrojů, včetně informačních kanálů sociálních médií, zařízení IoT a souborů protokolů. Jednou z klíčových výhod služby Event Hubs je schopnost horizontálně škálovat se, aby vyhověla potřebám i těch největších úloh na zpracování událostí. Je také vysoce dostupná a odolná proti chybám s více replikami dat distribuovanými napříč několika oblastmi Azure, aby se zajistila vysoká dostupnost.

NuGet balíček Microsoft.Orleans.Streaming.EventHubs obsahuje poskytovatele streamu Event Hubs.

Poskytovatel streamů Azure Queue (AQ)

Poskytovatel streamování Azure Queue (AQ) doručuje události prostřednictvím front Azure. Na straně producenta poskytovatel streamu AQ zařazuje události přímo do fronty Azure. Na straně spotřebitele spravuje poskytovatel datových proudů AQ sadu agentů pro načítání, kteří načítají události ze sady front Azure a doručují je do kódu aplikace, který je zpracovává. Můžete si představit agenty tahání jako distribuovanou "mikroslužbu" — rozdělenou, vysoce dostupnou a pružnou distribuovanou komponentu. Tahací agenti běží uvnitř stejných sil, kam jsou hostována aplikační zrní. Proto není nutné spouštět samostatné role pracovníků Azure pro načítání z front. Modul Orleans runtime streamování plně spravuje existenci sběrných agentů, jejich správu, zpětného tlaku, vyvažování front mezi nimi a předání front od selhalého agenta jinému agentu. To vše je pro kód aplikace transparentní pomocí datových proudů.

Balíček NuGet Microsoft.Orleans.Streaming.AzureStorage obsahuje poskytovatele streamu Azure Queue Storage.

Adaptéry fronty

Různí poskytovatelé datových proudů, kteří doručují události přes odolné fronty, vykazují podobné chování a podléhají podobným implementacím. Proto poskytujeme obecnou rozšiřitelnost PersistentStreamProvider , která umožňuje připojit různé typy front, aniž byste museli psát úplně nového zprostředkovatele streamu od nuly. PersistentStreamProvider používá komponentu IQueueAdapter, která abstrahuje konkrétní podrobnosti implementace fronty a poskytuje prostředky pro zařazení do fronty a odebrání z fronty událostí. Logika uvnitř PersistentStreamProvider zpracovává všechno ostatní. Výše uvedený poskytovatel front Azure je také implementován tímto způsobem: jedná se o instanci PersistentStreamProvider, která používá AzureQueueAdapter.

Aspire integrace streamování

Aspire zjednodušuje Orleans konfiguraci streamování tím, že automaticky spravuje zřizování prostředků a připojení.

streamování Azure Queue Storage pomocí Aspire

Projekt AppHost (Program.cs):

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage");
var queues = storage.AddQueues("streaming");

var orleans = builder.AddOrleans("cluster")
    .WithClustering(builder.AddRedis("redis"))
    .WithStreaming("AzureQueueProvider", queues);

builder.AddProject<Projects.MySilo>("silo")
    .WithReference(orleans)
    .WithReference(queues);

builder.Build().Run();

Projekt Silo (Program.cs):

var builder = Host.CreateApplicationBuilder(args);

builder.AddServiceDefaults();
builder.AddKeyedAzureQueueServiceClient("streaming");
builder.UseOrleans();

builder.Build().Run();

Návod

Během místního vývoje Aspire automaticky používá emulátor Azurite pro Azure Queue Storage. V produkčních nasazeních se Aspire připojí k vašemu skutečnému účtu Azure Storage na základě konfigurace nasazení Azure.

Důležité

Musíte volat AddKeyedAzureQueueServiceClient , aby se klient fronty zaregistroval v kontejneru injektáže závislostí. Orleans Poskytovatelé streamování hledají prostředky podle jejich klíčových názvů služby – pokud tento krok přeskočíte, Orleans nebude možné vyřešit klienta fronty a vyvolá chybu řešení závislostí při běhu.

Streamování v paměti pro vývoj

Pro místní scénáře vývoje a testování můžete použít streamování v paměti, které nevyžaduje žádné externí závislosti:

Projekt AppHost (Program.cs):

var builder = DistributedApplication.CreateBuilder(args);

var orleans = builder.AddOrleans("cluster")
    .WithDevelopmentClustering()
    .WithMemoryStreaming("MemoryStreamProvider");

builder.AddProject<Projects.MySilo>("silo")
    .WithReference(orleans);

builder.Build().Run();

Projekt Silo (Program.cs):

var builder = Host.CreateApplicationBuilder(args);

builder.AddServiceDefaults();
builder.UseOrleans();

builder.Build().Run();

Výstraha

Datové proudy v paměti nejsou perzistentní a při restartování sila se ztratí. Streamování v paměti používejte jenom pro vývoj a testování – nikdy pro produkční úlohy, které vyžadují odolnost zpráv.

Kanály vysílání s využitím Aspire

Kanály vysílání poskytují jednoduchý mechanismus pub/sub pro vysílání zpráv všem odběratelům:

Projekt AppHost (Program.cs):

var builder = DistributedApplication.CreateBuilder(args);

var orleans = builder.AddOrleans("cluster")
    .WithDevelopmentClustering()
    .WithBroadcastChannel("BroadcastChannel");

builder.AddProject<Projects.MySilo>("silo")
    .WithReference(orleans);

builder.Build().Run();

Projekt Silo (Program.cs):

var builder = Host.CreateApplicationBuilder(args);

builder.AddServiceDefaults();
builder.UseOrleans();

builder.Build().Run();

Podrobnou dokumentaci k integraci Orleans a Aspire najdete v části integrace Orleans a Aspire.

Jednoduchý poskytovatel streamu zpráv

Jednoduchý poskytovatel toku zpráv, označovaný také jako SMS poskytovatel, doručuje události přes protokol TCP pomocí pravidelného Orleans zasílání zpráv typu grain. Vzhledem k tomu, že se události SMS doručují přes nespolehlivé odkazy TCP, sms nezaručuje spolehlivé doručování událostí a automaticky nesdílí neúspěšné zprávy pro streamy SMS. Ve výchozím nastavení volání OnNextAsync producenta vrátí Task, který reprezentuje stav zpracování příjemce datového proudu. To říká producentovi, jestli příjemce událost úspěšně přijal a zpracoval. Pokud tento úkol selže, může se producent rozhodnout odeslat stejnou událost znovu a dosáhnout spolehlivosti na úrovni aplikace. I když je doručování zpráv v rámci možností, samotné streamy SMS jsou spolehlivé. To znamená, že vazba odběratele na producenta prováděná Pub-Sub je plně spolehlivá.

Viz také