Reingeniería back-end SoyMomo
Professor Advisor
Abstract
SoyMomo es un reloj-celular-GPS para niños que permite a los padres -entre otras funciones- saber dónde se encuentran y poder hacer llamadas desde y hacia el reloj, a través de aplicaciones móviles. Estos relojes tienen un módulo GSM (2G) y se comunican a un servidor a través de sockets TCP.
El sistema se compone de un servidor desarrollado en Node.js y un sistema de Backend as a Service que almacena la base de datos. Debido al sostenido aumento de usuarios de éste, el servidor ha alcanzado el límite de capacidad, utilizando todos los recursos que estaba diseñado para usar. Este límite sin embargo, no es el límite del sistema, por lo tanto existían oportunidades de mejora.
Además, también se alcanzaba el límite de consultas por segundo en la base de datos, lo que provocaba la pérdida de información debido a que el servidor rechazaba las consultas sobre ese límite.
Se realizó una reingeniería del servidor, identificando los puntos más críticos de falla: diseño, rendimiento y optimización de consultas; y se reescribió el \textit{software} utilizando el lenguaje Go, aplicando conceptos de paralelismo y concurrencia, con el fin de mejorar el rendimiento y crear un sistema escalable.
Para esto, se reestructuró el programa en secciones pequeñas de código capaces de ejecutarse de forma concurrente, con el fin de utilizar las bondades del \textit{scheduler} lenguaje, que es capaz de repartir el trabajo entre todos los \textit{cores} disponibles del procesador.
Además, se creó una sección central que se encarga de agrupar consultas a la base de datos y enviarlas en lotes, permitiendo atender a la misma cantidad de clientes con menos recursos.
Finalmente se pudo concluir que las mejoras planificadas cumplen con lo propuesto, realizando una utilización óptima de los recursos del sistema, al lograr atender un 19\% más de clientes con lel mismo número de consultas; eliminando la pérdida de información y rebajando el uso de CPU a menos del 20\%.
General note
Memoria para optar al título de Ingeniero Civil en Computación
Identifier
URI: https://repositorio.uchile.cl/handle/2250/170537
Collections
The following license files are associated with this item: