Si habéis estado atentos, habréis visto que recientemente hemos contratado a un desarrollador full-time para el equipo de Menéame. Tres meses después de su fichaje, podemos anunciar ya las primeras mejoras para nuestra web, tanto visibles como de las que no se ven. Hoy queremos contaros algunas de las mejoras que estamos realizando y que nos ayudarán a actualizar esta web sin perder su esencia. Básicamente hemos realizado un cambio profundo en la infraestructura de la web con la intención de mejorar el servicio a los usuarios y, a nivel más técnico, simplificar procesos.

Punto de partida

Actualmente, Menéame se encuentra desplegado en la plataforma Amazon Web Services (AWS) en la que todo el tráfico se distribuye en un número variable de servidores en función de las necesidades de cada momento. Cuando hay más actividad tenemos más máquinas y su número se reduce cuando hay menos, y nos solemos mover entre 1 y 4.

Todos estos servidores tiene las mismas características, servicios instalados y el trabajan sobre la misma versión del código de Menéame. Además todos ellos se conectan a la misma base de datos para la obtención de los datos almacenados. Esta base de datos también está en AWS para garantizar la disponibilidad en todo momento así como el sistema de respaldo.

Nueva infraestructura

Para conseguir nuestro objetivo de mejorar el rendimiento del sistema en general y evitar posibles vulnerabilidades derivadas del uso de versiones obsoletas, nos hemos decidido por montar paralelamente una nueva infraestructura completa siguiendo los siguientes pasos:

1 Estudio de infraestructura actual

El primer paso ha sido dedicar parte del tiempo de trabajo al estudio en profundidad de la configuración de la que partíamos para cumplir varios objetivos:

  • Identificación de todos los servicios
  • Identificación de vulnerabilidades
  • Identificación de puntos de mejora
  • Documentar el proceso de despliegue actual
  • Documentar el esquema actual
  • Buscar y probar nuevas versiones de los servicios actualmente en funcionamiento

2 Configuración de nuevo servidor

Con toda la información obtenida de la fase anterior ya estamos en condiciones de montar un nuevo servidor, muy similar al anterior, pero con las nuevas versiones en los servicios instalados.

De todos estos servicios, el que más nos interesaba actualizar era el PHP-FPM ya que el salto a la versión 7 implica una mejora en el rendimiento muy significativa. Para ello fue necesario adaptar ciertas partes del código a la nueva versión de PHP y una buena cantidad de pruebas para detectar posibles incompatibilidades entre estas versiones.

Antes de comenzar a construir esta nueva máquina, hemos configurado un entorno de desarrollo con todos los servicios implicados basado en contenedores Docker, lo que nos dio una gran flexibilidad a la hora de adaptar el código y la realización de pruebas sobre las nuevas versiones con distintas configuraciones lo más optimizadas posibles.

En resumen, nuestra nueva máquina se configura en un sistema operativo LINUX, NGIX, PHP-FPM en su última versión oficial.

Una vez afinada y probada en el entorno de desarrollo, hemos construido el servidor en AWS para comentar con las pruebas en el entorno de producción.

3 Construcción de un sistema de monitorización

Paralelamente a la construcción de servidor, hemos desarrollado un sistema de monitorización que recoge información de los logs de cada una de las máquinas en producción y los muestra de forma muy gráfica de tal manera que se pueden detectar picos de carga, ataques o lentitud en algún proceso.

4 Nuevo sistema de despliegue

Llamamos despliegue a la puesta en producción de nuevas funcionalidades, que nos permite corrección de errores o cambios de configuración relacionados con el código de la aplicación. Pues bien, tras el estudio del actual sistema de despliegue, vimos la necesidad de construir un nuevo sistema que nos permita una mayor flexibilidad y control sobre los cambios funcionales relacionados con el código.

El nuevo sistema de despliegue está basado en ansitrano lo que nos permite:

  • Tener varios entornos de despliegue con varias configuraciones (develop, testing, production, etc…)
  • Revertir cambios de forma muy rápida. En el caso de que subamos algunos cambios a producción y éstos produzcan errores, en cuestión de pocos minutos podríamos volver a la versión anterior.
  • Realizar tareas sobre el servidor antes o después de aplicar los cambios, como por ejemplo reiniciar determinados servicios.
  • Aplicar los cambios sobre todas las máquinas que están en producción desde el puesto de desarrollador, es decir, sin necesidad de entrar en cada una de las máquinas y realizar el despliegue manualmente en cada una de ellas.

5 Fase de pruebas

Todos los cambios se someten una fase de pruebas bastante exhaustiva antes de pasar a producción, comenzando en un entorno local desarrollo hasta las pruebas en el entorno de producción pero sin tráfico real.

En todos los casos hemos utilizado herramientas de benchmarking como Siege que nos han permitido comprobar el comportamiento de los nuevos servidores, instancias de Amazon optimizadas para CPU, en comparación con la configuración actual. Con esta herramienta también hemos podido estudiar diferentes límites, cargas y concurrencia que la nueva máquina podría soportar.

Otra de las pruebas que hemos realizado ha sido probar diferentes opciones de hardware disponible en AWS para ver cuál era la máquina que mejor se ajustaba a nuestras necesidades optando por una configuración optimizada para procesos de alta carga de CPU.

Tras esta fase de pruebas y testeo, nos decidimos para realizar la última prueba en entorno de producción desviando el 1% del tráfico de Menéame a la nueva máquina durante 2 horas y así poder estudiar el comportamiento y posibles errores a través del sistema de monitorización.

Puesta en producción

La puesta en producción la realizaremos de forma gradual, ya que nuestra idea es ir desviando tráfico del sistema actual al nuevo de forma incremental para poder aumentar los recursos en el nuevo sistema mientras que reducimos los del actual.

La semana pasada llegamos a tener el 40% del tráfico de Menéame en el nuevo sistema con unos resultados muy satisfactorios en cuanto al rendimiento del nuevo sistema. Hemos observado la reducción del tiempo de respuesta en las peticiones y una disminución del consumo de recursos en las máquinas.

Uno de los cambios que se ven: comentarios en tiempo real

Entre los cambios que sí que se ven, está la posibilidad de ver los comentarios de las noticias de portada en tiempo real. Esto se traduce en que, si entras en una de las noticias de portada y alguien ha comentado, podrás ver en tiempo real cuántos te quedan por leer. De este modo, podrás conocer en todo momento cómo va la conversación y haciendo click se te recargarán los últimos comentarios.