Netflix crea una plataforma confiable y escalable con fuentes de eventos, MQTT y Alpaca-Kafka
Netflix publicó recientemente una publicación en el blog contando cómo construyó una plataforma de administración de dispositivos confiable usando un MQTT-Residencia en adquisición del evento implementación. Netflix usa su solución para escalar Apache Kafka, Alpaca-Kafka y CucarachaDB.
La plataforma de administración de dispositivos de Netflix es un sistema que administra los dispositivos utilizados para probar automáticamente sus aplicaciones. Ingenieros de Netflix Benson Ma y Alok Ahuja describe el viaje desde el principio:
El procesamiento de las transmisiones de Kafka puede ser difícil de realizar correctamente. (…) Afortunadamente, las primitivas proporcionadas por Akka Streams y Alpaca-Kafka nos permiten lograr precisamente eso, ya que podemos crear soluciones de transmisión que coincidan con los flujos de trabajo comerciales que utilizamos al tiempo que aumentamos la productividad del desarrollador en la creación y el mantenimiento de esas soluciones. Con un procesador basado en Alpaca-Kafka (…), hemos asegurado la tolerancia a fallas en el lado del consumidor de la capa de control, que es clave para permitir una conexión precisa y confiable de los modos de dispositivo en la Plataforma de administración de dispositivos.
(…) La confiabilidad de la plataforma y su capa de control se basa en un trabajo significativo realizado en varias áreas, incluido el transporte MQTT, la autenticación y autorización, y el control de sistemas. (…) Como resultado de este trabajo, podemos esperar que la Plataforma de administración de dispositivos continúe escalando a una carga de trabajo creciente con el tiempo a medida que incorporamos más y más dispositivos en nuestros sistemas.
El siguiente diagrama ilustra la arquitectura.
Fuente: https://netflixtechblog.com/towards-a-reliable-device-management-platform-4f86230ca623
La computadora integrada del entorno de automatización de referencia local (RAE) se conecta a varios dispositivos bajo prueba (DUT). El servicio de registro local es responsable de detectar, implementar y mantener todos los dispositivos en el RAE. A medida que los atributos y las propiedades del dispositivo cambian con el tiempo, guarda estos cambios en el registro local y los publica simultáneamente en la capa de control basada en la nube. Además de los cambios de atributos, el registro local publica una instantánea completa del registro del dispositivo a intervalos regulares. Estos eventos de puntos de control permiten a los consumidores reconstruir más rápidamente el estado de la fuente de datos al tiempo que evitan la ausencia de una actualización.
Las actualizaciones se lanzan a la nube mediante MQTT. MQTT es un protocolo de comunicación IoT (Internet of Things) estándar de OASIS. Es una transmisión de comunicación de publicación / suscripción liviana pero confiable que es ideal para conectar dispositivos remotos con un espacio de código pequeño y un ancho de banda de red mínimo. El corredor de MQTT es responsable de recibir, filtrar y enviar todos los mensajes a los clientes suscritos.
Netflix usa Apache Kafka en toda la organización. Por lo tanto, el puente convierte los mensajes MQTT en registros de Kafka. Establece la clave de guardado para el asunto MQTT al que está asignado el mensaje. Ma y Ahuja describen que “debido a que las actualizaciones de hardware publicadas en MQTT incluyen device_session_id En este tema, todas las actualizaciones de información del dispositivo para una sesión de hardware en particular se muestran de manera efectiva en la misma sección de Kafka, lo que nos brinda un orden de mensajes bien definido para el consumo “.
El registro en la nube recibe los mensajes publicados, los procesa y envía los datos materializados a un almacén de datos compatible con CockroachDB. CockroachDB es una implementación de una clase de sistemas RDBMS denominada NewSQL. Ma y Ahuja explican la elección de Netflix:
Se eligió CockroachDB para el repositorio en segundo plano porque proporcionó características SQL y nuestro modelo de datos de registros de dispositivos se normalizó. Además, a diferencia de otras tiendas SQL, CockroachDB está diseñado para ser escalable horizontalmente desde el principio, lo que aborda nuestra preocupación sobre la capacidad de Cloud Registry para escalar a la cantidad de dispositivos conectados a la plataforma de administración de dispositivos.
El siguiente diagrama muestra el tubo de procesamiento de Kafka, que contiene el registro de nubes.
Fuente: https://netflixtechblog.com/towards-a-reliable-device-management-platform-4f86230ca623
Netflix consideró muchos marcos para implementar los tubos de procesamiento de transmisión descritos anteriormente. Este marco incluye Arroyos de Kafka, Spring KafkaListener, Reactores de proyecto, y Notable. Al final, eligió Alpaca-Kafka. El motivo de esta elección es que Alpaca-Kafka ofrece Bota de primavera integración con “control de flujo de grano fino, que incluye soporte automático de contrapresión y control de flujo”. Además, según Ma y Ahuja Bruja y Alpaca-Kafka son más livianos que las opciones y, debido a que son más maduros, los costos de mantenimiento son más bajos con el tiempo.
La implementación basada en Alpaca-Kafka reemplazó a la implementación anterior basada en Spring KafkaListsener. Los medidores medidos en la nueva implementación de producción revelan que el propio soporte de contrapresión de Alpakka-Kafka puede escalar dinámicamente el consumo de Kafka. A diferencia de KafkaListener, Alpaca-Kafka no subutiliza ni sobreutiliza los mensajes de Kafka. La caída en los valores máximos de demora del consumidor después del lanzamiento también reveló que las capacidades de transmisión de Alpaca-Kafka y Aka funcionan bien a gran escala, incluso en descargas repentinas de mensajes.