Uber Tech Stack e architettura del software: come è stato costruito Uber?

Pubblicato: 2022-01-17

Uber è diventato un nome familiare. L'incredibile piattaforma consente agli utenti di prenotare il servizio taxi in soli quattro semplici passaggi. L'app Uber garantisce un servizio rapido e una comodità ottimale, non c'è da stupirsi che sia esplosa in popolarità.

Sapevi che Uber ha 98 milioni di utenti attivi mensili? Inoltre, la società ha generato entrate per 11,1 miliardi di dollari nel 2020? Uber ha dato un classico esempio per le startup e i servizi di taxi esistenti. Ogni organizzazione punta a replicare il successo di Uber offrendo servizi di taxi grandine veloci e convenienti.

Se anche tu sei sbalordito dall'immenso successo di Uber, questo articolo è per te. Qui, discuteremo dello stack tecnologico e dell'architettura software di Uber, e questo ti darà una migliore comprensione della piattaforma e ti aiuterà a creare la tua app per i servizi di taxi da zero. Quindi iniziamo.

Come faccio a creare un'app in tempo reale come Uber?

Per creare un'app in tempo reale come Uber, devi prima comprenderne i diversi componenti, che sono i seguenti:

App per passeggeri

Se hai già utilizzato l'app Uber, ti identificherai facilmente con la funzionalità dell'app passeggero. Questo componente dell'app ha tutte le funzionalità necessarie agli utenti per prenotare un taxi, come la scelta della corsa, il calcolatore delle tariffe, i pagamenti online, il tracciamento GPS, ecc.

App del conducente

L'app del conducente viene utilizzata dai tassisti che mostrano le nuove richieste di taxi da parte dei passeggeri. Utilizzando questo pannello, i conducenti possono accettare o rifiutare le richieste di viaggio e verificare la posizione esatta del passeggero utilizzando la mappa integrata.

Il mercato

Il mercato collega le due applicazioni: l'app Passeggero e l'app Driver. Svolge i compiti più complicati che riguardano l'abbinamento dei passeggeri con gli autisti e la gestione dei pagamenti.

Quindi, se desideri creare un'app come Uber, avrai bisogno di tre pannelli diversi. Il primo pannello consentirà ai passeggeri di prenotare un taxi e il secondo pannello consentirà ai conducenti di accettare richieste di passaggio. Infine, un terzo pannello riceverà le richieste dei primi due e gestirà tutte le operazioni online.

Come costruire il prossimo Uber?

Uber è un servizio taxi-grandine di grande successo che offre la massima comodità ai passeggeri. Lo sviluppo di un'app come Uber può comportare una notevole quantità di denaro e un team di sviluppo app competente.

Oltre a questo, ci sono alcune altre cose da considerare durante lo sviluppo di un'app come Uber.

Dai un'occhiata ai tuoi concorrenti.

È un'ottima idea cercare app che stanno attualmente tentando di risolvere lo stesso problema che cerchi di risolvere con la tua app. Guardare queste app ti aiuterà a farti un'idea sulle loro caratteristiche, funzionalità e pubblico di destinazione.

Inoltre, uno sguardo approfondito al panorama competitivo ti aiuterà a capire come operano i tuoi concorrenti. Ad esempio, controllare i loro social media ti consentirà di raccogliere informazioni sulla loro strategia di marketing, sull'evoluzione del prodotto e sulle valutazioni della soddisfazione dei clienti. Tutto questo ti aiuterà a lanciare un'app di successo.

Conosci i tuoi potenziali utenti

Prima di passare allo sviluppo di app, devi sapere chi utilizzerà la tua app. Solo se conosci il tuo pubblico di destinazione sarai in grado di comunicare correttamente con loro.

Puoi raccogliere tutti i dati demografici dei tuoi potenziali utenti, come età, posizione, sesso, comportamenti, preferenze, ecc. Una volta terminato, puoi discutere l'idea della tua app con le persone a cui tieni.

Rimani concentrato sull'esperienza dell'utente.

L'esperienza utente è uno degli aspetti chiave di un'app di successo. Le persone vogliono utilizzare app che offrono un'interfaccia utente e un'esperienza utente semplici ma intuitive. Un'interfaccia utente straordinaria offre un'esperienza di navigazione senza interruzioni e un'esperienza utente intuitiva garantisce facilità d'uso.

Fornire una buona esperienza utente porta a una migliore acquisizione di utenti e a maggiori download.

Prova con un MVP

Un prodotto minimo valido (MVP) è la prima versione base del prodotto che supporta funzionalità minime ma cruciali. È consigliabile creare un MVP prima di sviluppare un'app a tutti gli effetti in quanto consente un time-to-market più rapido, attira i primi utenti e realizza un adattamento al mercato del prodotto sin dall'inizio.

Una volta che l'MVP viene rilasciato agli utenti, si ottiene il loro feedback iniziale. Sulla base di questo feedback, puoi reiterare, correggere bug e introdurre nuove funzionalità che forniranno al tuo prodotto un vantaggio competitivo.

Come funziona tecnicamente l'app Uber?

come funziona Uber

L'app Uber elabora una grande quantità di dati sfruttando le piattaforme ML e di analisi dei dati sviluppate internamente. Quando un passeggero richiede un taxi, vengono generati molti dati. Ad esempio, l'app riceve i dati sul passeggero, la sua posizione, le informazioni sulla carta di credito, il costo della corsa, i tassisti nelle vicinanze, ecc. E gradualmente, tutte queste informazioni viaggiano attraverso l'intero sistema. Vediamo come.

Una volta richiesta una corsa, la piattaforma:

  • Salva tutte le informazioni sulla corsa nel database
  • Elabora la richiesta di corsa con la geolocalizzazione del passeggero
  • Invia tutti i dati elaborati all'algoritmo di corrispondenza basato su ML
  • Cerca informazioni sui driver presenti nelle vicinanze nel database
Panoramica dell'archiviazione dello stack tecnologico di uber
Panoramica dell'archiviazione dello stack tecnologico di uber

Requisiti per progetti simili a Uber

Uber è stato lanciato nel 2009 e per molto tempo la piattaforma ha avuto un back-end con un'architettura monolitica. In altre parole, l'app utilizzava un unico database insieme a diversi server di app per gestire tutte le richieste online.

Per il periodo iniziale, questo ha funzionato bene. Tuttavia, con la crescita della piattaforma, è aumentata anche la necessità di nuove funzionalità. E per integrare nuove funzionalità, il team di sviluppo ha dovuto distribuire tutto il codice in una volta. Ciò ha influito sulla velocità dell'app e ha reso il processo di introduzione di nuove funzionalità estremamente rischioso e dispendioso in termini di tempo. Questo perché ogni integrazione potrebbe potenzialmente far cadere l'intero sistema. Ciò ha portato all'adozione dell'architettura di microservizi.

Microservizi

Architettura di microservizi di Uber verso la metà del 2018 da Jaeger
Architettura di microservizi di Uber verso la metà del 2018 da Jaeger

Nel 2014 Uber ha adottato l'architettura dei microservizi per garantire velocità e prestazioni migliori. In sostanza, questa architettura include un gruppo di servizi mirati l'uno alla funzionalità dell'altro. Pertanto, il team di sviluppo può distribuire facilmente il nuovo codice indipendentemente dall'architettura dei microservizi, garantendo una scalabilità completa del sistema.

DOMA (architettura di sistema orientata al dominio)

Sebbene l'architettura dei microservizi sia stata un enorme aggiornamento all'architettura monolitica, il team di sviluppo di Uber non si è fermato qui. Con il tempo hanno adottato un nuovo approccio chiamato DOMA- Domain-Oriented System Architecture.

Secondo questo approccio, gli sviluppatori orientano la loro progettazione attorno a raccolte di microservizi correlati. E queste raccolte sono chiamate domini. Inoltre, i domini sono anche classificati in diverse raccolte chiamate layer. Il livello specifico a cui appartiene ogni dominio stabilisce quali dipendenze possono assumere i microservizi all'interno di quel dominio. Questo è chiamato design del livello.

Gli sviluppatori rendono quindi ogni dominio indipendente dagli altri utilizzando l'API Gateway. Pertanto, ogni dominio ha la sua logica e non è correlato agli altri domini all'interno dello stesso livello.

API gateway
gateway che mostra i dettagli interni dei domini: servizi multipli, tabelle di dati, pipeline ETL, ecc.

In parole semplici, fornendo un'architettura organizzata, punti di estensione predefiniti e gateway di dominio, DOMA trasforma l'architettura dei microservizi da qualcosa di complicato a qualcosa di facilmente comprensibile.

Quale framework dell'interfaccia utente utilizza Uber?

Il team di progettazione di Uber si concentra sull'aggiornamento costante del design dell'app aggiungendo nuove funzionalità. Tuttavia, questo è un processo che richiede tempo. Quindi, per snellire gli sforzi del team di progettazione, hanno creato un framework React UI chiamato Base.

misuratore di forza progettato con framework web di base
misuratore di forza progettato con framework web di base

Base include elementi dell'app Uber pre-progettati, come colori, griglie, tipografia, elenchi, pulsanti e iconografia. Il framework ha consentito al team di progettazione di creare progetti a un ritmo più rapido, pur mantenendo elevati standard e coerenza UI/UX.

Qual è lo stack tecnologico dietro l'app per la consegna di cibo Uber?

Nel 2014, il backend di Uber includeva linguaggi come Python, Mongo e MySQL. D'altra parte, il sistema di invio utilizzava Node.js e Redis, mentre le app mobili erano basate su Java e Objective-C. Tuttavia, con l'evoluzione dei requisiti, gli sviluppatori hanno modificato quasi tutti i componenti della piattaforma.

Stack di tecnologie del mercato

Il mercato di Uber è un aspetto importante che gestisce tutti i flussi di dati e l'analisi dei dati. E lo stack tecnologico utilizzato per costruire questo mercato include linguaggi come Python, Go, Java e Node. Ora diamo un'occhiata in dettaglio a questo stack di tecnologie del mercato:

Il motore di esecuzione del viaggio

Poiché il motore di esecuzione del viaggio è parte integrante del mercato, è stato originariamente scritto in Node.js, che era preferito per la sua elaborazione asincrona, semplice e a thread singolo. Node.js ha anche consentito al team Uber di gestire grandi quantità di connessioni simultanee. Tuttavia, ora l'azienda crea nuovi servizi in Go, noto per le sue operazioni di efficienza, concorrenza e type-safe.

L'API in prima linea

L'API di prima linea indirizza le richieste dai dispositivi mobili del conducente e del passeggero ad altre API e servizi. Questo è scritto in Node.js, tranne che sul bordo. Utilizza NGINX per il front-end ed esegue la terminazione SSL e alcune autenticazioni.

Connessione in tempo reale

Per supportare senza problemi le richieste di disponibilità più elevate, lo stack del mercato deve ricevere informazioni in tempo reale. Pertanto, gli sviluppatori utilizzano Ringpop, una libreria per la creazione di sistemi distribuiti cooperativi. Grazie a questa libreria, gli sviluppatori ottengono una connessione altamente disponibile con database distribuiti come Riak e DynamoDB.

La logica della corrispondenza

L'algoritmo di corrispondenza, ovvero il sistema che gestisce gli avvisi di piloti e motociclisti in tempo reale e poi li abbina, sono scritti in Go e Node.js. Riak è il loro database distribuito, mentre Redis offre la memorizzazione nella cache.

Ottimizzazione dinamica dei prezzi

Il team di mercato di Uber gestisce l'ottimizzazione e l'equilibrio attraverso prezzi dinamici, abbinamento intelligente e posizionamento dell'offerta. In precedenza, la maggior parte di questo stack è stata creata utilizzando Python con Flask e uWSGI. Tuttavia, ora gli sviluppatori stanno sostituendo la maggior parte di Python con Go per ottenere prestazioni maggiori.

Streaming di dati e apprendimento automatico

Uber utilizza Kafka e i propri database di produzione per lo streaming dei dati. E l'archiviazione dei dati dipende da Hive, HDFS, Elasticsearch, MapReduce e dai servizi Web di archiviazione file. L'azienda ha inoltre sviluppato un proprio LIDAR che garantisce la condivisione interna. Il LIDAR esegue Jupyter, JupyterHub, integrato con Apache Spark e la propria piattaforma dati.

Andando avanti, è interessante notare che Uber ha una propria piattaforma ML. Nel 2015, l'azienda ha deciso di ridimensionare il ML per standardizzare gli strumenti e i flussi di lavoro ed evitare gli anti-pattern del ML. Di conseguenza, hanno sviluppato Michelangelo nel 2017.

Michelangelo è una piattaforma basata su AI e ML che aiuta a gestire i dati, valutare e distribuire modelli, fare previsioni di tendenza e monitorare la prognosi. La piattaforma ML comprende un mix di sistemi open source e componenti interni come:

  • HDFS
  • Samza
  • Scintilla
  • MLLib
  • TensorFlow
  • Cassandra
  • XGBoost
Funzione di tempo di consegna stimato dell'app UberEATS
L'app UberEATS ospita una funzione sui tempi di consegna stimati basata su modelli di apprendimento automatico basati su Michelangelo.

Stack tecnologie di un'applicazione web

Per l'app basata sul Web, gli sviluppatori Uber utilizzano Node.js, una piattaforma open source con una vasta comunità di ingegneri web. Node.js consente inoltre agli sviluppatori di condividere il codice JavaScript tra il server e il client per creare applicazioni Web universali. Infine, usano Browserify per tutti i raggruppamenti lato client in quanto viene fornito con Node. requisiti del modulo basato su js.

Il server web di Uber chiamato Bedrock è basato su Express.js, un popolare framework web che offre sicurezza e interiorizzazione complete. Il loro livello di comunicazione del servizio interno, noto come Atreyu, gestisce tutte le comunicazioni con i servizi di back-end e si integra con Bedrock. Questo livello di comunicazione consente inoltre all'azienda di effettuare richieste alle API del servizio SOA in modo semplice e rapido.

Uber utilizza Flux e React.js standard per il rendering delle applicazioni e la gestione dello stato. Il sistema di compilazione, Core Tasks, è un gruppo predefinito di script per la compilazione e la versione di asset frontend basati su Gulp.js.

Stack tecnologie di un'applicazione mobile

Per sviluppare un'app come Uber, devi creare quattro diverse app mobili: passeggero Android, conducente Android, passeggero iOS e conducente iOS. Gli sviluppatori creano app IOS utilizzando il linguaggio di programmazione Objective-C e Swift, mentre l'app Android viene sviluppata utilizzando Java. Ma a parte loro, ci sono poche altre tecnologie utilizzate dagli sviluppatori. Questi includono:

Stack tecnologico dell'app Android

  • Grad
  • OkHttp/Gson/Retrofit
  • Coltello da burro
  • Pugnale
  • Caffè espresso
  • Picasso
  • RxJava
  • Rivestire di legno

Stack tecnologico dell'app iOS

  • secchio
  • Muratura/SnapKit
  • KScrash
  • OCMock

Quali linguaggi di programmazione posso usare per creare un'app per la consegna di cibo come Uber?

Se vuoi sviluppare un'app come Uber, puoi scegliere di integrare le seguenti tecnologie:

  • Node.js – per l'app Web Marketplace
  • Python – per l'app di prenotazione basata sul Web
  • Go- per prestazioni e velocità migliorate
  • Browserify: per il raggruppamento lato client
  • Java – per integrazioni di servizi di terze parti
  • Data warehouse di Apache Hive: per analisi e query di dati
  • ELk: per la memorizzazione dei registri, l'elaborazione e la spedizione
  • Apache Cassandra – per la gestione di enormi volumi di dati
  • MySQL Database Service- per la gestione di database relazionali
  • Docker: per l'infrastruttura del data center
  • HAProxy – per server proxy e bilanciamento del carico

Questa è una rapida carrellata dello stack tecnologico di Uber. Tuttavia, copiare semplicemente questo stack tecnologico senza fare le tue ricerche può essere dannoso per il tuo modello di business. Inoltre, l'applicazione delle stesse tecnologie non garantirà il successo per la tua attività di trasporto di taxi.

Quindi, è consigliabile creare la tua app con il minor numero possibile di tecnologie. A poco a poco, man mano che la tua attività si espande, puoi continuare ad aggiungere nuove funzionalità sfruttando le nuove tecnologie. Devi solo utilizzare lo stack tecnologico di Uber come fonte di ispirazione per iniziare.