Ceph 和 Swift:我们并不互相竞争。

转载

我刚刚从香港的 OpenStack 会议回来。一如既往,与许多人交谈并聆听演示或设计我们都喜欢的软件的未来,这真是太棒了。

在与不同的人聊天时,有一个问题反复出现:人们想知道“Ceph 是否比 Swift 更好”

自 2008 年以来一直参与 Swift 的开发,甚至在 OpenStack 还是一个想法之前,现在作为核心开发者,我的回答显然带有偏见。

当有更好的替代产品并且人们正在转向它时,我能理解。这是技术正常演变。我记得在过去,在 Linux 的早期,我顽固地想继续使用 Linux 终端和 Lynx 以及我的工具,避免使用 X11,因为我没有看到它的优点,现在我很高兴地使用 Mac OS X :)

但是 Ceph 和 Swift 实际上并没有竞争:它们是两种不同的技术,每种技术都有不同的用途。两者之间存在一些功能重叠,但两者具有不同的用例,并且实际上可以在同一部署中和谐共存。

功能比较

从高层视角来看,这两种对象存储技术之间的主要区别是

Ceph

  • 始于 2006 年
  • 用 C++ 编写。
  • 强一致性。
  • 块存储。
  • 对象存储。

Swift

  • 始于 2008 年
  • 用 Python 编写。
  • 最终一致性。
  • 对象存储。
  • 在真正 大型 公有云中投入生产。

Ceph 的功能远不止对象存储。将其用作开源块存储(一种提供远程虚拟磁盘的方式)是人们开始感兴趣的原因。由于它似乎正在成为 OpenStack 部署中一个非常受欢迎的块存储系统选项,因此这对 OpenStack 和开源社区来说都是一个胜利。

Ceph 能够执行块存储的原因在于它是强一致性的,确保您写入的所有内容在向客户端发送“确定”之前都写入磁盘。用 C++ 编写使 Ceph 针对性能进行了优化,并且由于其设计方式,允许客户端直接与存储服务器(OSD)通信。

共享文件系统功能仍在开发中,尚未完全准备好投入生产,但当它准备好时,应该可以解决人们尝试解决了几十年的真正困难且复杂的问题。

另一方面,Swift 只做一件事,并且做得很好。它的唯一目标是执行对象存储并提供 REST API 来访问它。它是最终一致的。这意味着当硬件发生故障(在集群中不可避免)时,Swift 将回退到为数据提供高可用性。Swift 的最终一致性窗口最有可能出现在读取在硬件发生故障时被覆盖的对象以及在容器中创建许多对象的同时查看容器列表时。

这种最终一致性也允许 Swift 集群部署在广阔的地理区域。这不仅仅是“重放日志”风格的复制,而是允许部署者将集群配置为同步或异步复制到不同的不同区域。Swift 代理服务器知道它们所在的区域,这允许部署者在写入新数据时针对吞吐量或分散进行优化。

用 Python 编写对于部署者来说是一个巨大的优势,这不仅仅是因为该语言本身,还因为它可能更易于使用,并且具有灵活的中间件,可以插入到 WSGI 管道中。Swift 也很容易插入各种不同的身份验证系统,并具有各种中间件来修改其行为并集成特定功能。

就像 python 一样,Swift 秉承“包含电池”的理念,您拥有各种执行不同操作的中间件,使其成为 S3 的可信替代品。

Swift 的另一个优势是在大规模生产中得到验证,许多不同的公有云已经在使用它(例如 Rackspace/HP/Cloudwatt/MercadoLibre 等),并且对它感到满意。

另一方面,CEPH 通过其 rados gateway 执行对象存储,虽然具有 API 不敏感性和强大的 S3 模拟 API,但它不如功能齐全的 python WSGI 系统强大,并且不允许模块化。将它作为网关的问题始终是必须模拟和遵循 Swift API,虽然核心 API 定义良好、稳定且向后兼容,但这并不包括 Swift 随附的所有中间件。

用例

如果您只需要选择一个,并且需要块存储,您绝对希望选择 CEPH。如果您只需要对象存储用例,我建议您选择 Swift。

话虽如此,有些用例需要两者,但有些组织不想管理两个不同的集群和不同的系统。Radosgw 对于一些简单的用例来说就足够了,如果您想使用 S3 API 或 Swift API,但不会为您提供功能齐全的对象存储系统。另一个需要考虑的点是,从 RadosGW 存储的对象将无法从块存储系统访问,由于它们具有不同的使用模式,因此必须将其放置在不同的硬件设置上(通过 ceph 智能模块化放置)。

最终,用户想要有选择,并且由于 Red Hat Gluster 团队的努力,Swift 现在拥有一个 多后端系统,您可以在那里拥有不同的存储后端系统,Swift 实际上可以允许将 ceph 作为对象服务器插入。

我们还没有完全实现,Swift 和 Ceph 的开发人员进行了交谈,试图了解如何插入它,但最终,这将为最终用户提供选择,并最大限度地减少管理工作。

结论

不要将 Swift 和 Ceph 视为竞争对手。两者都是出色的开源项目,具有特定的任务集。主要的竞争对手是专有软件解决方案,导致供应商锁定,而 Swift 和 Ceph 凭借其强大的社区和充满活力的讨论,是绝大多数挑战的绝佳解决方案。

感谢 SwiftstackRackspaceInktank(以及我的同事)审查这篇文章。