Athrun Data Intelligence


Flex Consumption ofrece funciones de escalamiento rápido y de gran escalabilidad en un maniquí sin servidor y admite tiempos de ejecución de funciones prolongados, redes privadas, selección de tamaño de instancia y control de simultaneidad.

GitHub es el hogar de los desarrolladores de software del mundo, con más de 100 millones de desarrolladores y 420 millones de repositorios en total en toda la plataforma. Para que todo funcione de forma fluida y segura, GitHub recopila una enorme cantidad de datos a través de un flujo interno compuesto por varios componentes. Pero, aunque se diseñó para la tolerancia a fallos y la escalabilidad, el crecimiento continuo de GitHub llevó a la empresa a reevaluar el flujo para cerciorarse de que satisfaga las demandas actuales y futuras.

«Teníamos un problema de escalabilidad: actualmente, recopilamos rodeando de 700 terabytes de datos al día, que se utilizan en gran medida para detectar comportamientos maliciosos contra nuestra infraestructura y para la resolución de problemas. Este sistema interno estaba limitando nuestro crecimiento..”

—Stephan Miehe, director sénior de seguridad de la plataforma de GitHub

GitHub trabajó con su empresa matriz, Microsoft, para encontrar una decisión. Para procesar el flujo de eventos a escalera, el equipo de GitHub creó una aplicación de funciones que se ejecuta en Consumo flexible de Azure Functionsun plan publicado recientemente para su interpretación preliminar pública. Flex Consumption ofrece funciones de escalamiento rápido y de gran escalera en un maniquí sin servidor y admite tiempos de ejecución de funciones prolongados, redes privadas, selección de tamaño de instancia y control de concurrencia.

En una prueba fresco, GitHub sostuvo 1,6 millones de eventos por segundo utilizando una aplicación Flex Consumption activada desde un centro de eventos con restricciones de red.

«Lo que efectivamente nos importa es que la aplicación se amplíe o reduzca en función de la demanda. El consumo flexible de Azure Functions nos resulta muy atractivo correcto a su escalabilidad dinámica en función de la cantidad de mensajes que se ponen en pan dulce en Azure Event Hubs..”

—Stephan Miehe, director sénior de seguridad de la plataforma de GitHub

gráfico, histograma
En una prueba fresco, la nueva aplicación de funciones de GitHub procesó 1,6 millones de mensajes por segundo en el plan de consumo flexible de Azure Functions.

Una examen detrás

El problema de GitHub residía en una aplicación de transporte interna que organizaba el flujo entre los productores y consumidores de telemetría. La aplicación se implementó originalmente utilizando binarios basados ​​en Java y Centros de eventos de AzurePero a medida que comenzó a manejar hasta 460 gigabytes (GB) de eventos por día, la aplicación estaba alcanzando sus límites de diseño y su disponibilidad comenzó a degradarse.

Para obtener el mejor rendimiento, cada consumidor de la antigua plataforma necesitaba su propio entorno y un ajuste manual que consumía mucho tiempo. Por otra parte, el código colchoneta de Java era propenso a equivocarse y era difícil solucionar problemas, y el mantenimiento de esos entornos se estaba volviendo costoso a medida que aumentaba la sobrecarga computacional.

«No podíamos aceptar el aventura y los desafíos de escalabilidad de la decisión coetáneo.,« Miehe dice que él y su equipo comenzaron a apreciar las alternativas. «Ya estábamos usando Azure Event Hubs, por lo que tenía sentido explorar otros servicios de Azure. Dada la naturaleza simple de nuestra exigencia (solicitud HTTP POST), queríamos poco sin servidor que implicara una sobrecarga mínima..”

Familiarizado con el expansión de código sin servidor, el equipo se centró en soluciones nativas de Azure similares y llegó a Funciones de Azure.

«Ambas plataformas son aceptablemente conocidas por ser buenas para el procesamiento simple de datos a gran escalera, pero no queremos portar a otro producto en seis meses porque hemos llegado a un divisoria..”

—Stephan Miehe, director sénior de seguridad de la plataforma de GitHub

Una aplicación de funciones puede resquilar automáticamente la pan dulce en función de la cantidad de tráfico de registro. La pregunta era cuánto podría resquilar. En el momento en que GitHub comenzó a trabajar con el equipo de Azure Functions, el plan Flex Consumption acababa de entrar en la interpretación preliminar privada. Basado en una nueva cimentación subyacente, Flex Consumption admite hasta 1000 particiones y proporciona una experiencia de escalado basada en objetivos más rápida. El equipo de productos creó una prueba de concepto que se escaló a más del doble del tema más excelso de la plataforma heredada en ese momento, lo que demostró que Flex Consumption podía manejar la canalización.

«Azure Functions Flex Consumption nos brinda una decisión sin servidor con el 100 % de la capacidad que necesitamos ahora, por otra parte de todo el ganancia que necesitamos a medida que crecemos..”

—Stephan Miehe, director sénior de seguridad de la plataforma de GitHub

Hacer que una buena decisión sea excelente

GitHub se unió a la interpretación preliminar privada y trabajó en estrecha colaboración con el equipo de productos de Azure Functions para ver qué más podía hacer Flex Consumption. La nueva aplicación de funciones está escrita en Python para consumir eventos de Event Hubs. Consolida grandes lotes de mensajes en un solo mensaje excelso y lo envía a los consumidores para su procesamiento.

Encontrar el número correcto para cada juego requirió poco de experimentación, ya que cada ejecución de función tiene al menos un pequeño porcentaje de sobrecarga. En los momentos de uso pico, la plataforma procesará más de 1 millón de eventos por segundo. Sabiendo esto, el equipo de GitHub necesitaba encontrar el punto magnífico en la ejecución de la función. Si el número es demasiado stop, no hay suficiente memoria para procesar el juego. Si el número es demasiado pequeño, se necesitan demasiadas ejecuciones para procesar el juego y el rendimiento se ralentiza.

El número correcto resultó ser 5.000 mensajes por juego. «Nuestros tiempos de ejecución ya son increíblemente bajos: en el rango de 100 a 200 milisegundos.« Miehe informa.

Esta decisión tiene flexibilidad incorporada. El equipo puede variar la cantidad de mensajes por juego para diferentes casos de uso y puede dejarlo en Dios en que las capacidades de escalado basadas en objetivos se escalarán hasta la cantidad ideal de instancias. En este maniquí de escalado, Azure Functions determina la cantidad de mensajes sin procesar en el centro de eventos y luego escalera de inmediato hasta una cantidad de instancias adecuada según el tamaño del juego y la cantidad de particiones. En el divisoria superior, la aplicación de funciones se escalera hasta una instancia por partición del centro de eventos, lo que puede impresionar a ser 1000 instancias para implementaciones de centros de eventos muy grandes.

«Si otros clientes desean hacer poco similar y activar una aplicación de funciones desde Event Hubs, deben ser muy deliberados en la cantidad de particiones que usarán según el tamaño de su carga de trabajo; si no tienen suficientes, limitarán el consumo..”

—Stephan Miehe, director sénior de seguridad de la plataforma de GitHub

Azure Functions admite varias fuentes de eventos por otra parte de Event Hubs, incluidas Apache Kafka, Cojín de datos de Azure Cosmos, Bus de servicio de Azure colas y temas, y Almacenamiento en pan dulce de Azure.

Llegando más allá de la red aparente

El maniquí de función como servicio libera a los desarrolladores de la sobrecarga que supone gobernar muchas tareas relacionadas con la infraestructura. Pero incluso el código sin servidor puede encontrarse circunscrito por las limitaciones de las redes en las que se ejecuta. Flex Consumption aborda el problema con un soporte mejorado para redes virtuales (VNet). Las aplicaciones de función se pueden proteger detrás de una VNet y pueden aceptar a otros servicios protegidos detrás de una VNet, sin degradar el rendimiento.

Como uno de los primeros en adoptar Flex Consumption, GitHub se benefició de las mejoras que se realizaron en segundo plano en la plataforma Azure Functions. Flex Consumption se ejecuta en Legion, una red troncal de plataforma como servicio (PaaS) interna de nueva cimentación que progreso las capacidades y el rendimiento de la red para escenarios de ingreso demanda. Por ejemplo, Legion es capaz de inyectando computo en una red aparente existente en milisegundos: cuando una aplicación de funciones se escalera, cada nueva instancia de enumeración que se asigna se inicia y está directorio para la ejecución, incluida la conectividad de red aparente saliente, en el interior de los 624 milisegundos (ms) en el percentil 50 y 1022 ms en el percentil 90. Así es como la aplicación de procesamiento de mensajes de GitHub puede impresionar a los centros de eventos protegidos detrás de una red aparente sin incurrir en demoras significativas. En los últimos 18 meses, la plataforma Azure Functions ha Latencia de puesta en marcha en frío pequeña en aproximadamente un 53% en todas las regiones y para todos los idiomas y plataformas compatibles.

Trabajando a través de los desafíos

Este esquema puso a prueba los límites de los equipos de ingeniería de GitHub y Azure Functions. Juntos, superaron varios desafíos para ganar este nivel de rendimiento:

  • En la primera ejecución de prueba, GitHub tenía tantos mensajes pendientes de procesamiento que provocó un desbordamiento de enteros en la razonamiento de escalado de Azure Functions, que se solucionó de inmediato.
  • En la segunda ejecución, el rendimiento se vio muy circunscrito correcto a la equivocación de agrupación de conexiones. El equipo reescribió el código de la función para reutilizar correctamente las conexiones de una ejecución a la próximo.
  • A unos 800 000 eventos por segundo, el sistema parecía estar circunscrito a nivel de red, pero la causa no estaba clara. Posteriormente de semanas de investigación, el equipo de Azure Functions encontró un error en la configuración del búfer de admisión en la implementación de transporte del Protocolo de pan dulce de mensajes liberal (AMQP) del SDK de Azure. Corregido rápidamente por el equipo de Azure SDK y permitió a GitHub impulsar más de 1 millón de eventos por segundo.

Mejores prácticas para alcanzar un hito de rendimiento

Un maduro poder conlleva una maduro responsabilidad, y Miehe reconoce que Flex Consumption le dio a su equipo “muchas perillas para doblar”, como él mismo lo expresó. «Existe un consistencia entre la flexibilidad y el esfuerzo que debes realizar para configurarlo correctamente..”

Para ello, recomienda realizar pruebas con frecuencia y de forma temprana, poco que forma parte de la civilización de las solicitudes de incorporación de cambios en GitHub. Las siguientes prácticas recomendadas ayudaron a GitHub a cumplir sus objetivos:

  • Hazlo en lotes si puedes:Acoger mensajes en lotes progreso el rendimiento. Procesar miles de mensajes del centro de eventos en una sola ejecución de función progreso significativamente el rendimiento del sistema.
  • Experimente con el tamaño del juego:El equipo de Miehe probó lotes tan grandes como 100.000 eventos y tan pequeños como 100 ayer de impresionar a 5.000 como el tamaño de juego mayor para una ejecución más rápida.
  • Automatice sus tuberías:GitHub utiliza Terraform para crear la aplicación de funciones y las instancias de Event Hubs. El aprovisionamiento conjunto de entreambos componentes reduce la cantidad de intervención manual necesaria para administrar el flujo de ingestión. Por otra parte, el equipo de Miehe pudo iterar increíblemente rápido en respuesta a los comentarios del equipo de productos.

El equipo de GitHub continúa ejecutando la nueva plataforma en paralelo con la decisión heredada mientras monitorea el rendimiento y determina una término de transición.

«Los hemos estado ejecutando uno al costado del otro deliberadamente para encontrar dónde está el techo.« Miehe explica.

El equipo estaba encantado. Como dice Miehe, «Estamos satisfechos con los resultados y pronto eliminaremos todos los gastos operativos de la antigua decisión..«

Explorar soluciones con Azure Functions



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *