在设计从OSS上传和下载数据的应用程序时,请使用我们推荐的性能设计模式,使应用程序达到最佳性能。我们还提供性能优化指导原则,供您在规划应用程序架构时参考。

对频繁访问的内容使用缓存

如果您的应用程序需要支持同一地区大量用户同时下载同一静态文件的场景,可以使用阿里云CDN缓存来优化性能。采用缓存可带来低时延和高传输速率。使用缓存的应用程序向OSS发送的直接请求更少,请求成本也更低。

阿里云CDN是建立并覆盖在承载网上,由不同区域的服务器组成的分布式网络。CDN将源站资源缓存到全国各地的边缘服务器,供用户就近获取,降低源站压力。

对时延敏感的应用程序进行超时重试

OSS针对管控类API,如GetService (ListBuckets)、PutBucket、GetBucketLifecycle等进行QPS限制。如果应用程序产生高请求速率,可能会收到HTTP 503减速响应。如果发生这类错误,建议您延迟几秒后进行重试。

OSS会对账号级的总访问QPS做默认限制(账号级10,000/s),如果您需要更高的QPS,请联系技术支持。注意,在整体访问QPS未超过上述阈值的情况下,如果请求集中在特定分区,服务端也可能会因为超过单分区的服务能力而限流并返回503;如果请求前缀合理打散(参见OSS性能与扩展性最佳实践),OSS会自动扩展分区数量来支持更高QPS的访问,您只需要等待并重试即可。

当您发出大量不同大小的请求时 (例如超过128 MB) ,建议您测量吞吐量,并重试最慢的5%请求。当您发出较小的请求时 (例如小于512 KB),时延通常在数十毫秒以内。建议您在2秒后重试GET或PUT操作。如果需要额外的重试,最好的做法是退出。例如,建议您在2秒后重试,然后等4秒后再次重试。

如果您的应用程序向OSS发出固定大小的请求,您期望每个请求的响应时间趋于一致。在这种情况下,推荐的策略是识别最慢的1%请求并重试。通常情况下,即使一次重试也能有效减少时延。

通过水平扩展和并行请求实现高吞吐量

OSS是一个超大的分布式系统。为了帮助您利用其规模,建议您将并行请求水平扩展到OSS服务终端节点,这种扩展方式有助于通过网络将负载分布在多个路径上。

对于高吞吐量传输,建议您在多个线程或多个实例中同时启动多个请求连接来并行上传和下载数据。对于某些应用程序,您可以通过在不同的线程或实例中同时启动多个请求来实现并行连接。扩展策略取决于您的应用程序和您访问的对象的结构。

当您要调整并发的请求数时,性能测量非常重要。建议从单个请求开始,测量当前的网络带宽以及其他资源的使用情况,从而识别瓶颈资源(即使用率最高的资源),以及可能的并发请求数。例如,如果一次处理一个请求导致CPU使用率为10%,则表明最多可以支持10个并发请求。

使用传输加速加快远距离上传下载速率

OSS的传输加速功能利用全球分布的云机房,将全球各地用户对您存储空间的访问,经过智能路由解析至就近的接入点,使用优化后的网络及协议,为云存储互联网的上传下载提供端到端的加速方案。

您可以使用OSS全球传输加速效果对比工具来测试您的客户端请求性能是否有提升。传输加速费用是单独的计费项,会和外网流出流量同时计算。例如通过传输加速域名从开启传输加速功能的存储空间中下载了1 GB的数据,则会产生1 GB传输加速费用和1 GB外网流出流量费用。