Scaling the System and its Database for 10k request handling. What's right Sharding or Microservice going for Distributed database
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
When building a system intended to handle a high volume of requests, such as 10,000 requests per second, careful planning and strategic implementation of technologies are crucial. Two common techniques to handle such demands in a scalable and reliable manner are sharding and adopting a microservices architecture with a distributed database approach. Each strategy has distinct advantages and trade-offs, which are important to consider based on the specific requirements and resources of your project.
Sharding
Sharding is a type of database partitioning that separates very large databases into smaller, faster, and more easily managed parts called data shards. The rationale behind sharding is to distribute the data across multiple machines, thereby distributing the load and reducing the access latency.
Technical Implementation: When implementing sharding, data can be partitioned horizontally or vertically. Horizontal sharding, or sharding rows, means that each shard holds a subset of the data based on some sharding key, such as user ID or geographical location. Vertical sharding, on the other hand, involves partitioning columns under different database servers.
Example: Consider a database storing user data such as usernames, transactions, and histories. With horizontal sharding, user data can be distributed across several shards based on the user’s geographic location. For instance, North American users could be stored in one shard, European users in another, and so on.
Microservices with Distributed Databases
Microservices architecture is an approach to developing a single application as a suite of small services, each running in its own process and interacting with lightweight mechanisms, usually an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery.
With microservices, it's common to pair them with distributed databases. A distributed database is a database in which storage devices are not all attached to a common processor but spread across a network. This setup allows each microservice to manage its own database, therefore localizing the data logic and storage to the service itself which helps in achieving data isolation and resilience.
Example: In an e-commerce application, distinct microservices might handle user management, product catalog, order processing, and payment processing. Each of these services might use separate database instances that could be optimized accordingly—users and sessions could be stored in a high-availability setup while the product catalog might be optimized for read-heavy operations.
Sharding vs. Microservices for Distributed Databases
The decision between sharding and using a distributed database with microservices largely depends on specific project needs, but here are some considerations:
- Performance: Sharding can significantly increase performance as it reduces the server load and increases application availability. However, microservices allow for greater flexibility to scale individual parts of an application.
- Complexity and Overhead: Implementing sharding can be complex especially when dealing with cross-shard queries and transactions. Microservices add overhead in coordination and maintaining multiple databases.
- Data Integrity: Sharding can introduce data consistency challenges, especially in managing cross-shard operations. Microservices inherently encourage eventual consistency due to network latency and distributed data management.
Here’s a simple comparison:
| Aspect | Sharding | Microservices with Distributed Databases |
| Scalability | High, but complex scaling for cross-shard operations | High, easier to scale service-wise |
| Performance | Usually excellent, depends on shard management | Good, depends on network and database optimizations |
| System Complexity | High, due to managing sharding logic | High, due to managing many small components |
| Maintainability | Challenging, depending on the sharding mechanism | Easier, each service is independent but more components to manage |
| Data Integrity | Cross-shard data integrity is complex | Easier to manage within a service, complex across services |
Conclusion
Choosing between sharding and microservices with distributed databases largely depends on the specific requirements like transaction consistency needs, the expertise of the team, and the particular scalability considerations of the project. For systems requiring robust transactional consistency and complex queries, sharding might be the adequate option, whereas microservices could be preferable for applications needing high degrees of scalability and flexibility.

