Motivation
After reading an article detailing Uber’s technology history as shared by their engineering team, I have some reflections to share. My article comprises two sections: firstly, a summary of the original piece, followed by my personal insights and observations.
Uber Backend Technology Evolution Timeline
- 2008: Uber was founded.
2009: Initially, Uber utilized the LAMP stack, with PHP as the primary programming language for the backend and MySQL as the main database.
2011: Uber became an early adopter of Node.js for its dispatch service and employed Python (Flask) for its API service, alongside MongoDB/Redis and PostgreSQL. This marked the transition from PHP to Node.js and Python.
2013: The architecture shifted from a monolithic structure to microservices, with Python serving as the primary framework for these microservices. This transition introduced significant operational complexity.
2014: A NoSQL database named Schemaless was created on top of MySQL, resembling Google Bigtable, to store trip data.
2016: The mobile app underwent a rewrite, utilizing RIP architecture.
2017: The tech department underwent a reorganization with the implementation of Project Ark.
2018: Following the reorganization, two major changes were made to the technical stack:
Java and Go were adopted as the main backend languages, replacing Python and JavaScript (Node.js), aiming for type safety and improved performance.
Domain Driven Development (DDD) started being implemented as the main architectural pattern, replacing microservices, facilitated by the shift to static types languages like Java and Go.
Consequently, the number of Git repositories was reduced from 12,000 to 4.
2020: The main dispatch API (gateway) previously built with Node.js was replaced by Go, as Node.js (and JavaScript) were considered deprecated.
2021: Google Cloud Spanner was adopted as the primary SQL distributed database.
My learning
Nodejs: was never the primary backend framework at Uber. Instead, it was utilized only for the dispatch service. This decision in 2011 was made due to Node.js’s superior performance at the time. Uber phased out Node.js in favor of Go from 2018 to 2020. As of 2024, numerous articles still reference Uber’s use of Node.js, despite its obsolescence since 2020.
Python served as the main backend language from 2011 to 2018, handling all other API services besides the dispatch service in Nodejs.
Java/Go: In 2018, Uber replaced Python with Java/Go as the primary backend languages to gain “type safety” (for me, it means a better quality, higher productivity, easier to maintain) and performance
Database shift: The company initially started with classical SQL databases, then transitioned to NoSQL (2014) before reverting back to a distributed SQL (2021).
Paradigm shift: Arguably, the most significant change occurred during 2018–2020 when Uber shifted from scripting languages (JavaScript, Python) to statically typed languages (Java/Go). This change not only involved switching programming languages but also represented a significant shift in mindset.
Architecture shift: Since 2020, with the coming of static typed languages, domain design (Domain Driven Design — DDD) has become the main architecture for backend instead of microservices approach. They introduce a concept of Domain-Oriented Microservice Architecture, that regroups microservices inside a domain. For me, this Uber “domain architecture” is just a refactoring of existing microservices that follow the concept of domain, not really a clean DDD architecture.
The excessive popularity of microservices in the scripting language world may stem from differences in the appreciation of Object-Oriented Programming (OOP), which forms the foundation of statically typed languages.
The article fails to elaborate on how these major transitions occurred. It is speculated that the reorganization with Project Ark in 2017 brought in a wave of new engineers with backgrounds in statically typed languages and OOP, facilitating the change.
All these significant shifts occurred during Thuan Pham’s tenure as CTO from 2013 to 2020 (he is not my uncle 🙂) .
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.