Escalado con Event Hubs
Hay dos factores que influyen en el escalado con Event Hubs.
- Unidades de rendimiento (nivel estándar) o unidades de procesamiento (nivel prémium)
- Particiones
Unidades de procesamiento
La capacidad de procesamiento de Event Hubs se controla mediante unidades de procesamiento. Las unidades de procesamiento son unidades de capacidad adquiridas previamente. Una sola unidad de procesamiento le permite:
- Entrada: hasta 1 MB por segundo o 1000 eventos por segundo, lo que ocurra primero.
- Salida: hasta 2 MB por segundo o 4096 eventos por segundo.
Si supera la capacidad de las unidades de procesamiento adquiridas, la entrada se limitará y Event Hubs iniciará una excepción ServerBusyException. La salida no produce excepciones de limitación, pero sigue estando limitada a la capacidad de las unidades de procesamiento adquiridas. Si recibe excepciones de tasa de publicación o espera ver una salida superior, compruebe cuántas unidades de rendimiento adquirió para el espacio de nombres. Puede administrar las unidades de procesamiento en la página Escala de los espacios de nombres en Azure Portal. También puede administrar unidades de procesamiento mediante programación con las API de Event Hubs.
Las unidades de procesamiento se adquieren previamente y se facturan por hora. Cuando se adquieren, las unidades de procesamiento se facturan durante un período mínimo de una hora. Se pueden comprar hasta 40 unidades de procesamiento para un espacio de nombres de Event Hubs y compartir entre todos los centros de eventos del espacio de nombres.
La característica de inflado automático de Event Hubs escala verticalmente y de forma automática mediante el aumento del número de unidades de procesamiento para responder a las necesidades de utilización. Al aumentar las unidades de rendimiento, se evitan escenarios de limitación en los que nos encontramos con:
- Velocidades de entrada de datos que superan las unidades de rendimiento establecidas.
- Velocidades de solicitud de salida de datos que superan las unidades de rendimiento establecidas.
El servicio Event Hubs aumenta el rendimiento cuando la carga aumenta más allá del umbral mínimo, sin que se produzca ningún problema de las solicitudes con errores de ServerBusy.
Para más información sobre la característica de inflado automático, consulte Escalado automático de las unidades de procesamiento.
Unidades de procesamiento
Event Hubs Premium proporciona un rendimiento superior y un mejor aislamiento en un entorno PaaS multiinquilino administrado. Los recursos de un nivel Premium están aislados en el nivel de CPU y memoria para que cada carga de trabajo de inquilino se ejecute en aislamiento. Este contenedor de recursos recibe el nombre de unidad de procesamiento (PU). Puede comprar 1, 2, 4, 6, 8, 10, 12 o16 unidades de procesamiento para cada espacio de nombres de Event Hubs Premium.
Lo que se pueda ingerir y transmitir con una unidad de procesamiento depende de varios factores, como los productores, los consumidores, la velocidad a la que se ingiere y procesa, etc.
Por ejemplo, el espacio de nombres de Event Hubs Premium con una unidad de procesamiento y un centro de eventos (100 particiones) puede ofrecer aproximadamente una capacidad básica de entrada de aproximadamente 5 a 10 MB/s y salida de 10 a 20 MB/s para cargas de trabajo de AMQP o Kafka.
Para saber cómo configurar las unidades de procesamiento para un espacio de nombres de nivel prémium, consulte Configuración de unidades de procesamiento.
Nota:
Para más información sobre las cuotas y los límites, consulte Cuotas y límites de Azure Event Hubs.
Particiones
Event Hubs organiza las secuencias de eventos que se envían a un centro de eventos en una o más particiones. A medida que llegan eventos más recientes, se agregan al final de esta secuencia.
Una partición puede considerarse como un registro de confirmación. Las particiones albergan datos de eventos que contienen la siguiente información:
- Cuerpo del evento
- Contenedor de propiedades definido por el usuario que describe el evento
- Metadatos como su desplazamiento en la partición, su número en la secuencia de secuencia
- Marca de tiempo del lado del servicio en la que se aceptó
Ventajas de usar particiones
Event Hubs está diseñado para ayudar en el procesamiento de grandes volúmenes de eventos y la creación de particiones ayuda a hacerlo de dos maneras:
- Aunque Event Hubs es un servicio PaaS, hay una realidad física debajo. El mantenimiento de un registro que conserva el orden de los eventos requiere que estos eventos se mantengan juntos en el almacenamiento subyacente y sus réplicas, y esto crea un límite máximo de rendimiento para este tipo de registro. La creación de particiones permite que se usen varios registros paralelos para el mismo centro de eventos y, por lo tanto, multiplicar la capacidad de rendimiento de entrada-salida (E/S) sin procesar disponible.
- Sus propias aplicaciones deben poder mantener el procesamiento del volumen de eventos que se envía a un centro de eventos. Esto puede ser complejo y requiere una capacidad de procesamiento en paralelo importante con escalabilidad horizontal. La capacidad de un único proceso para controlar eventos es limitada, por lo que se necesitan varios procesos. Las particiones son el modo en que la solución alimenta esos procesos y, además, garantiza que cada evento tenga un propietario del proceso claro.
Número de particiones
El número de particiones se especifica en el momento de crear un centro de eventos. Debe tener entre uno y el número máximo de particiones admitido para cada plan de tarifa. Para ver el límite del número de particiones para cada plan, consulte este artículo.
Se recomienda elegir al menos tantas particiones como espere necesitar durante la carga máxima de la aplicación para ese centro de eventos específico. En el caso de los niveles distintos de los niveles prémium y dedicado, no se puede cambiar el número de particiones de un centro de eventos después de su creación. En el caso de un centro de eventos en un nivel prémium o dedicado, puede aumentar el número de particiones después de su creación, pero no puede disminuirlo. La distribución de secuencias entre particiones cambiará cuando se realice como la asignación de claves de partición a cambios de particiones, por lo que debe intentar evitar estos cambios si el orden relativo de los eventos es importante en la aplicación.
Establecer el número de particiones en el valor máximo permitido es tentador, pero siempre debe tener en cuenta que los flujos de eventos deben estar estructurados de manera que se puedan aprovechar las ventajas de tener varias particiones. Si necesita conservar el orden absoluto en todos los eventos o solo en un puñado de subsecuencias, es posible que no pueda aprovechar las ventajas de tener muchas particiones. Además, muchas particiones hacen que el procesamiento sea más complejo.
No importa cuántas particiones haya en un centro de eventos en lo que respecta a los precios. Depende del número de unidades de precios (unidades de procesamiento (TU) para el nivel estándar, unidades de procesamiento (PU) para el nivel prémium y unidades de capacidad (CU) para el nivel dedicado) para el espacio de nombres o el clúster dedicado. Por ejemplo, un centro de eventos de nivel estándar con 32 particiones o con una partición generan exactamente el mismo costo cuando el espacio de nombres se establece en una capacidad de una TU. También puede escalar las TU o PU del espacio de nombres o las CU del clúster dedicado independientemente del número de particiones.
Como partición es un mecanismo de organización de datos que permite publicar y consumir datos de forma paralela. Se recomienda equilibrar las unidades de escalado (unidades de procesamiento para el nivel estándar, unidades de procesamiento para el nivel Premium o unidades de capacidad para el nivel dedicado) y las particiones para lograr una escala óptima. En general, se recomienda un rendimiento máximo de 1 MB/s por partición. Por lo tanto, una regla general para calcular el número de particiones sería dividir el rendimiento máximo esperado por 1 MB/s. Por ejemplo, si el caso de uso requiriese 20 MB/s, se recomienda elegir al menos 20 particiones para lograr un rendimiento óptimo.
Sin embargo, si tuviese un modelo en el que la aplicación tuviera una afinidad con una partición determinada, aumentar el número de particiones no resultaría beneficioso. Para más información, vea Disponibilidad y coherencia.
Asignación de eventos a particiones
Puede usar una clave de partición para asignar datos de eventos entrantes a particiones concretas con fines de organización de los datos. La clave de partición es un valor proporcionado por el remitente que se pasa a un centro de eventos. Se procesa a través de una función hash estática que crea la asignación de la partición. Si no especifica una clave de partición cuando se publica un evento, se usa una asignación de tipo round robin.
El publicador de eventos solo conoce su clave de partición, no la partición en la que se publican los eventos. Este desacoplamiento de la clave y la partición evita al remitente la necesidad de conocer demasiado sobre el procesamiento de bajada. Una identidad única por cada dispositivo o usuario es una buena clave de partición, pero otros atributos como la geografía también pueden usarse para agrupar eventos relacionados en una única partición.
La especificación de una clave de partición permite mantener los eventos relacionados en la misma partición y en el orden exacto en el que han llegado. La clave de partición es una cadena que se deriva del contexto de la aplicación e identifica la interrelación de los eventos. Una secuencia de eventos identificados por una clave de partición es un flujo. Una partición es un almacén de registros multiplexado para muchos de estos flujos.
Nota:
Aunque puede enviar eventos directamente a las particiones, no se recomienda, sobre todo si le da una gran importancia a la alta disponibilidad. Esto degrada la disponibilidad de un centro de eventos en el nivel de partición. Para más información, consulte Disponibilidad y coherencia.
Pasos siguientes
Para más información acerca de Event Hubs, visite los vínculos siguientes: