Big data workloads frequently exceed the Azure Storage max ingress and egress limits (https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits). For example, the max ingress limit for a GRS account in the United States is currently 10 Gbps. When the limit is exceeded, the Azure Storage service fails a percentage of incoming requests, and this causes the client to initiate the retry policy. The retry policy delays requests by sleeping, but the sleep duration is independent of the client throughput and account limit. This results in low throughput, due to the high number of failed requests and thrashing causes by the retry policy.
To fix this, we introduce a client-side throttle which minimizes failed requests and maximizes throughput. Tests have shown that this improves throughtput by ~34% when the storage account max ingress and/or egress limits are exceeded.