Quelle est l’architecture logicielle de Yelp ?


Yelp fournit des avis provenant de la foule sur les entreprises locales, des services de réservation en ligne. Il aide également à former les petites entreprises sur la façon de répondre aux avis, d'accueillir des événements sociaux et de fournir des données sur les entreprises.

Yelp dispose d'une variété de données : avis, profils d'utilisateurs, descriptions d'entreprises, menus, check-ins, photos de nourriture. La mission de Yelps est de connecter les gens avec de grandes entreprises. La communauté Yelp est surtout connue pour le partage d'avis approfondis et d'idées sur les entreprises locales de toutes sortes.


Yelp fonctionne sur une pile LAMP et utilise ElasticSearch pour la recherche, HAProxy pour l'équilibrage de charge et Facebook Scribe pour la journalisation.

Yelp a commencé avec son propre centre de données (gérant lui-même les machines) avant de passer à AWS. Il a commencé avec une base de données primaire exécutant MySQL et un couple d'esclaves de réplication. Au fur et à mesure de l'augmentation du trafic, le contenu statique a été déplacé vers un CDN. La base de données MySQL et les esclaves ont été mis à l'échelle en les répartissant verticalement en fonction de la géographie. Les tâches qui étaient lourdes en écriture et non interactives pour l'utilisateur ont été déplacées vers des bases de données différentes. (par exemple, les clics, les impressions, etc. pour les annonceurs). Ils ont commencé avec un seul centre de données. Ensuite, il a été mis à l'échelle pour avoir plus de centres de données. Sur la base du modèle de trafic qui est principalement en lecture, les nouveaux centres de données étaient en "lecture seule" et un centre de données primaire distinct où toutes les écritures se produisent. Avec plusieurs centres de données, le trafic est équilibré en charge en utilisant le DNS pour acheminer géographiquement le trafic vers le centre de données le plus proche, ce qui rend l'expérience meilleure pour les utilisateurs.


Pour la journalisation, Yelp avait sa propre infrastructure avec des serveurs NFS et beaucoup de disques. Mais au fur et à mesure que le trafic augmentait, ils ont fait le choix d'utiliser scribe pour la journalisation, Les journaux agrégés par scribe sont déplacés vers Amazon S3 pour le stockage et utilisent Amazon Elastic Mapreduce (AWS EMR) pour l'analyse des journaux.

Amazon Elastic MapReduce pour le traitement des journaux -

Yelp faisait tourner son propre cluster Hadoop pour traiter les journaux stockés sur des disques RAID. Yelp a fait le choix d'utiliser Amazon Elastic MapReduce (Amazon EMR) pour exécuter ses tâches Hadoop. Ils ont déplacé les données des disques RAID locaux vers Amazon S3. Amazon EMR est utilisé pour alimenter des fonctionnalités telles que : a.) Les personnes qui ont consulté ce site ont également consulté b.) Les points forts des avis c.) Les meilleures recherches d.). Annonces.

Leurs travaux sont écrits exclusivement en Python, tandis que Yelp utilise sa propre bibliothèque open-source, mrjob, pour exécuter ses travaux de streaming Hadoop sur Amazon EMR, avec boto pour parler à Amazon S3. Yelp utilise également s3cmd et l'utilitaire Ruby Elastic MapReduce pour la surveillance.

Mouvement vers une architecture de microservices -

Yelp est passé à une architecture de microservices. Initialement, Yelp a commencé avec une application web monolithique appelée "yelp-main".

Donc, lorsque vous visitez yelp et que vous commencez à rechercher une entreprise ou un sujet spécifique, vous heurteriez leur service de complétion automatique lorsque vous tapez la requête de recherche. Puis lors de la recherche, il frapperait leur service backend qui essaierait de comprendre la sémantique de la requête et trouverait les résultats appropriés correspondant à la requête. Une fois les résultats de la recherche affichés, il est possible de sélectionner une entreprise spécifique et de passer commande. Cela aurait pour conséquence de frapper leur service de paiement et aussi d'autres services nécessaires pour communiquer avec les partenaires.

A mesure qu'ils ont brisé le monolithe "yelp-main", celui-ci devient davantage une application frontale, responsable de l'agrégation et du rendu des données provenant de leur nombre croissant de services backend.

Yelp utilise également la pile ELK (Elastic Search, Logstash et Kibana) pour analyser les logs.

Logstash est un outil open source permettant de collecter, d'analyser et de stocker les logs pour une utilisation ultérieure. Kibana est une interface web qui peut être utilisée pour rechercher et visualiser les logs que Logstash a indexés. Ces deux outils sont basés sur Elasticsearch. Elasticsearch, Logstash et Kibana, lorsqu'ils sont utilisés ensemble, sont connus comme une pile ELK.

Langage de programmation : 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