The Architecture of Schemaless, Uber Engineering’s Trip Datastore Using MySQL

Jakob Holdgaard Thomsen
9 min readintermediate
--
View Original

Overview

The article discusses the architecture of Schemaless, Uber Engineering's scalable and fault-tolerant datastore built on MySQL. It details the system's design, including its node types, data handling, and the use of buffered writes to ensure data integrity and availability.

What You'll Learn

1

How to design a scalable datastore using MySQL

2

Why buffered writes are essential for data integrity in distributed systems

3

How to implement a fault-tolerant architecture with worker and storage nodes

Key Questions Answered

What is the architecture of Uber's Schemaless datastore?
Schemaless consists of worker nodes that handle client requests and storage nodes that manage data. Worker nodes distribute requests to storage nodes, which are organized into shards for efficient data retrieval. This architecture allows for independent scaling of components and ensures high availability.
How does Schemaless handle read and write requests?
Read requests can be served from any storage node, while write requests must go to the master node. If the master is down, writes can still be buffered to another master, ensuring data persistence and availability even during failures.
What are buffered writes and why are they important?
Buffered writes minimize data loss by writing requests to multiple clusters. If a master fails before replication, the data is still available in a secondary cluster, ensuring that writes are not lost and can be read once the master is back online.
How does Schemaless ensure data consistency?
Schemaless uses idempotency to ensure that if a cell with the same row key, column name, and ref key already exists, the write is rejected. This prevents duplicate data and maintains consistency across the datastore.

Key Statistics & Figures

Number of shards configured
4096
Each data set in Schemaless is divided into this fixed number of shards for efficient data management.

Technologies & Tools

Some links below are affiliate links. We may earn a commission if you make a purchase.

Key Actionable Insights

1
Implementing a fault-tolerant architecture with separate worker and storage nodes can significantly enhance your application's reliability.
By isolating the request handling and data storage components, you can scale each independently, which is crucial for high-traffic applications.
2
Utilizing buffered writes can protect against data loss during node failures in distributed systems.
This technique ensures that even if a master node fails, the data is still preserved in secondary clusters, allowing for seamless recovery.
3
Understanding the importance of read and write request handling can optimize performance in your database architecture.
By configuring your system to handle reads from any node and writes to a master, you can achieve better load distribution and faster response times.

Common Pitfalls

1
Relying solely on a single master node can lead to data unavailability during failures.
If the master node goes down, writes may be buffered elsewhere, making them temporarily inaccessible. It's crucial to implement secondary masters to mitigate this risk.