这篇博文最初发表在 SwiftStack 博客上,原文链接 在此。
今天我很高兴地宣布 OpenStack Swift 2.0.0 版本发布。此版本包含存储策略——这是 Swift 贡献者社区一年工作的成果。存储策略是 Swift 开源四年以来最重要的进展。存储策略允许您根据您的使用场景定制您的存储基础设施。此版本标志着项目生命中的一个重要里程碑,将带来进一步的采用和社区增长。
您可以从 http://tarballs.openstack.org/swift/swift-2.0.0.tar.gz 获取 Swift 2.0。与往常一样,您可以在不中断客户端的情况下升级到此版本。
存储策略
什么是存储策略,为什么它们如此重要?存储策略允许部署者专门配置他们的 Swift 集群,以支持集群中存储数据的不同需求。
用例示例
配置存储策略后,用户可以创建一个具有特定策略的容器,存储在该容器中的所有对象都将根据该容器的存储策略进行存储。
让我们探讨两个由存储策略启用的用例:降低冗余的存储策略和地理特定存储策略。
我们通常建议在 Swift 集群中使用 3 倍复制。它为大多数数据提供了良好的耐用性和开销之间的平衡。但是,某些数据可以轻松地重新创建,不需要相同的耐用性。一个很好的例子是图像缩略图。如果原始分辨率图像使用 3 倍复制存储,则可以对重新采样的图像使用 2 倍复制存储。这 节省了 33% 的存储成本,并且任何数据丢失都可以通过从原始图像重新创建调整大小的图像来缓解。
当用于按需存储和提供用户生成的内容时(Swift 今天的使用方式),“降低冗余”存储策略可以节省大量的硬盘空间,从而降低成本。 存储策略可以创建以在同一集群中使用不同的复制因子,具体取决于需要存储的数据类型。
另一个例子是使用不同的存储策略来地理区分数据集。假设您的公司在达拉斯有一个中央办公室,在纽约有一个分支机构,在旧金山有一个分支机构。在一个分支机构中存储和使用的数据不需要与另一个分支机构共享,但中央办公室应该拥有所有内容的副本。使用 Swift 2.0,您可以创建一个引用达拉斯和纽约存储容量的策略,以及另一个引用旧金山和达拉斯存储容量的策略。现在,存储在“纽约”策略中的任何内容都将存储在纽约并可供快速查找。 “旧金山”策略也是如此。但是,中央达拉斯办公室也拥有分支机构中存储的所有内容。
中央办公室可以轻松管理离线档案,并且对每个分支机构的数据消耗具有很好的可见性。 Swift 2.0 中的存储策略增强了 Swift 现有的全局集群功能,并允许更细粒度地控制数据驻留的位置。
存储策略对部署者的影响
从概念上讲,存储策略非常简单:Swift 集群过去只支持一个对象环,现在可以利用多个对象环。Swift 中的每个环都描述了一组存储卷(即驱动器),并包含用于数据放置和故障处理的信息。有了存储策略,部署者可以配置他们的 Swift 集群以支持集群中存储数据的不同需求。
部署者可以安全地升级其现有集群以使用存储策略。并且集群仍然可以降级,至少直到您定义第二个存储策略为止。如果您配置了多个策略并恢复到存储策略之前的代码,新存储策略中的任何数据将无法访问,因为旧的 Swift 版本不知道如何访问它。
存储策略在 swift.conf 配置文件中定义。现有集群被视为具有默认的“策略零”。这意味着现有集群可以在不立即开始支持其他策略的情况下利用新代码。可以在同一个配置文件中配置新策略,然后将其提供给客户端。每个存储策略都有一个新的环。
存储策略的开发者文档包含更多信息,包括有关磁盘上数据布局、弃用策略以及背景一致性过程更改的详细信息。
存储策略对客户端的影响
存储策略仅以一种小方式扩展了 Swift API。在创建容器时,客户端现在可以发送 X-Storage-Policy 标头来设置该容器的策略。标头的值是存储策略的名称。可用存储策略的名称可以从集群的 /info 端点调用的结果中获得。
现有的 Swift 客户端仍然可以完全工作,使用这个新版本的 Swift。如果客户端发送容器创建请求,并且没有显式发送 X-Storage-Policy 值,则新容器将使用集群的默认策略创建。这意味着现有的 Swift 客户端应用程序将不会停止工作,并且除了设置容器上的策略之外,仍然可以利用 Swift 提供的所有功能。
存储策略只能在创建容器时设置在容器上。如果您需要更改策略,则必须先删除容器中的所有数据,删除容器,然后使用新的存储策略重新创建容器。但是,由于 Swift 对您可以拥有的容器数量没有限制,因此通常更容易简单地创建一个新容器。
社区参与
Swift 中的存储策略离不开整个贡献社区的参与。特别是,Paul Luse(Intel)、Clay Gerrard(SwiftStack)和 Sam Merritt(SwiftStack)通过提供巨大的关注、奉献、出色的想法和领导力来设计、编写和合并此功能,功不可没。
与 Paul Luse 一起,我在亚特兰大的 OpenStack Juno 会议上发表了关于存储策略的演讲。您可以在 此处观看它。
展望擦除码
我们几乎一年前开始在 Swift 中研究存储策略。去年 7 月,我们写道关于将擦除码支持添加到 Swift。 擦除码很棒,因为对于某些数据集,它们可以在提供非常高的耐用性的同时,在存储介质上提供巨大的节省。但是,为了将擦除码支持添加到 Swift,我们首先需要添加存储策略。
现在 Swift 2.0 中提供了存储策略,开发人员社区正在重新关注构建必要的组件,以支持 Swift 中的擦除码存储策略。策略是我们构建 Swift 中擦除码支持的基础,这将是 Swift 贡献者社区在今年余下时间里的主要重点。
使用 SwiftStack 部署 Swift
SwiftStack 提供启动和运行生产 Swift 集群的最简单和最快的方法。 有关 SwiftStack 的更多信息,请发送电子邮件至 [email protected],查看我们的 在线演示或注册 个性化演示。

swifter
“SwiftStack 提供启动生产 Swift 集群的最简单和最快方式”
一家公司——swiftstack 如何在一个如此开放的论坛上宣传他们的产品,尤其是在提到 Swift 的一项新功能和伟大功能时。这应该放在该功能上,而不是宣传它。如果他们在 swiftstack 博客中指定这些内容,我完全没问题,但在开放论坛上吹嘘是不被接受的,我认为。