DigitalOcean Spaces的最佳性能实践

DigitalOcean的对象存储解决方案Spaces旨在用于存储大量数据的可扩展性和经济性。这些是关于如何根据您的用例和应用程序体系结构从Spaces中获得最佳性能的一些建议。

DigitalOcean的对象存储解决方案Spaces旨在用于存储大量数据的可扩展性和经济性。

以下是有关如何根据您的用例和应用程序体系结构从Spaces中获得最佳性能的一些建议。

使用内容分发网络(CDN)

我应该什么时候这样做?

CDN或内容交付网络将您的资产缓存在地理位置分散的位置,以便为用户更快地下载和加载页面。

如果出现以下情况,您应该在Spaces前使用CDN:

  • 您的用例主要是处理来自Internet的GET请求,特别是对于小文件的频繁请求。

例如,面向网络的应用程序和媒体服务器尤其可能会因添加CDN而显着提高性能。

这是如何提高性能的?

通过将CDN与Spaces集成,您可以以低延迟和更高的数据传输速度向用户分发内容,而不是通过直接从Spaces提供内容获得。

CDN将从Spaces中获取请求的文件,并将它们缓存到最终用户附近。 通过为来自CDN缓存的相同文件提供未来请求,您可以减少发送到Spaces的GET请求数量,从而减少与应用程序交互时的用户总体延迟。

我如何实现这个?

有几个第三方CDN专门针对Spaces提供了文档,如FastlyKeyCDN ,其他大多数CDN都将以最少的配置与Spaces协同工作。

请注意,为了将Cloudflare用作CDN,您需要使用支持主机头重写的层(免费层目前不支持)。

避免小文件和使用多部分上传大文件

我应该什么时候这样做?

您应该考虑文件的大小以及将它们上传到Spaces的方式:

  • 处理小于1MB的文件。
  • 上传大于500MB的文件。

这是如何提高性能的?

空间用于存储和提供中等到大型文件。 大小为20MB到200MB的文件将为写入和读取提供最佳性能。 此外,将小文件合并为一个较大的文件将大大减少对Space的请求总数,而不是单独处理许多小文件。

我如何实现这个?

上传大于500MB的文件时,应使用多部分上传

我们建议将小于1MB的文件合并到一个较大的文件中。 你如何做到这一点将特定于你的特定文件和用例,但是一个例子是将每日日志文件连接到一个月度文件中。

为您的资源选择正确的数据中心

我应该什么时候这样做?

为Spaces选择正确的数据中心位置取决于Spaces连接的来源。

如果与Spaces的连接来自Droplet,那么在下列情况下您将看到最佳性能:

  • 理想情况下,将您的Droplet和Spaces放在同一个数据中心。
  • 或者,将您的Droplet和Spaces放置在由DigitalOcean的区域骨干网连接的数据中心。

如果与Spaces的连接来自Internet上的最终用户,则无论您的空间位于哪个区域,您在使用CDN时都会看到最佳性能。

这是如何提高性能的?

同一数据中心内的Droplet和空间延迟最少,但如果您的应用需要连接多个区域,请选择由DigitalOcean的区域骨干网连接的数据中心位置。 这将提供可预测和稳定的延迟,而不会丢失数据包,因为这些连接使用我们的专用链接而不是公共Internet。

我如何实现这个?

您可以在创建时为您的资源选择区域。 对于现有的基础设施,您可以将您的Droplet迁移到新的区域。

纽约市3号空间和纽约市1号,纽约市2号和纽约市3号飞机之间的交通流量超过了我们东北地区的主干线; AMS3中的空间和AMS2,LON1和FRA1中的Droplet之间的流量遍布我们的欧洲区域骨干网。

正确处理50x错误

我应该什么时候这样做?

此建议适用于您将文件上传到空间的任何时间。 您应该始终确保上传应用程序或库正确处理50x错误。

这是如何提高性能的?

通过正确的错误处理和重试逻辑,您的数据集将更快上传,并且需要较少的人工干预。 此外,如果没有此功能,上传过程中出现的任何50x错误都会导致数据出现空白。

我如何实现这个?

Spaces与S3的兼容性非常高,因此一种选择是使用一个完善的S3兼容客户端或库来进行上传,如s3cmd

如果您正在编写自己的代码,请确保使用指数回退来执行重试逻辑,以处理503减速响应。

优化您的请求率

我应该什么时候这样做?

在下列情况下,您应该考虑优化发送给Spaces的请求数的方法:

  • 您每秒发送超过200个请求。
  • 您的请求正受到速率限制。
  • 您经常遇到503 Slow Slow响应。

正如我们的发行说明中所述 ,在2018年2月15日,我们解决了一些问题,即某些Spaces客户的价格受限,尽管低于阈值。

这是如何提高性能的?

为确保所有客户在任何地区都能获得空间可用吞吐量的公平份额,我们在空间级别应用了速率限制。 确保您的上传保持在阈值内将防止意外的限制。 随着我们继续改进空间,我们也将重新评估这个门槛。

我如何实现这个?

根据您的使用情况,有几种方法可以开始优化您发送的请求数量。

  • 如果您以较高的速度上传许多小文件,请考虑将小文件合并为较大的文件
  • 如果您遇到节流问题,请确保您的上传应用程序或库正确处理50x错误
  • 如果您计划向Spaces推送超过200个请求/秒(定期或作为一次性上传的一部分),请打开支持通知单,以便我们帮助您准备工作量并避免对请求率造成任何临时限制。

改用本地或块存储

我应该什么时候这样做?

并非所有用例都适用于Spaces。 与所有对象存储一样,空间最适用于静态非结构化数据。

在下列情况下您应该使用本地或块存储:

  • 您正在存储动态或结构化数据,例如低延迟键/值存储和其他数据库。
  • 您对数据的请求率很高,例如流式视频。

这是如何提高性能的?

使用本地存储或块存储可以在某些情况下提供更好的性能,因为底层硬件设备提供低延迟I / O。 您可以访问对象存储与块存储服务以了解更多信息。

我如何实现这个?

您可以开始使用DigitalOcean如何使用块存储中的卷,或者先了解有关Linux存储概念和术语的更多信息。

如果您需要数据库解决方案,则可以查看RedisCassandra群集

下一步

有关DigitalOcean Spaces的更多信息,请参阅:

然后学习如何使用我们的API或您最喜爱的S3兼容工具管理空间:

并开始在我们的社区教程中使用Spaces:

您还可以阅读我们的发行说明