lunes, 6 de marzo de 2017

Moviendo Meetup al Cloud

Noticia original en..

Moviendo Meetup al Cloud

El equipo de ingeniería Meetup ha estado re-planteando nuestra infraestructura, cores, móviles y plataformas web en los últimos 12 meses para que podamos mejorar nuestro producto y lanzar nuevas características más rápido para nuestros usuarios. Hemos estado moviendo partes de nuestra infraestructura a la nube durante el año pasado y el gran movimiento final ocurrirá este fin de semana. Como resultado:

Meetup no estará disponible el 5 de marzo a partir de las 12:00 am EST (GMT -05: 00).

Hemos pensado mucho acerca de cómo evitar el tiempo de inactividad de nuestros clientes, pero todas las posibles y soluciones técnicas tuvieron un riesgo demasiado grande de pérdida de datos.

 No vamos a estar disponibles para que podamos detener las actualizaciones de la base de datos -desde el sitio web, las aplicaciones y varios demonios y procesos programadso y dejar que los procesos activos  corran hasta que se agoten todas nuestras colas.
A continuación, cerraremos todos los procesos activos, servicios en AWS, detendremos  la replicación, promocionaremos nuestro almacén de datos AWS para terminar e iniciar todo de nuevo. Estimamos que todo esto nos costara alrededor de 3 horas si todo va según el plan, pero el tiempo que tomará para terminar las colas es el más desconocido y puede necesitar más tiempo. 

Una vez que estemos en activos en AWS, Meetup estará 100% en la nube. En el último año hemos completado tres proyectos: trasladar nuestra infraestructura actual a AWS, lanzar nueva infraestructura en GCP y trasladar el resto de nuestra línea de procesamiento de datos a GCP. A continuación, voy a entrar en los mejores momentos de cada uno.


Infraestructura AWS
Estamos muy contentos de anunciar que estamos completando nuestro proyecto para migrar nuestra actual aplicación web monolítica, la API y los servicios e infraestructuras relacionados desde nuestros centros de datos propios a AWS. Nuestra infraestructura de AWS se construye enteramente como un conjunto de plantillas CloudFormation, lo que nos permite provisionar automáticamente toda la plataforma mediante programación. La arquitectura utiliza Docker en ECS y otros servicios gestionados siempre que sea posible, por lo que nuestros ingenieros pueden centrarse más en hacer Meetup y menos en las operaciones. Por último, Meetup se implementa para una alta disponibilidad en múltiples Zonas de disponibilidad.


Infraestructura AWS  de Meetup


Algunos aspectos destacados de la infraestructura y los servicios gestionados de AWS incluyen:

  • Almacenes de datos: Como parte de este proyecto, migramos nuestras 3 bases de datos MySQL con 6TB de datos a Aurora. También estamos utilizando Redshift como nuestro almacén de datos. Cada uno de ellos se ejecutan en clusters separados.

  • Mensajería y almacenamiento en caché: Hemos migrado nuestro bus de mensajería RabbitMQ que se ejecuta en un clúster ECS independiente y nuestro Redis / Memcached en almacenes de valores / llaves de memoria que se ejecutan en ElastiCache.

  • Procesamiento de trabajos: creamos un clúster de ECS de trabajos independientes que ejecuta procesamiento de correo electrónico, actualizaciones de datos, recordatorios y más.

  • Servidor de Web y API: Nuestra capa de servicio consiste en un clúster de aplicaciones ECS que ejecuta nuestros servidores Web, servidores de API y herramientas de administración.

  • Servicios de aplicación: Hemos creado un clúster de servicios ECS que ofrece servicios sociales de gráfica y de interés para miembros, así como búsqueda contextual basada en Sphinx.

  • Servicios Cloud: Hemos implementado un conjunto de servicios en la nube incluyendo el uso de AWS Lambda y API Gateway para administración y redimensionamiento de fotos, DynamoDB para el seguimiento de activos, SNS para alertas y notificaciones, S3 para almacenamiento de fotos y activos y Route53 para DNS.

  • DMZ & CDN: Ejecutamos separar Load Balancers de aplicación como una opción en el servicio Elastic Load Balancing para distribuir automáticamente el tráfico de aplicaciones en instancias de EC2. También usamos un CDN moderno que es nuestra primera línea de defensa contra ataques DDoS.



Infraestructura en GCP

A lo largo de 2016 lanzamos una nueva infraestructura de ingeniería, servicios básicos y aplicaciones web en Google Cloud Platform. Esta infraestructura utiliza la arquitectura orientada a servicios y los clústeres de contenedores Kubernetes administrados por Google Container Engine. Esta forma de agrupación hace que nuestras aplicaciones sean efímeras y rapidas, lo que lleva a una fácil escala horizontal con poca orquestación de infraestructura.

Elegimos este enfoque porque creemos que una arquitectura orientada al servicio nos ayudará a escalar nuestra plataforma y equipo de ingeniería a medida que crecemos. Además, la descarga de la gestión y el tiempo de actividad de los clústeres de Kubernetes a Google libera a nuestros ingenieros para concentrarse en hacer que el producto Meetup sea más rápido e iterar más rápidamente hacia nuestra visión de MEME (Meetup Everywhere sobre Most Everything).


Infraestructura de GCP de Meetup
El grupo de Eficacia de Ingeniería contiene varios servicios que capacitan a los ingenieros para operar y desarrollar, incluyendo:


  • - Selenium Grid para pruebas E2E
  • - Jenkins para activar y ejecutar compilaciones de gatekeeper de CI
  • - Registro de Docker
  • - Nexus repositorio para la gestión de componentes y actividad.
  • - AirFlow para la programación de trabajos y flujos de trabajo conectados.
  • - Servicios de integración de JIRA
  • - Lanzamiento de herramientas de monitor


El grupo de producción alberga nuestra nueva plataforma central, servicios y aplicaciones web. Para el acceso de usuarios, los usuarios usan con un equilibrador de carga de Google de escala automática. Fuera de nuestros clusters, hemos elegido utilizar soluciones gestionadas ofrecidas por Google y también una solución parcialmente gestionada para almacenes de datos SQL.



Conexiones de  procesamiento de datos


En diciembre de 2016, completamos  la migración de nuestra línea de procesamiento de datos a GCP y AWS. Las conexiónes de procesamiento de datos recopila registros de aplicaciones y extractos de bases de datos, lo limpia, ejecuta el aprendizaje de la máquina y procesa todos los trabajos en GCP y, a continuación, transfiere los resultados a nuestro almacén de datos y base de datos de aplicaciones para poder ofrecer recomendaciones y ver los datos analizados a través de Looker

Una futura mejora y reducción de costos que hemos planeado moverá toda nuestra infraestructura de pipeline de datos a GCP.


Todo lo anterior se logra utilizando una combinación de servicios de AWS y GCP, incluyendo los siguientes:

  • - Amazon S3 (~ 22TB) para almacenamiento de objetos 
  • - Amazon Redshift (~ 9TB) como nuestro almacén de datos 
  • - Google Cloud Storage (~ 25TB) ) Para almacenamiento de objetos 
  • - Google Cloud Dataproc (1 grupo con ~ 30 trabajos) para ejecutar los trabajos de machine learning y procesar con trabajos con Spark en servicios manejados con  Spark / Hadoop.