Noticias

Creación de microservicios basados ​​en el rendimiento

En Roblox, adoptamos el paradigma de los microservicios y creamos una plataforma de desarrollo basada en contenedores. Nuestro equipo de crecimiento internacional encabezó este esfuerzo al implementar servicios que adoptaron el nuevo enfoque e introdujeron nuevas prácticas destinadas a una alta concurrencia y escalabilidad. Ahora estamos viendo cómo podemos mejorar nuestras estadísticas de rendimiento general y hemos visto resultados consistentes después de algunas iteraciones.

Una vez que Roblox decidió seguir adelante con el desarrollo de una plataforma orientada a microservicios y contenedores, surgieron muchas preguntas abiertas sobre cómo:

  • Alcanza la madurez con la plataforma y sigue la curva de aprendizaje para llegar allí.
  • Reaccione ante lo "desconocido" (como actualizaciones frecuentes de dependencias, actualizaciones de herramientas y otros cambios).
  • Simplifique y reescriba las estrategias, porque veníamos de una base de código monolítica que abordaba demasiados problemas a la vez.
  • Gestione la incertidumbre de la producción y la preparación de la infraestructura.

Nuestro equipo de crecimiento internacional ha sido la punta de lanza ideal para encontrar estas respuestas. Nuestros proyectos ya estaban explorando un territorio desconocido para hacer realidad Roblox en países internacionales, como respaldar el marco de cumplimiento legal y las regulaciones de tiempo de pantalla. Al mismo tiempo, nuestros servicios futuros de entonces y ahora presentes no tenían fuertes dependencias con el resto de la plataforma. Por lo tanto, se esperaban experiencias prácticas con nuestro proceso de desarrollo, desde la planificación hasta la ejecución, para alcanzar un nuevo nivel de comprensión.

Frente a lo “desconocido”

Después de la planificación intersticial y las reuniones con el equipo de la plataforma de microservicios (MSP), rápidamente nos dimos cuenta de que se necesitaba una nueva mentalidad para planificar lo "desconocido". Tal mentalidad debería abordar todas las preocupaciones anteriores mientras impulsa el progreso con cada sprint.

A medida que avanzaba el desarrollo de software, decidimos invertir en la comprensión de todas las capas, desde el código hasta el clúster de infraestructura, con este enfoque de desarrollo basado en el rendimiento. Al igual que en el desarrollo basado en pruebas, no solo buscábamos pasar casos de prueba o encontrar defectos, sino también mejorar el rendimiento.

Todas las inquietudes se asignaron a métricas para realizar un seguimiento frecuente del éxito y asignar acciones procesables para realizar cada sprint, para cada entregable. Estas preocupaciones surgieron como oportunidades para mejorar nuestro proceso de la siguiente manera:

https://blog.roblox.com/

Medir continuamente el éxito

Desarrollar el rendimiento es el proceso de observar, comprender y corregir continuamente lo que sucede en todas las capas (código, contenedor y clúster) para lograr un funcionamiento óptimo a través de la iteración.

Al principio del desarrollo de nuestro primer microservicio, identificamos que tener un marco de prueba de carga era esencial para medir el éxito. Para ello, hemos puesto en marcha un proyecto utilizando Gatling para modelar simulaciones básicas. También descubrimos que la recopilación de métricas de control de calidad por compilación podría simplificarse mediante el uso de Sonarqube.

Después de algunas iteraciones, estas ideas se convirtieron en un marco en contenedores más cohesivo capaz de simular miles de solicitudes y producir paneles en tiempo real durante las compilaciones y las pruebas. Más herramientas han entrado en la ecuación para simplificar el seguimiento del rendimiento. Hoy, tenemos los medios para capturar tableros de múltiples fuentes y crear un informe para cada caracterización, prueba de carga o evento significativo. Estos son solo algunos ejemplos de cómo la iteración continua con la mentalidad de "construir rendimiento" ya ha dado resultados.

Cuando lo "desconocido" se vuelve familiar

La creación continua de perfiles, caracterización y pruebas de carga después de varios sprints ha valido la pena. Encontramos varios problemas en diferentes capas. Algunos de ellos eran fáciles de arreglar, como las optimizaciones de registro. Otros eran menos sencillos, como la optimización del servidor y la gestión de la conexión. Cada punto de dolor o mejora que abordamos mejora al menos una métrica; ya sea reduciendo el tiempo medio de respuesta o realizando más solicitudes con los mismos recursos.

Nuestra confianza creció después de que el primer servicio alcanzara una gran cantidad de tráfico en producción. Nuestra velocidad ha mejorado drásticamente sprint a sprint a medida que llegan nuevos servicios o se mejoran los existentes. Todavía hay espacio para mejorar, pero las primeras mejoras fueron evidentes después de solo unos meses.

https://blog.roblox.com/

La creación de conocimientos también es importante y la distribución de la funcionalidad de múltiples servicios a diferentes ingenieros ha mostrado buenos resultados. Aportó valor no solo por el intercambio tribal, sino también porque cada vez que volvemos a visitar la actuación, surgen nuevas ideas.

Cómo hacer del rendimiento una prioridad

La detección de problemas de rendimiento como parte del ciclo de desarrollo ha demostrado ser fundamental para el futuro de nuestro equipo y nuestro negocio. Los ajustes que hemos hecho a nuestro proceso ágil y prácticas de desarrollo son pequeños en comparación con los beneficios que hemos visto. Es tan natural como cualquier otro enfoque tradicional de desarrollo basado en pruebas, pero con el beneficio de una mejor previsibilidad de escalabilidad y uso de recursos.

Parte del trabajo que hemos hecho todavía es semiautomático, pero el futuro es brillante. Nuestro plan es adoptar la automatización completa de procesos e integrarla en nuestra canalización de CI/CD. La nueva plataforma está comenzando a adoptar algunas de estas prácticas, y muy pronto todos los equipos de back-end se beneficiarán de las herramientas que hemos creado.

El mayor beneficio es que invertir en una mentalidad de desarrollo impulsada por el desempeño nos ha llevado al lugar correcto con muchas oportunidades adicionales. Tener los medios para monitorear el desempeño al alcance de su mano contribuye en gran medida a la madurez de nuestra nueva plataforma. El uso de contenedores para servicios y herramientas agrega una forma consistente de estandarizar esta metodología y replicarla en todas partes.

Hacer que el rendimiento forme parte de su vida cotidiana es clave para el futuro de cualquier servicio altamente escalable.


Ni Roblox Corporation ni este blog respaldan o respaldan a ninguna empresa o servicio. Además, no se ofrecen garantías ni promesas con respecto a la precisión, confiabilidad o integridad de la información contenida en este blog.

Esta publicación de blog apareció originalmente en Roblox Tech Blog.