Aplicaciones y tareas de replicación de mensajes

Como se explica en el artículo Replicación de mensajes y federación entre regiones, la replicación de las secuencias de mensajes entre pares de entidades de Service Bus y entre Service Bus y otros orígenes y destinos de mensajes generalmente 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 mensajes.

En esta página de información general, obtendrá información sobre las funciones 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 idealmente con Service Bus 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.

Desencadenador Output
Desencadenador de Azure Event Hubs Enlace de salida de Azure Event Hubs
Desencadenador de Azure Service Bus Enlace de salida de Azure Service Bus
Desencadenador de Azure IoT Hub Enlace de salida de Azure IoT Hub
Desencadenador de Azure Event Grid Enlace de salida de Azure Event Grid
Desencadenador Azure Queue Storage Enlace de salida de Azure Queue Storage
Desencadenador de Apache Kafka Enlace de salida de Apache Kafka
Desencadenador de RabbitMQ Enlace de salida de RabbitMQ
Enlace de salida de Azure Notification Hubs
Enlace de salida de Azure SignalR Service
Enlace de salida de Twilio SendGrid

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 Implementación en Azure Visualizar
Plan Premium de Azure Functions Implementación en Azure Visualizar
Plan Premium de Azure Functions con VNet Implementación en Azure Visualizar

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.

Pasos siguientes