Concurrency, Throughput, and Throttling
Parallel Part Uploads
Parts can upload simultaneously because they are independent. A single TCP connection at 100 Mbps transfers 12.5 MB/s. Four parallel connections quadruple throughput to 50 MB/s assuming sufficient bandwidth. This parallelism is the primary advantage over single PUT beyond retry resilience.
Optimal concurrency depends on bandwidth and latency. High latency links (cross continent uploads) benefit from more parallelism because each connection spends time waiting on round trips. Low latency links saturate with fewer connections. Start with 4 concurrent uploads and adjust based on throughput measurements.
Throughput Optimization
TCP slow start reduces initial throughput. A new connection takes several round trips to reach full speed. For small parts, slow start overhead dominates. Larger parts amortize slow start across more data. Alternatively, reuse connections across parts using HTTP keep alive to skip slow start entirely.
Server side throttling limits per client throughput. Hitting rate limits causes 429 Too Many Requests or 503 Service Unavailable. Implement exponential backoff: wait 1s, 2s, 4s between retries. Add jitter to prevent synchronized retry storms from multiple clients.
Bandwidth Fairness
Multiple uploads from the same client compete for bandwidth. Without coordination, a large background upload can starve interactive uploads. Implement priority queues: interactive uploads get higher concurrency, background uploads throttle during active use.
Server side, per tenant rate limiting prevents one customer from saturating shared infrastructure. Typical limits: 5,000 requests per second, 25 Gbps aggregate throughput per account. Exceeding limits triggers throttling across all that tenant operations.
Progress Reporting
Users expect progress indicators. Track bytes uploaded across all parts. Report percentage as uploaded_bytes / total_bytes. With parallel uploads, progress can jump in chunks as parts complete. Smooth the display by tracking in flight bytes too: a part 80% uploaded contributes 80% of its size to progress.