Uber is a ridesharing software solution that has revolutionised the dynamics of the traditional taxi industry. Established in 2009, the company rapidly gained popularity as an attractive transport alternative to conventional taxi services by offering a convenient user experience at an affordable price point.
CNBC ranked Uber as the second most disruptive company of 2018. Though it has since fallen off the list, Uber still dominates the transport market significantly.
Through the years, it has grown massively, making headways into many diverse fields, introducing UberPool for ride-sharing services, offering peer-to-peer rides through UberPop, and establishing luxury travel options like UberLux. Uber is also working to develop flying taxis for faster travel.
In this article, we will gain insights into how Uber works, understanding the challenges it faces and Uber’s strategies to build a workaround for them.
Uber system design
Uber’s application is designed to look simple. But, when a rider requests a ride, an entire intricately connected backend ecosystem activates to deliver a smooth experience for its users.
Like most web-based applications, Uber began as a monolithic system architecture with a few application servers and a database. The initial system worked fine for providing services within a few cities, but, as its presence within the world grew, Uber shifted to a service-oriented architecture, consisting of numerous services.
The dispatch system design of Uber acts as a real-time marketplace where it matches the demands with the supply using smartphones.
So, the entire system has three broadly categorized services:
- The Demand Service
- The Supply Service
- The DISCO service
In the following sections, we will talk about all these services briefly.
The Demand Service
When a passenger books a ride, it gets connected to the demand service of Uber, accessing the GPS location of the rider to track the pickup point along with other specifications that the rider has requested for in the particular ride. This demand then matches with a cab within the supply pool.
The Supply Service
All the active drivers registered with Uber, periodically send their geolocation to the Supply Service along with other details like the status of the drivers, for future reference. This way, whenever demand arises, the supply service has the latest information and can pair with an appropriate supply.
Now that we understand the basic working of these two services, we will move on to the matching service, known as DISCO in Uber.
DISCO (Dispatch Optimization)
DISCO or Dispatch Optimization is where a series of events are activated in real-time to match demands with the supplies.
Reliable location tracking is pivotal for applications like Uber. Therefore, to enhance system output, Uber uses Google’s S2 library, which splits the entire system into small, equal-sized cells. These cells are uniquely marked for ease of identification.
When demand arises, DISCO matches all the available supplies within the vicinity of the rider’s cell ID, matching the best possible cab with the rider based on the existing roadmap. This is vital because the road infrastructure and the traffic conditions determine the ETAs of the driver candidates. The supply service then matches the best driver available for the journey.
The DISCO algorithm aims to decrease the trip ETA by reducing:
- Overall wait time
- Driving time and distance