Gebeurtenisreplicatietaken en -toepassingen met Azure Functions
Tip
Gebruik Azure Stream Analytics in plaats van Azure Functions voor alle stateful replicatietaken waarbij u rekening moet houden met de nettoladingen van uw gebeurtenissen en transformatie, aggregeren, verrijken of verminderen.
Zoals uitgelegd in het artikel over gebeurtenisreplicatie en federatie tussen regio's , staatloze replicatie van gebeurtenisstromen tussen paren Event Hubs en tussen Event Hubs en andere gebeurtenisstroombronnen en doelen leunt op Azure Functions.
Azure Functions is een schaalbare en betrouwbare uitvoeringsomgeving voor het configureren en uitvoeren van serverloze toepassingen, waaronder gebeurtenisreplicatie en federatietaken.
In dit overzicht leert u meer over de ingebouwde mogelijkheden van Azure Functions voor dergelijke toepassingen, over codeblokken die u kunt aanpassen en wijzigen voor transformatietaken en over het configureren van een Azure Functions-toepassing, zodat deze in het ideale geval kan worden geïntegreerd met Event Hubs en andere Azure Messaging-services. Voor veel informatie verwijst dit artikel naar de Documentatie van Azure Functions.
Wat is een replicatietaak?
Een replicatietaak ontvangt gebeurtenissen van een bron en stuurt deze door naar een doel. De meeste replicatietaken sturen gebeurtenissen ongewijzigd door en voeren maximaal toewijzingen uit tussen metagegevensstructuren als de bron- en doelprotocollen verschillen.
Replicatietaken zijn over het algemeen staatloos, wat betekent dat ze geen status of andere neveneffecten delen voor opeenvolgende of parallelle uitvoeringen van een taak. Dat geldt ook voor batchverwerking en ketening, die beide kunnen worden geïmplementeerd boven op de bestaande status van een stream.
Dit maakt replicatietaken anders dan aggregatietaken, die over het algemeen stateful zijn en het domein zijn van analyseframeworks en -services zoals Azure Stream Analytics.
Replicatietoepassingen en -taken in Azure Functions
In Azure Functions wordt een replicatietaak geïmplementeerd met behulp van een trigger die invoerberichten verkrijgt van een geconfigureerde bron en een uitvoerbinding waarmee berichten die van de bron zijn gekopieerd naar een geconfigureerd doel worden doorgestuurd.
Replicatietaken worden geïmplementeerd in de replicatietoepassing via dezelfde implementatiemethoden als elke andere Azure Functions-toepassing. U kunt meerdere taken configureren in dezelfde toepassing.
Met Azure Functions Premium kunnen meerdere replicatietoepassingen dezelfde onderliggende resourcegroep delen, een App Service-plan genoemd. Dat betekent dat u eenvoudig replicatietaken kunt samenvoegen die zijn geschreven in .NET met replicatietaken die zijn geschreven in Java, bijvoorbeeld. Dat is belangrijk als u wilt profiteren van specifieke bibliotheken zoals Apache Camel die alleen beschikbaar zijn voor Java en als deze de beste optie zijn voor een bepaald integratiepad, ook al zou u liever een andere taal en runtime gebruiken voor uw andere replicatietaken.
Indien beschikbaar, moet u de voorkeur geven aan de batchgeoriënteerde triggers boven triggers die afzonderlijke gebeurtenissen of berichten leveren en moet u altijd de volledige gebeurtenis- of berichtstructuur verkrijgen in plaats van te vertrouwen op de parameterbindingsexpressies van Azure Function.
De naam van de functie moet overeenkomen met het paar bron- en doel waarmee u verbinding maakt. U moet verwijzingen naar verbindingsreeks s of andere configuratie-elementen in de toepassingsconfiguratiebestanden met die naam voorvoegsel gebruiken.
Toewijzing van gegevens en metagegevens
Nadat u een paar invoertriggers en uitvoerbindingen hebt gekozen, moet u een aantal toewijzingen uitvoeren tussen de verschillende gebeurtenis- of berichttypen, tenzij het type van uw trigger en de uitvoer hetzelfde is.
Voor eenvoudige replicatietaken die berichten kopiëren tussen Event Hubs en Service Bus, hoeft u niet uw eigen code te schrijven, maar kunt u leunen op een hulpprogrammabibliotheek die wordt geleverd met de replicatievoorbeelden.
Beleid voor opnieuw proberen
Als u gegevensverlies wilt voorkomen tijdens de beschikbaarheidsbeurtenis aan beide zijden van een replicatiefunctie, moet u het beleid voor opnieuw proberen zo configureren dat het robuust is. Raadpleeg de Documentatie van Azure Functions over nieuwe pogingen om het beleid voor opnieuw proberen te configureren.
De beleidsinstellingen die zijn gekozen voor de voorbeeldprojecten in de voorbeeldopslagplaats , configureren een exponentieel uitstelstrategie met tussenpozen van 5 seconden tot 15 minuten met oneindige nieuwe pogingen om gegevensverlies te voorkomen.
De algemeen beschikbare (GA)-versie van beleid voor opnieuw proberen voor Azure Functions biedt alleen ondersteuning voor Event Hubs en Timer-triggers. De preview-ondersteuning voor alle andere triggers is verwijderd.
Een replicatietoepassingshost instellen
Een replicatietoepassing is een uitvoeringshost voor een of meer replicatietaken.
Het is een Azure Functions-toepassing die is geconfigureerd voor uitvoering op het verbruiksabonnement of (aanbevolen) in een Azure Functions Premium-abonnement. Alle replicatietoepassingen moeten worden uitgevoerd onder een door het systeem toegewezen of door de gebruiker toegewezen beheerde identiteit.
Met de gekoppelde ARM-sjablonen (Azure Resource Manager) maakt en configureert u een replicatietoepassing met:
- Een Azure Storage-account voor het bijhouden van de voortgang van de replicatie en voor logboeken.
- Een door het systeem toegewezen beheerde identiteit.
- Integratie van Azure Monitor en Application Insights voor bewaking.
Replicatietoepassingen die toegang moeten hebben tot Event Hubs die zijn gebonden aan een virtueel Azure-netwerk (VNet), moeten gebruikmaken van het Azure Functions Premium-abonnement en worden geconfigureerd om te koppelen aan hetzelfde VNet. Dit is ook een van de beschikbare opties.
Implementeren | Visualiseren | |
---|---|---|
Azure Functions-verbruiksabonnement | ||
Azure Functions Premium-abonnement | ||
Azure Functions Premium-abonnement met VNet |
Voorbeelden
De opslagplaats met voorbeelden bevat verschillende voorbeelden van replicatietaken die gebeurtenissen kopiëren tussen Event Hubs en/of tussen Service Bus-entiteiten.
Voor het kopiëren van gebeurtenisgegevens tussen Event Hubs gebruikt u een Event Hubs-trigger met een Event Hubs-uitvoerbinding:
[FunctionName("telemetry")]
[ExponentialBackoffRetry(-1, "00:00:05", "00:05:00")]
public static Task Telemetry(
[EventHubTrigger("telemetry", ConsumerGroup = "$USER_FUNCTIONS_APP_NAME.telemetry", Connection = "telemetry-source-connection")] EventData[] input,
[EventHub("telemetry-copy", Connection = "telemetry-target-connection")] EventHubClient outputClient,
ILogger log)
{
return EventHubReplicationTasks.ForwardToEventHub(input, outputClient, log);
}
Voor het kopiëren van berichten tussen Service Bus-entiteiten gebruikt u de Service Bus-trigger en uitvoerbinding:
[FunctionName("jobs-transfer")]
[ExponentialBackoffRetry(-1, "00:00:05", "00:05:00")]
public static Task JobsTransfer(
[ServiceBusTrigger("jobs-transfer", Connection = "jobs-transfer-source-connection")] Message[] input,
[ServiceBus("jobs", Connection = "jobs-target-connection")] IAsyncCollector<Message> output,
ILogger log)
{
return ServiceBusReplicationTasks.ForwardToServiceBus(input, output, log);
}
Met de helpermethoden kunt u eenvoudig repliceren tussen Event Hubs en Service Bus:
Source | Target | Toegangspunt |
---|---|---|
Event Hubs | Event Hubs | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToEventHub |
Event Hubs | Service Bus | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToServiceBus |
Service Bus | Event Hubs | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToEventHub |
Service Bus | Service Bus | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToServiceBus |
Controleren
Raadpleeg de sectie bewaking van de Azure Functions-documentatie voor meer informatie over hoe u uw replicatie-app kunt bewaken.
Een bijzonder nuttig visueel hulpprogramma voor het bewaken van replicatietaken is het Application Insights-toepassingsoverzicht, dat automatisch wordt gegenereerd op basis van de vastgelegde bewakingsgegevens en waarmee u de betrouwbaarheid en prestaties van de bron- en doeloverdracht van de replicatietaak kunt verkennen.
Voor onmiddellijke diagnostische inzichten kunt u werken met het hulpprogramma Live Metrics Portal, dat een visualisatie met lage latentie van logboekdetails biedt.