| Users / Requests | What Changes in Layers |
|---|---|
| 100 users | Simple layer interactions; single instance; minimal caching; direct DB calls from infrastructure layer |
| 10,000 users | Introduce caching in infrastructure; separate read/write layers; add load balancer; start using async processing in use cases |
| 1,000,000 users | Horizontal scaling of interface and infrastructure layers; database sharding; CQRS pattern for read/write separation; event-driven communication between layers |
| 100,000,000 users | Microservices splitting by bounded contexts; global distributed data stores; advanced caching/CDN; eventual consistency; multi-region deployment |
Clean Architecture layers in LLD - Scalability & System Analysis
Start learning this pattern below
Jump into concepts and practice - no test required
At small scale, the infrastructure layer's database access becomes the bottleneck due to synchronous calls and limited DB capacity.
As users grow, the interface layer's servers hit CPU and memory limits handling requests and orchestrating layers.
At large scale, network bandwidth and data consistency across layers become critical bottlenecks.
- Database Layer: Add read replicas, use connection pooling, implement caching (Redis/Memcached).
- Application Layer: Horizontal scaling with load balancers; use asynchronous messaging between layers.
- Interface Layer: Use CDNs for static content; implement API gateways for routing and throttling.
- Architecture: Apply CQRS and event-driven patterns to decouple layers and improve scalability.
- Data: Shard databases by user or feature; use eventual consistency where possible.
- At 10,000 users, expect ~5,000 QPS; a single DB instance can handle this with caching.
- At 1,000,000 users, ~500,000 QPS may require 50+ DB replicas and sharding.
- Network bandwidth: 1 Gbps supports ~125 MB/s; large user base needs multi-gigabit or distributed networks.
- Storage grows with data retention; consider tiered storage and archiving for old data.
Start by explaining the Clean Architecture layers and their responsibilities.
Discuss how each layer can become a bottleneck as users grow.
Propose scaling solutions layer by layer, focusing on database, application, and interface.
Use real numbers to justify your choices and show understanding of trade-offs.
Your database handles 1000 QPS. Traffic grows 10x. What do you do first?
Answer: Add read replicas and implement caching to reduce direct DB load before scaling application servers.
Practice
Solution
Step 1: Understand the role of each layer
The Entities layer holds the core business rules and logic, independent of external concerns.Step 2: Identify the correct layer for business logic
UI, Database, and Frameworks layers handle external interactions, not core logic.Final Answer:
Entities layer -> Option BQuick Check:
Business logic = Entities layer [OK]
- Confusing UI layer with business logic
- Thinking database layer contains core rules
- Mixing frameworks with core logic
Solution
Step 1: Identify the role of Interface Adapters
Interface Adapters convert data from external sources like databases into a form usable by inner layers.Step 2: Confirm other layers' roles
Entities hold business rules, Use Cases orchestrate logic, UI handles presentation, so adapting data fits Interface Adapters.Final Answer:
Interface Adapters layer -> Option DQuick Check:
Data adaptation = Interface Adapters [OK]
- Choosing Entities layer for data adaptation
- Confusing Use Cases with data conversion
- Selecting UI layer for database data handling
Solution
Step 1: Understand dependency rule in Clean Architecture
Dependencies always point inward, from outer layers to inner layers.Step 2: Apply to given flow
UI depends on Use Cases, which depend on Entities, so direction is UI -> Use Cases -> Entities.Final Answer:
UI -> Use Cases -> Entities -> Option CQuick Check:
Dependency direction = UI to Entities [OK]
- Reversing dependency direction
- Confusing which layer calls which
- Assuming Entities depend on UI
Solution
Step 1: Recall Clean Architecture dependency rules
Inner layers like Entities must be independent of external concerns like databases.Step 2: Identify why database code in Entities is wrong
It creates tight coupling and breaks separation of concerns.Final Answer:
Entities layer should not depend on external frameworks or databases -> Option AQuick Check:
Entities layer independence = true [OK]
- Thinking Entities handle UI
- Placing database code in UI layer
- Confusing database schemas with business logic
Solution
Step 1: Identify the principle for independence
The Dependency Rule states inner layers (business rules) do not depend on outer layers (UI, database).Step 2: Explain how this helps system flexibility
This separation allows changing UI or database without impacting core business logic.Final Answer:
Dependency Rule: Inner layers do not depend on outer layers -> Option AQuick Check:
Dependency Rule ensures flexibility [OK]
- Allowing UI to access Entities directly
- Putting business logic in database layer
- Mixing UI rendering with Use Cases
