¿Cuál es la arquitectura de software de Yelp?

Yelp proporciona reseñas de multitud de personas sobre negocios locales, servicios de reserva en línea. También ayuda a formar a las pequeñas empresas sobre cómo responder a las reseñas, organiza eventos sociales y proporciona datos sobre los negocios.

Yelp tiene variedad de datos: reseñas, perfiles de usuarios, descripciones de negocios, menús, check-ins, fotos de comida. La misión de Yelps es conectar a la gente con grandes negocios. La comunidad de Yelp es más conocida por compartir reseñas en profundidad y opiniones sobre negocios locales de todo tipo.

Yelp se ejecuta en la pila LAMP y utiliza ElasticSearch para la búsqueda, HAProxy para el equilibrio de carga y Facebook Scribe para el registro.

Yelp comenzó con su propio centro de datos (gestionando las máquinas ellos mismos) antes de trasladarse a AWS. Comenzó con una base de datos primaria que ejecutaba MySQL y un par de esclavos de replicación. A medida que el tráfico escaló, el contenido estático se trasladó a la CDN. La base de datos MySQL con los esclavos se escaló mediante la fragmentación vertical basada en la geografía. Las tareas que requerían mucha escritura y no eran interactivas con el usuario se trasladaron a diferentes bases de datos. (por ejemplo, clics, impresiones, etc. para los anunciantes). Empezaron con un único centro de datos. Luego se amplió para tener más centros de datos. Basándose en el patrón de tráfico, que es predominantemente de lectura, los nuevos centros de datos eran "sólo de lectura" y un centro de datos primario separado donde se producen todas las escrituras. Con múltiples centros de datos, el tráfico se equilibra utilizando DNS para dirigirlo geográficamente al centro de datos más cercano, lo que mejora la experiencia de los usuarios.

Para el registro, Yelp tenía su propia infraestructura con servidores NFS y muchos discos. Los registros agregados por scribe se trasladan a Amazon S3 para su almacenamiento y utilizan Amazon Elastic Mapreduce (AWS EMR) para el análisis de los registros.

Amazon Elastic MapReduce para el procesamiento de registros -

Yelp estaba ejecutando su propio clúster Hadoop para procesar los registros almacenados en discos RAID. Yelp dio el paso de utilizar Amazon Elastic MapReduce (Amazon EMR) para ejecutar sus trabajos de Hadoop. Trasladaron los datos de los discos RAID locales a Amazon S3. Amazon EMR se utiliza para potenciar características como: a.) Personas que vieron esto también vieron b.) Opiniones destacadas c.) Búsquedas principales d.) Anuncios.

Sus trabajos están escritos exclusivamente en Python, mientras que Yelp utiliza su propia biblioteca de código abierto, mrjob, para ejecutar sus trabajos de streaming de Hadoop en Amazon EMR, con boto para hablar con Amazon S3. Yelp también utiliza s3cmd y la utilidad Ruby Elastic MapReduce para la monitorización.

Movimiento a la arquitectura de Microservicios -

Yelp ha pasado a la arquitectura de Microservicios. Inicialmente Yelp comenzó con una aplicación web monolítica llamada "yelp-main".

Así que cuando visitas yelp y empiezas a buscar cualquier negocio o tema específico, golpearías su servicio de autocompletado mientras escribes la consulta de búsqueda. Luego, al realizar la búsqueda, el servicio de backend tratará de entender la semántica de la consulta y encontrará los resultados adecuados que coincidan con la consulta. Una vez que se muestren los resultados de la búsqueda, es posible seleccionar un negocio específico y hacer un pedido. Esto daría lugar a golpear su servicio de pago y también otros servicios necesarios para comunicarse con los socios.

Como rompieron el monolito "yelp-main", el "yelp-main" se convierte más en una aplicación frontend, responsable de agregar y renderizar los datos de su creciente número de servicios backend.

Yelp también utiliza la pila ELK (Elastic Search, Logstash y Kibana) para analizar los registros.

Logstash es una herramienta de código abierto para recopilar, analizar y almacenar registros para su uso futuro. Kibana es una interfaz web que se puede utilizar para buscar y ver los registros que Logstash ha indexado. Ambas herramientas se basan en Elasticsearch. Elasticsearch, Logstash y Kibana, cuando se utilizan juntos se conoce como una pila ELK.

Lenguaje de programación: Python

Hosting: Amazon EC2

OS: Ubuntu

Load Balancing: HAProxy

Reverse Proxy: Nginx

Search: Elastic Search

Version Control: Git

Logging: Scribe

API Framework: Swagger

Web Framework: Pyramid

References:

AWS Yelp Case study - Yelp Case Study - Amazon Web Services (AWS)

Scaling traffic to 139 million visitors - Scaling Traffic from 0 to 139 Million Unique Visitors

Using Services to Break Down Monoliths

Yelp Tech Talk - Yelp Tech Talks Launch