Aplicaciones y tareas de replicación de eventos con Azure Functions
Sugerencia
Para todas las tareas de replicación con estado en las que necesite tener en cuenta las cargas de los eventos y transformarlas, agregarlas, enriquecerlas o reducirlas, use Azure Stream Analytics en lugar de Azure Functions.
Como se explica en el artículo de federación entre regiones y replicación de eventos, la replicación sin estado de secuencias de eventos entre pares de Event Hubs y entre Event Hubs y otros orígenes y destinos de secuencias de eventos se apoya en Azure Functions.
Azure Functions es un entorno de ejecución escalable y confiable para configurar y ejecutar aplicaciones sin servidor, incluidas las tareas de federación y replicación de eventos.
En este artículo de información general va a obtener información sobre las capacidades integradas de Azure Functions para estas aplicaciones, sobre los bloques de código que puede adaptar y modificar para las tareas de transformación y sobre cómo configurar una aplicación de Azure Functions de modo que se integre perfectamente con Event Hubs y otros servicios de mensajería de Azure. Para gran parte de la información, este artículo apuntará a la documentación de Azure Functions.
¿Qué es una tarea de replicación?
Una tarea de replicación recibe eventos de un origen y los reenvía a un destino. La mayoría de las tareas de replicación reenvían eventos sin cambios y, como máximo, realizan asignaciones entre estructuras de metadatos si los protocolos de origen y de destino varían.
Normalmente, las tareas de replicación son sin estado, lo que significa que no comparten el estado u otros efectos secundarios en las ejecuciones secuenciales o en paralelo de una tarea. Esto también es cierto para el procesamiento por lotes y el encadenamiento, que se pueden implementar sobre el estado existente de una secuencia.
Esto hace que las tareas de replicación sean distintas de las de agregación, que suelen ser con estado, y son el dominio de los marcos y servicios de análisis como Azure Stream Analytics.
Aplicaciones y tareas de replicación en Azure Functions
En Azure Functions, una tarea de replicación se implementa mediante un desencadenador que adquiere mensajes de entrada de un origen configurado y un enlace de salida que reenvía los mensajes copiados desde el origen a un destino configurado.
Las tareas de replicación se implementan en la aplicación de replicación a través de los mismos métodos de implementación que cualquier Azure Functions aplicación. Puede configurar varias tareas en la misma aplicación.
Con Azure Functions Premium, varias aplicaciones de replicación pueden compartir el mismo grupo de recursos subyacente, denominado Plan de App Service. Esto significa que puede colocar fácilmente las tareas de replicación escritas en .NET con tareas de replicación escritas en Java, por ejemplo. Eso importará si desea aprovechar las ventajas de bibliotecas específicas, como Apache Camel, que solo están disponibles para Java y si son la mejor opción para una ruta de integración determinada, aunque normalmente prefiera un lenguaje y un tiempo de ejecución diferentes para las demás tareas de replicación.
Siempre que esté disponible, son preferibles los desencadenadores orientados por lotes a los que entregan eventos o mensajes individuales, y siempre debe obtener el evento completo o la estructura del mensaje en lugar de depender de las expresiones de enlace de parámetros de la función de Azure.
El nombre de la función debe reflejar el par de origen y destino que se va a conectar, y debe prefijar las referencias a las cadenas de conexión u otros elementos de configuración de los archivos de configuración de la aplicación con ese nombre.
Asignación de datos y metadatos
Una vez que haya decidido un par de desencadenador de entrada y enlace de salida, tendrá que realizar alguna asignación entre los distintos tipos de eventos o mensajes, a menos que el tipo del desencadenador y la salida sean los mismos.
En el caso de las tareas de replicación sencillas que copian mensajes entre Event Hubs y Service Bus, no es necesario escribir su propio código, sino que puede apoyarse en una biblioteca de utilidades proporcionada con los ejemplos de replicación.
Directiva de reintentos
Para evitar la pérdida de datos durante el evento de disponibilidad en cualquier lado de una función de replicación, debe configurar la directiva de reintentos para que sea sólida. Consulte la documentación de Azure Functions sobre reintentos para configurar la directiva de reintentos.
La configuración de directiva elegida en los proyectos de ejemplo del repositorio de ejemplo configura una estrategia de retroceso exponencial con intervalos de reintento de 5 segundos a 15 minutos, con reintentos infinitos para evitar la pérdida de datos.
La versión disponible con carácter general de las directivas de reintento para Azure Functions solo admite desencadenadores de Event Hubs y Temporizador. Se ha quitado la compatibilidad con la versión preliminar para el resto de desencadenadores.
Configuración de un host de aplicación de replicación
Una aplicación de replicación es un host de ejecución para una o varias tareas de replicación.
Se trata de una aplicación Azure Functions que está configurada para ejecutarse en el plan de consumo o en un plan de Azure Functions Premium (recomendado). Todas las aplicaciones de replicación deben ejecutarse en una identidad administrada asignada por el usuario o el sistema.
Las plantillas vinculadas Azure Resource Manager (ARM) crean y configuran una aplicación de replicación con lo siguiente:
- Una cuenta de Azure Storage para realizar un seguimiento del progreso de la replicación y de los registros.
- Una identidad administrada asignada por el sistema.
- Integración de Azure Monitor y Application Insights para supervisión.
Las aplicaciones de replicación que deben acceder a Event Hubs enlazadas a una red virtual de Azure (VNet) deben usar el plan Premium de Azure Functions y configurarse para asociarse a la misma VNet, que también es una de las opciones disponibles.
Implementar | Visualización | |
---|---|---|
Plan de consumo de Azure Functions | ||
Plan Premium de Azure Functions | ||
Plan Premium de Azure Functions con VNet |
Ejemplos
El repositorio de ejemplos contiene varias muestras de tareas de replicación que copian eventos entre centros de Event Hubs o entre entidades de Service Bus.
Para copiar datos de eventos entre centros de eventos, se usa un desencadenador de Event Hubs con un enlace de salida de Event Hubs:
[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);
}
Para copiar mensajes entre entidades de Service Bus, se usa el desencadenador de Service Bus y el enlace de salida:
[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);
}
Los métodos asistentes pueden facilitar la replicación entre Event Hubs y Service Bus:
Source | Destino | Punto de entrada |
---|---|---|
Event Hubs | Event Hubs | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToEventHub |
Event Hubs | Azure Service Bus | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToServiceBus |
Service Bus | Event Hubs | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToEventHub |
Azure Service Bus | Service Bus | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToServiceBus |
Supervisión
Para obtener información sobre cómo puede supervisar la aplicación de replicación, consulte la sección de supervisión de la documentación de Azure Functions.
Una herramienta visual especialmente útil para supervisar las tareas de replicación es el Mapa de aplicación de Application Insights, que se genera automáticamente a partir de la información de supervisión capturada y permite explorar la fiabilidad y el rendimiento de las transferencias de origen y destino de la tarea de replicación.
Para obtener información de diagnóstico inmediata, puede trabajar con la herramienta Live Metrics del portal, que proporciona una visualización de baja latencia de los detalles de registro.