PlusPlus
PlusPlus es una startup de entretenimiento empresarial que proporciona funcionalidades para puntuar todo tipo de cosas y usuarios en Slack.
Todos los clientesDesarrollo de productos
PlusPlus llegó a nosotros con un producto en Python ya desarrollado, que necesitaba un cambio de paquete tecnológico y mejoras de estabilidad. Captamos el código base en muy poco tiempo y comenzamos el desarrollo desde el día 1.
Más informaciónStartups e Innovación
Convertir ideas en código, probar y publicar los resultados, mejorar y mantener los proyectos es nuestra contribución a la felicidad tanto de los emprendedores de startups como de las comunidades de usuarios.
Más informaciónDesafío
PlusPlus es un chatbot para Slack hecho para el entretenimiento. Permite sumar, restar y puntuar las cosas que tus amigos dicen y hacen en Slack dirigiéndose a objetos y usuarios con ‘@’. Tiene una tabla de clasificación global y cada acción afecta a los resultados generales.
El reto para el equipo de Redwerk era reescribir completamente el bot existente, desarrollado originalmente en Python, utilizando Ruby como tecnología principal. También el objetivo era aumentar la estabilidad, hacer posible la escalabilidad y optimizar el rendimiento general de este proyecto de gran carga.
Solución
Hemos empezado con la parte más importante: la refactorización y la corrección del código. La antigua versión del bot estaba escrita en Python y necesitábamos portarla a Ruby,teniendo en cuenta todos los cambios adicionales que podrían surgir, así como arreglar los problemas existentes e implementar nuevas funcionalidades. Cuando estábamos planificando la infraestructura, basamos nuestras suposiciones sobre la carga en las estadísticas medias de uso del antiguo bot de Python: aproximadamente 500.000-700.000 acciones de usuarios por minuto. Ampliamos este nivel hasta ~1 millón de acciones de usuarios/minuto para tener cierto margen y proporcionamos un conjunto de pruebas de estrés.
Y aquí es donde apareció otro desafío. Resultó que Slack limita las pruebas a 1 mensaje por segundo y no tiene la funcionalidad para probar proyectos de alta carga. La carga real de PlusPlus era de más de 20-50 millones de acciones por minuto, y la infraestructura existente no podía soportarlo. Para cubrir la nuevos requerimientos, tuvimos que rehacer una parte importante de la lógica de la aplicación.
Users and objects logic optimization
El equipo de desarrollo de Redwerk necesitaba definir y optimizar cuidadosamente cualquier brecha e incluso las fugas más pequeñas de memoria y uso de CPU. La carga real del proyecto envió millones de acciones que contenían @usernames y @things en una sola línea. Los objetos requerían una lógica más avanzada que los usuarios, porque debían analizarse, luego verificar si existían en la base de datos, crear una nueva entrada si no existían, luego actualizar el puntaje, la tabla de posiciones y las tendencias globales. Con millones de tales acciones, la mayoría de ellas ocurriendo dentro de un solo mensaje, la base de datos se sobrecargó muy rápidamente, así como la memoria y la CPU.
Otra tarea de alta carga fue optimizar las actualizaciones de puntuación en las tablas de posiciones, ya que cada acción tenía que influir en la posición en las tablas de posiciones globales de usuarios y objetos. La cantidad increíblemente alta de elementos que debían analizarse, verificarse y actualizarse creó desafíos adicionales para el desarrollo.
Para optimizar todas estas acciones, nuestro equipo desarrolló una funcionalidad que utiliza múltiples núcleos de CPU en cada servidor, junto con un administrador de bots específico, que enruta cada bot a un nodo específico (Servidor + núcleo de CPU), un tipo de tarea que el balanceador de la carga de Amazon no pudo manejar. Después de eso, reconstruimos la lógica de solicitud para disminuir la cantidad de solicitudes.
También cambiamos de Ubuntu a CentOS. Ubuntu no nos permitía crear conexiones adicionales a una base de datos. CentOS, a su vez, proporcionó un entorno más estable mientras trabajaba con MongoDB y admitió la carga de acción excesiva. También nos permitió volver a configurar el servidor de AWS y actualizar la configuración central del sistema operativo en los nodos para mejorar el descriptor de archivos y los límites de los subprocesos.
Resultado
El equipo de Redwerk fue capaz de reescribir el bot PlusPlus por completo. Ahora su infraestructura funciona de forma estable y tiene suficientes soluciones para mantenerla funcionando y restaurarla si es necesario. También hemos creado un mecanismo para simplificar el escalado y añadir nuevos servidores rápidamente.
También entregamos la solución con la documentación actualizada y hemos realizado una sesión de formación para los clientes sobre cómo manejar y mantener el sistema renovado.
¿Está buscando un equipo profesional de desarrollo de productos?
Contactar ahoraTecnologías
Comentario del equipo Redwerk
Alex
Desarrollador
El reto para el equipo de Redwerk era reescribir por completo el bot existente, desarrollado originalmente en Python, utilizando Ruby como tecnología de base. También se nos encargó aumentar la estabilidad, hacer posible la escalabilidad y optimizar el rendimiento general de este proyecto de gran carga.
Relacionado en Blog
Errores típicos al trabajar con una base de datos en Ruby on Rails
Cuando oímos hablar de "Ruby", a menudo lo asociamos con "Ruby on Rails". Rails es un framework muy funcional y popular que se utiliza ampliamente para la construcción de APIs y aplicaciones web. Rails consta de gemas independientes y ActiveRecord es una de ellas. Esta potente ge...
Leer más¿Listo para empezar su proyecto de software?
Contacte con nosotrosOtros casos prácticos
Cleanagents
Creamos una aplicación Android para limpiadores autónomos en Alemania y Austria, que pronto fue adquirida por Helpling.de.
Adfectious
Desarrollo de un sistema de publicidad móvil inspirado en AdMob de Google y utilizado en medios de comunicación rumanos populares como meteoromania.ro.