Uber Tech Stack & Software Architecture – Comment Uber a-t-il été construit ?

Publié: 2022-01-17

Uber est devenu un nom familier. L'incroyable plateforme permet aux utilisateurs de réserver un service de taxi en seulement quatre étapes simples. L'application Uber garantit un service rapide ainsi qu'une commodité optimale, pas étonnant qu'elle ait explosé en popularité.

Saviez-vous qu'Uber compte 98 millions d'utilisateurs actifs par mois ? De plus, l'entreprise a généré 11,1 milliards de dollars de revenus en 2020 ? Uber a donné un exemple classique aux startups et aux services de taxi existants. Chaque organisation vise à reproduire le succès d'Uber en offrant des services de taxi rapides et pratiques.

Si vous aussi vous êtes impressionné par l'immense succès d'Uber, cet article est pour vous. Ici, nous discuterons de la pile technologique et de l'architecture logicielle d'Uber, ce qui vous donnera une meilleure compréhension de la plate-forme et vous aidera à créer votre application de services de taxi à partir de zéro. Alors, commençons.

Comment créer une application en temps réel comme Uber ?

Pour construire une application en temps réel comme Uber, vous devez d'abord comprendre les différents composants de celle-ci, qui sont les suivants :

Application passager

Si vous avez déjà utilisé l'application Uber, vous vous identifierez facilement à la fonctionnalité de l'application passager. Ce composant de l'application possède toutes les fonctionnalités dont les utilisateurs ont besoin pour réserver un taxi, telles que le choix du trajet, le calculateur de tarif, les paiements en ligne, le suivi GPS, etc.

Application chauffeur

L'application du conducteur est utilisée par les chauffeurs de taxi qui affichent les nouvelles demandes de taxi des passagers. À l'aide de ce panneau, les conducteurs peuvent accepter ou refuser les demandes de trajet et vérifier l'emplacement exact du passager à l'aide de la carte intégrée.

La place du marché

La place de marché relie les deux applications, l'application Passager et l'application Conducteur. Il effectue les tâches les plus compliquées qui impliquent la mise en relation des passagers avec les chauffeurs et la gestion des paiements.

Ainsi, si vous souhaitez créer une application comme Uber, vous aurez besoin de trois panneaux différents. Le premier panneau permettra aux passagers de réserver un taxi, et le second panneau permettra aux chauffeurs d'accepter les demandes de trajet. Et enfin, un troisième panel recevra les demandes des deux premiers et gérera toutes les opérations en ligne.

Comment construire le prochain Uber ?

Uber est un service de taxi très réussi qui offre un confort ultime aux passagers. Le développement d'une application comme Uber peut impliquer une somme d'argent importante et une équipe de développement d'applications compétente.

En dehors de cela, il y a quelques autres éléments à prendre en compte lors du développement d'une application comme Uber.

Vérifiez vos concurrents.

C'est une excellente idée de rechercher des applications qui tentent actuellement de résoudre le même problème que vous cherchez à résoudre avec votre application. L'examen de ces applications vous aidera à vous faire une idée de leurs caractéristiques, fonctionnalités, ainsi que du public cible.

De plus, un examen approfondi du paysage concurrentiel vous aidera à comprendre comment fonctionnent vos concurrents. Par exemple, consulter leurs réseaux sociaux vous permettra de recueillir des informations sur leur stratégie marketing, l'évolution des produits et les taux de satisfaction client. Tout cela contribuera grandement à vous aider à lancer une application réussie.

Connaissez vos utilisateurs potentiels

Avant de vous lancer dans le développement d'applications, vous devez savoir qui utilisera votre application. Ce n'est que si vous connaissez votre public cible que vous pourrez communiquer correctement avec lui.

Vous pouvez rassembler toutes les données démographiques de vos utilisateurs potentiels, telles que l'âge, l'emplacement, le sexe, les comportements, les préférences, etc. Une fois cela fait, vous pouvez discuter de l'idée de votre application avec les personnes auxquelles vous tenez.

Restez concentré sur l'expérience utilisateur.

L'expérience utilisateur est l'un des aspects clés d'une application réussie. Les gens veulent utiliser des applications qui offrent une interface utilisateur et une expérience utilisateur simples mais intuitives. Une interface utilisateur époustouflante offre une expérience de navigation transparente et une UX intuitive assure une facilité d'utilisation.

Offrir une bonne expérience utilisateur conduit à une meilleure acquisition d'utilisateurs et à des téléchargements plus importants.

Testez avec un MVP

Un produit minimum viable (MVP) est la première version de base du produit qui prend en charge des fonctionnalités minimales mais cruciales. Il est conseillé de créer un MVP avant de développer une application à part entière, car cela permet d'accélérer la mise sur le marché, d'attirer les premiers utilisateurs et d'adapter le produit au marché dès le début.

Une fois que le MVP est communiqué aux utilisateurs, leurs premiers commentaires sont obtenus. Sur la base de ces commentaires, vous pouvez réitérer, corriger les bogues et introduire de nouvelles fonctionnalités qui donneront à votre produit un avantage concurrentiel.

Comment fonctionne techniquement l'application Uber ?

comment fonctionne uber

L'application Uber traite une grande quantité de données en exploitant les plateformes de ML et d'analyse de données développées en interne. Lorsqu'un passager demande un taxi, beaucoup de données sont générées. Par exemple, l'application reçoit des données sur le passager, son emplacement, les informations de sa carte de crédit, le coût du trajet, les chauffeurs de taxi à proximité, etc. Et progressivement, toutes ces informations circulent dans l'ensemble du système. Voyons comment.

Une fois qu'un trajet est demandé, la plateforme :

  • Enregistre toutes les informations sur le trajet dans la base de données
  • Traite la demande de course avec la géolocalisation du passager
  • Envoie toutes les données traitées à l'algorithme de correspondance alimenté par ML
  • Recherche des informations sur les conducteurs présents à proximité dans la base de données
Vue d'ensemble du stockage Tech Stack d'uber
Vue d'ensemble du stockage Tech Stack d'uber

Exigences pour les projets de type Uber

Uber a été lancé en 2009, et pendant très longtemps, la plateforme avait un backend avec une architecture monolithique. En d'autres termes, l'application utilisait une seule base de données ainsi que plusieurs serveurs d'applications pour gérer toutes les demandes en ligne.

Pour la période initiale, cela a très bien fonctionné. Cependant, à mesure que la plate-forme grandissait, le besoin de nouvelles fonctionnalités augmentait également. Et pour intégrer de nouvelles fonctionnalités, l'équipe de développement a dû déployer tout le code en une seule fois. Cela a affecté la vitesse de l'application et rendu le processus d'introduction de nouvelles fonctionnalités extrêmement risqué et chronophage. En effet, chaque intégration pourrait potentiellement faire tomber tout le système. Cela a conduit à l'adoption d'une architecture de microservices.

Microservices

Architecture de microservices d'Uber vers la mi-2018 de Jaeger
Architecture de microservice d'Uber vers la mi-2018 de Jaeger

En 2014, Uber a adopté l'architecture des microservices pour assurer une meilleure vitesse et de meilleures performances. Essentiellement, cette architecture comprend un groupe de services ciblés sur les fonctionnalités les uns des autres. Ainsi, l'équipe de développement peut facilement déployer un nouveau code de manière indépendante avec l'architecture de microservices, garantissant une mise à l'échelle complète du système.

DOMA (architecture système orientée domaine)

Bien que l'architecture des microservices ait été une énorme mise à niveau de l'architecture monolithique, l'équipe de développement d'Uber ne s'est pas arrêtée là. Ils ont adopté une nouvelle approche appelée DOMA - Domain-Oriented System Architecture avec le temps.

Selon cette approche, les développeurs orientent leur conception autour de collections de microservices associés. Et ces collections sont appelées domaines. De plus, les domaines sont également classés en différentes collections appelées couches. La couche spécifique à laquelle appartient chaque domaine établit les dépendances que les microservices de ce domaine peuvent prendre. C'est ce qu'on appelle la conception de couches.

Les développeurs rendent ensuite chaque domaine indépendant des autres en utilisant l'API Gateway. Ainsi, chaque domaine a sa propre logique et n'est pas lié aux autres domaines à l'intérieur de la même couche.

API de passerelle
passerelle affichant les détails internes des domaines - plusieurs services, tables de données, pipelines ETL, etc.

En termes simples, en fournissant une architecture organisée, des points d'extension prédéfinis et des passerelles de domaine, DOMA transforme l'architecture des microservices de quelque chose de compliqué en quelque chose de facilement compréhensible.

Quel cadre d'interface utilisateur Uber utilise-t-il ?

L'équipe de conception d'Uber se concentre sur l'amélioration constante de la conception de l'application en ajoutant de nouvelles fonctionnalités. Cependant, il s'agit d'un processus qui prend du temps. Ainsi, pour rationaliser les efforts de l'équipe de conception, ils ont créé un cadre d'interface utilisateur React appelé Base.

compteur de force conçu avec un cadre Web de base
compteur de force conçu avec un cadre Web de base

Base comprend des éléments d'application Uber préconçus, tels que des couleurs, des grilles, une typographie, des listes, des boutons et une iconographie. Le cadre a permis à l'équipe de conception de créer des conceptions à un rythme plus rapide tout en maintenant des normes et une cohérence UI/UX élevées.

Quelle est la pile technologique derrière l'application de livraison de nourriture Uber ?

En 2014, le backend d'Uber comprenait des langages comme Python, Mongo et MySQL. D'autre part, le système de répartition utilisait Node.js et Redis, tandis que les applications mobiles étaient alimentées par Java et Objective-C. Cependant, à mesure que les exigences évoluaient, les développeurs ont modifié presque tous les composants de la plate-forme.

Pile de technologies de marché

Le marché d'Uber est un aspect important qui gère tous les flux de données et l'analyse des données. Et la pile technologique utilisée pour créer ce marché comprend des langages tels que Python, Go, Java et Node. Examinons maintenant en détail cette pile de technologies de marché :

Le moteur d'exécution du voyage

Étant donné que le moteur d'exécution de trajet fait partie intégrante du marché, il a été initialement écrit en Node.js, qui a été préféré pour son traitement asynchrone, simple et à un seul thread. Node.js a également permis à l'équipe Uber de gérer de grandes quantités de connexions simultanées. Cependant, maintenant, la société crée de nouveaux services dans Go, qui est connu pour son efficacité, sa simultanéité et ses opérations de type sécurisé.

L'API de première ligne

L'API de première ligne dirige les demandes des appareils mobiles du conducteur et du passager vers d'autres API et services. Ceci est écrit en Node.js, sauf à la périphérie. Il utilise NGINX pour le front-end et effectue la terminaison SSL et une certaine authentification.

Connexion en temps réel

Pour prendre en charge de manière transparente les demandes de disponibilité les plus élevées, la pile du marché doit recevoir des informations en temps réel. Ainsi, les développeurs utilisent Ringpop, une bibliothèque pour ériger des systèmes distribués coopératifs. Grâce à cette bibliothèque, les développeurs bénéficient d'une connexion hautement disponible avec des bases de données distribuées telles que Riak et DynamoDB.

La logique de correspondance

L'algorithme d'appariement, c'est-à-dire le système qui gère en temps réel les alertes des conducteurs et des passagers puis les met en correspondance, est écrit en Go et Node.js. Riak est leur base de données distribuée, tandis que Redis propose la mise en cache.

Optimisation dynamique des prix

L'équipe du marché d'Uber gère l'optimisation et l'équilibre grâce à une tarification dynamique, une correspondance intelligente et un positionnement de l'offre. Auparavant, la plupart des parties de cette pile étaient construites en utilisant Python avec Flask et uWSGI. Cependant, maintenant, les développeurs remplacent la plupart des Python par Go pour obtenir de meilleures performances.

Flux de données et apprentissage automatique

Uber utilise Kafka et ses propres bases de données de production pour le streaming de données. Et le stockage des données dépend de Hive, HDFS, Elasticsearch, MapReduce et des services Web de stockage de fichiers. L'entreprise a également développé son propre LIDAR qui assure le partage interne. Le LIDAR exécute Jupyter, JupyterHub, intégré à Apache Spark et à leur propre plate-forme de données.

Ensuite, il convient de noter qu'Uber possède sa propre plate-forme ML. En 2015, l'entreprise a décidé de mettre à l'échelle le ML afin de standardiser les outils et les flux de travail et d'éviter les anti-modèles de ML. Par conséquent, ils ont développé Michelangelo en 2017.

Michelangelo est une plate-forme alimentée par l'IA et le ML qui aide à gérer les données, à évaluer et à déployer des modèles, à faire des prévisions de tendances et à surveiller les pronostics. La plate-forme ML comprend un mélange de systèmes open source et de composants internes tels que :

  • HDFS
  • Samza
  • Étincelle
  • MLLib
  • TensorFlow
  • Cassandre
  • XGBoost
Fonction de délai de livraison estimé de l'application UberEATS
L'application UberEATS héberge une fonction de délai de livraison estimé alimentée par des modèles d'apprentissage automatique basés sur Michelangelo.

Technologies de pile d'une application Web

Pour l'application Web, les développeurs Uber utilisent Node.js, une plate-forme open source avec une énorme communauté d'ingénieurs Web. Node.js permet également aux développeurs de partager du code JavaScript entre le serveur et le client pour créer des applications Web universelles. Enfin, ils utilisent Browserify pour tous les regroupements côté client, car il est fourni avec Node. exigences du module basé sur js.

Le serveur Web d'Uber appelé Bedrock est construit sur Express.js, un framework Web populaire qui offre une sécurité et une internalisation complètes. Leur couche de communication de service interne, connue sous le nom d'Atreyu, gère toutes les communications avec les services backend et s'intègre à Bedrock. Cette couche de communication permet également à l'entreprise d'adresser facilement et rapidement des requêtes à ses API de service SOA.

Uber utilise les standards Flux et React.js pour le rendu des applications et la gestion des états. Le système de construction, Core Tasks, est un groupe prédéfini de scripts pour compiler et versionner les actifs frontend qui sont construits sur Gulp.js.

Technologies de pile d'une application mobile

Pour développer une application comme Uber, vous devez créer quatre applications mobiles différentes : passager Android, pilote Android, passager iOS et pilote iOS. Les développeurs créent des applications IOS à l'aide du langage de programmation Objective-C et Swift, tandis que l'application Android est développée à l'aide de Java. Mais à part elles, il existe peu d'autres technologies utilisées par les développeurs. Ceux-ci inclus:

Pile technologique d'applications Android

  • Gradle
  • OkHttp/Gson/Rénovation
  • Couteau à beurre
  • Dague
  • Expresso
  • Picasso
  • RxJava
  • Charpente

Pile technologique d'applications iOS

  • mâle
  • Maçonnerie/ SnapKit
  • KSCrashGenericName
  • OCMock

Quels langages de programmation puis-je utiliser pour créer une application de livraison de nourriture comme Uber ?

Si vous souhaitez développer une application comme Uber, vous pouvez choisir d'intégrer les technologies suivantes :

  • Node.js - pour l'application Web Marketplace
  • Python – pour l'application de réservation en ligne
  • Go- pour des performances et une vitesse améliorées
  • Browserify – pour le regroupement côté client
  • Java – pour les intégrations de services tiers
  • Entrepôt de données Apache Hive - pour l'analyse et la requête de données
  • ELk - pour le stockage des grumes, le traitement et l'expédition
  • Apache Cassandra – pour gérer d'énormes volumes de données
  • Service de base de données MySQL - pour la gestion de bases de données relationnelles
  • Docker – pour l'infrastructure du centre de données
  • HAProxy - pour le serveur proxy et l'équilibreur de charge

Ceci est un bref aperçu de la pile technologique d'Uber. Cependant, le simple fait de copier cette pile technologique sans faire vos propres recherches peut nuire à votre modèle commercial. De plus, l'application des mêmes technologies ne garantira pas le succès de votre entreprise de location de taxis.

Il est donc conseillé de créer votre application avec le moins de technologies possible. Au fur et à mesure que votre entreprise se développe, vous pouvez continuer à ajouter de nouvelles fonctionnalités en tirant parti des nouvelles technologies. Vous devez uniquement utiliser la pile technologique d'Uber comme source d'inspiration pour commencer.