260 أسطر
5.2 KiB
Markdown
260 أسطر
5.2 KiB
Markdown
# Task 4 — Scalability & Load Distribution (15,000 Requests/Second)
|
||
|
||
## Overview
|
||
|
||
This document proposes a scalable architecture for deploying an application on **Ghaymah Cloud** capable of handling **15,000 HTTP requests per second** while maintaining high availability, fault tolerance, and low response latency.
|
||
|
||
---
|
||
|
||
# 1. High-Level Architecture
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
|
||
Users[Users]
|
||
|
||
Users --> DNS[Ghaymah DNS / Edge]
|
||
|
||
DNS --> LB[Load Balancer]
|
||
|
||
LB --> A1[Container 1]
|
||
LB --> A2[Container 2]
|
||
LB --> A3[Container 3]
|
||
LB --> A4[...]
|
||
LB --> A39[Container 39]
|
||
|
||
A1 --> Redis[(Redis Cache)]
|
||
A2 --> Redis
|
||
A3 --> Redis
|
||
A39 --> Redis
|
||
|
||
Redis --> DB[(Primary Database)]
|
||
|
||
DB --> Storage[(Ghaymah Block Storage)]
|
||
|
||
subgraph AutoScaling
|
||
Metrics[CPU • Memory • RPS]
|
||
Decision{Scale?}
|
||
ScaleOut[Add Containers]
|
||
ScaleIn[Remove Containers]
|
||
|
||
Metrics --> Decision
|
||
Decision -->|High Load| ScaleOut
|
||
Decision -->|Low Load| ScaleIn
|
||
end
|
||
|
||
LB -. Metrics .-> Metrics
|
||
ScaleOut -. Register New Instances .-> LB
|
||
```
|
||
|
||
---
|
||
|
||
# 2. Capacity Calculation
|
||
|
||
### Given
|
||
|
||
- Expected traffic = **15,000 requests/second**
|
||
- One container capacity = **500 requests/second**
|
||
|
||
### Required Containers
|
||
|
||
```
|
||
15,000 / 500 = 30 Containers
|
||
```
|
||
|
||
To avoid saturation during sudden traffic spikes or node failures, a **30% safety margin** is added.
|
||
|
||
```
|
||
30 × 1.30 = 39 Containers
|
||
```
|
||
|
||
## Final Capacity
|
||
|
||
| Item | Value |
|
||
|-------|------:|
|
||
| Target Load | 15,000 req/s |
|
||
| Capacity per Container | 500 req/s |
|
||
| Base Containers | 30 |
|
||
| Safety Margin | 30% |
|
||
| Recommended Maximum | **39 Containers** |
|
||
|
||
---
|
||
|
||
# 3. Auto Scaling Policy
|
||
|
||
Recommended configuration:
|
||
|
||
```yaml
|
||
min_replicas: 12
|
||
max_replicas: 39
|
||
|
||
target_cpu: 65%
|
||
target_memory: 70%
|
||
|
||
target_requests_per_container: 400
|
||
|
||
scale_up:
|
||
increase: 4 containers
|
||
cooldown: 60s
|
||
|
||
scale_down:
|
||
decrease: 2 containers
|
||
cooldown: 300s
|
||
```
|
||
|
||
### Scaling Rules
|
||
|
||
Scale Out when:
|
||
|
||
- CPU > 65%
|
||
- Memory > 70%
|
||
- Average Requests > 400 req/s per container
|
||
|
||
Scale In when:
|
||
|
||
- CPU < 35%
|
||
- Memory < 40%
|
||
- Traffic remains low for 5 minutes
|
||
|
||
This policy minimizes unnecessary scaling operations while maintaining performance.
|
||
|
||
---
|
||
|
||
# 4. Cold Start Strategy
|
||
|
||
Launching new containers requires image download, application startup, and service initialization.
|
||
|
||
To reduce startup latency:
|
||
|
||
### 1. Readiness Probe
|
||
|
||
New containers receive traffic **only after** passing repeated `/health` checks.
|
||
|
||
Example:
|
||
|
||
- Interval: 5 seconds
|
||
- Success Threshold: 3
|
||
|
||
---
|
||
|
||
### 2. Pre-Warmed Containers
|
||
|
||
Keep a minimum of **12 running replicas** to absorb sudden traffic spikes without waiting for new containers to start.
|
||
|
||
---
|
||
|
||
### 3. Lightweight Docker Images
|
||
|
||
Use slim base images such as:
|
||
|
||
```text
|
||
python:3.11-slim
|
||
```
|
||
|
||
Smaller images reduce image pull time significantly.
|
||
|
||
---
|
||
|
||
### 4. Predictive Scaling
|
||
|
||
Scale based on traffic trends rather than waiting until CPU reaches its maximum threshold.
|
||
|
||
---
|
||
|
||
### 5. Connection Draining
|
||
|
||
Before terminating a container:
|
||
|
||
- Stop accepting new requests.
|
||
- Finish active requests.
|
||
- Remove the container gracefully.
|
||
|
||
This prevents user-facing errors during scale-down.
|
||
|
||
---
|
||
|
||
# 5. Load Balancing Strategy
|
||
|
||
The Load Balancer should distribute requests evenly across all healthy containers.
|
||
|
||
Recommended algorithm:
|
||
|
||
- Round Robin
|
||
- Least Connections (preferred for variable workloads)
|
||
|
||
Health checks should continuously monitor:
|
||
|
||
- `/health`
|
||
- Container availability
|
||
- Response latency
|
||
|
||
Unhealthy containers should automatically be removed from rotation.
|
||
|
||
---
|
||
|
||
# 6. High Availability
|
||
|
||
To improve reliability:
|
||
|
||
- Deploy multiple container replicas.
|
||
- Eliminate single points of failure.
|
||
- Automatically replace unhealthy containers.
|
||
- Use horizontal scaling instead of vertical scaling.
|
||
- Keep the application stateless whenever possible.
|
||
|
||
---
|
||
|
||
# 7. Using Ghaymah Block Storage
|
||
|
||
The application layer remains **stateless**, allowing containers to be created or removed without affecting user requests.
|
||
|
||
Persistent storage is required for:
|
||
|
||
- User uploads
|
||
- Database storage
|
||
- Persistent logs
|
||
- Queue data
|
||
- Shared application files
|
||
|
||
Ghaymah Block Storage provides durable volumes that remain available even if containers are recreated.
|
||
|
||
Benefits include:
|
||
|
||
- Persistent data
|
||
- Easy attachment to new containers
|
||
- Independent lifecycle from application containers
|
||
- Simplified disaster recovery
|
||
|
||
---
|
||
|
||
# 8. Design Summary
|
||
|
||
| Component | Purpose |
|
||
|-----------|---------|
|
||
| Ghaymah DNS | Entry point |
|
||
| Load Balancer | Traffic distribution |
|
||
| 39 Containers | Handle application traffic |
|
||
| Redis Cache | Reduce database load |
|
||
| Primary Database | Persistent data |
|
||
| Ghaymah Block Storage | Durable storage |
|
||
| Auto Scaling | Automatic scaling |
|
||
| Health Checks | Availability monitoring |
|
||
|
||
---
|
||
|
||
# Conclusion
|
||
|
||
The proposed architecture can reliably handle **15,000 requests per second** using horizontal scaling on Ghaymah Cloud.
|
||
|
||
Key design principles include:
|
||
|
||
- Horizontal scalability
|
||
- Automatic load balancing
|
||
- Redis caching
|
||
- Health checks
|
||
- Automatic scaling
|
||
- Graceful container lifecycle
|
||
- Persistent storage using Ghaymah Block Storage
|
||
|
||
This architecture delivers high availability, fault tolerance, and consistent performance under heavy production workloads.
|