DigitalOcean的对象存储解决方案Spaces旨在用于存储大量数据的可扩展性和经济性。
以下是有关如何根据您的用例和应用程序体系结构从Spaces中获得最佳性能的一些建议。
使用内容分发网络(CDN)
我应该什么时候这样做?
CDN或内容交付网络将您的资产缓存在地理位置分散的位置,以便为用户更快地下载和加载页面。
如果出现以下情况,您应该在Spaces前使用CDN:
- 您的用例主要是处理来自Internet的GET请求,特别是对于小文件的频繁请求。
例如,面向网络的应用程序和媒体服务器尤其可能会因添加CDN而显着提高性能。
这是如何提高性能的?
通过将CDN与Spaces集成,您可以以低延迟和更高的数据传输速度向用户分发内容,而不是通过直接从Spaces提供内容获得。
CDN将从Spaces中获取请求的文件,并将它们缓存到最终用户附近。 通过为来自CDN缓存的相同文件提供未来请求,您可以减少发送到Spaces的GET请求数量,从而减少与应用程序交互时的用户总体延迟。
我如何实现这个?
有几个第三方CDN专门针对Spaces提供了文档,如Fastly和KeyCDN ,其他大多数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。
我如何实现这个?
您可以在创建时为您的资源选择区域。 对于现有的基础设施,您可以到新的区域。
纽约市3号空间和纽约市1号,纽约市2号和纽约市3号飞机之间的交通流量超过了我们东北地区的主干线; AMS3中的空间和AMS2,LON1和FRA1中的Droplet之间的流量遍布我们的欧洲区域骨干网。
正确处理50x错误
我应该什么时候这样做?
此建议适用于您将文件上传到空间的任何时间。 您应该始终确保上传应用程序或库正确处理50x错误。
这是如何提高性能的?
通过正确的错误处理和重试逻辑,您的数据集将更快上传,并且需要较少的人工干预。 此外,如果没有此功能,上传过程中出现的任何50x错误都会导致数据出现空白。
我如何实现这个?
Spaces与S3的兼容性非常高,因此一种选择是使用一个完善的S3兼容客户端或库来进行上传,如 。
如果您正在编写自己的代码,请确保使用指数回退来执行重试逻辑,以处理503减速响应。
优化您的请求率
我应该什么时候这样做?
在下列情况下,您应该考虑优化发送给Spaces的请求数的方法:
- 您每秒发送超过200个请求。
- 您的请求正受到速率限制。
- 您经常遇到503 Slow Slow响应。
正如我们的发行说明中所述 ,在2018年2月15日,我们解决了一些问题,即某些Spaces客户的价格受限,尽管低于阈值。
这是如何提高性能的?
为确保所有客户在任何地区都能获得空间可用吞吐量的公平份额,我们在空间级别应用了速率限制。 确保您的上传保持在阈值内将防止意外的限制。 随着我们继续改进空间,我们也将重新评估这个门槛。
我如何实现这个?
根据您的使用情况,有几种方法可以开始优化您发送的请求数量。
- 如果您以较高的速度上传许多小文件,请考虑将小文件合并为较大的文件 。
- 如果您遇到节流问题,请确保您的上传应用程序或库正确处理50x错误 。
- 如果您计划向Spaces推送超过200个请求/秒(定期或作为一次性上传的一部分),请打开支持通知单,以便我们帮助您准备工作量并避免对请求率造成任何临时限制。
改用本地或块存储
我应该什么时候这样做?
并非所有用例都适用于Spaces。 与所有对象存储一样,空间最适用于静态非结构化数据。
在下列情况下您应该使用本地或块存储:
- 您正在存储动态或结构化数据,例如低延迟键/值存储和其他数据库。
- 您对数据的请求率很高,例如流式视频。
这是如何提高性能的?
使用本地存储或块存储可以在某些情况下提供更好的性能,因为底层硬件设备提供低延迟I / O。 您可以访问对象存储与块存储服务以了解更多信息。
我如何实现这个?
您可以开始使用DigitalOcean中如何使用块存储中的卷,或者先了解有关Linux存储概念和术语的更多信息。
如果您需要数据库解决方案,则可以查看Redis或Cassandra群集 。
下一步
有关DigitalOcean Spaces的更多信息,请参阅:
然后学习如何使用我们的API或您最喜爱的S3兼容工具管理空间:
并开始在我们的社区教程中使用Spaces:
- 如何使用DigitalOcean空间自动备份
- 如何在Ubuntu 16.04上使用Nginx代理DigitalOcean Spaces
- 如何将Synology NAS备份至DigitalOcean Spaces
- 如何备份你的Git库到DigitalOcean Spaces
您还可以阅读我们的发行说明 。