在 《“Ceph浅析”系列之二——Ceph概况》中即已提到,关注Ceph的原因之一,就是OpenStack社区对于Ceph的重视。因此,本文将对Ceph在OpenStack中的价值进行简要介绍,并且对Ceph和Swift进行对比。

Ceph在OpenStack中的地位

对于一个IaaS系统,涉及到存储的部分主要是块存储服务模块、对象存储服务模块、镜像管理模块和计算服务模块。具体针对OpenStack而言,则分别对应为其中的Cinder、Swift、Glance和Nova四个项目[1]。

在块存储服务部分,Ceph目前是Cinder项目的默认存储后端。前已述及,Red Hat也已经利用自己在KVM/QEMU社区中的影响力,将RBD驱动直接集成在QEMU中。这样,虚拟机访问基于RBD实现的块设备的性能将得到优化。

在对象存储部分,Swift是OpenStack自带的对象存储实现方案。但Ceph也已经成为了Swift最强有力的竞争对手。目前Swift也在考虑采用Ceph作为自己的存储后端。关于Ceph和Swift的故事将在6.2节详细展开。

在镜像管理部分,目前Glance已经支持将Ceph作为自己的本地镜像文件缓存。

在计算服务部分,United Stack目前正在推动将Ceph FS作为Nova计算节点的本地文件系统。

整体而言,Ceph事实上是目前OpenStack生态系统中呼声最高的开源存储解决方案。这一点从笔者在OpenStack 2013 HongKong Summit上的亲身体验可以得到印证。目前,以HP、Dell、Intel等为代表的企业IT领导厂商,和以Mirantis、eNovance、United Stack为代表的若干OpenStack社区新兴厂商,都将Ceph作为重要的乃至于首选的开源存储解决方案。

笔者认为,Ceph之所以在诞生多年不温不火的情况下,迅速在OpenStack社区中受到关注,除了其他一些明显优点之外,应该还是和其支持统一存储的能力有关。这一特性恰恰是OpenStack社区所需要的。

OpenStack项目设计的准则之一就是灵活可扩展。同时,其各个成员项目的背景也不尽相同。这也就导致各个项目在涉及存储系统时所采取的选择各有差异。但是,这一现状势必导致OpenStack的部署和运维面临一定的挑战。特别是对于一些规模不大的OpenStack部署实例,如果让块存储、对象存储、镜像缓存、计算节点本地存储等模块分别采用三四种不同的后端解决方案,则一方面其部署十分麻烦,另一方面运维人员的后续工作也很繁琐。在这种情况下,如果能够采用Ceph作为一种统一存储后端,则确实可以有效缓解这一问题。当然,这只是笔者的一家直言。任何技术选择必然都有其复杂的背后原因,这里的信息仅供参考。

Ceph与Swift:不能不说的故事,不能不作的比较

首先对Swift项目的来龙去脉进行简单介绍,以便大家更好地了解这个项目的特性,及其背后隐藏的原因。此处关于Swift的信息主要引自[2]。

Swift最早起源于2008年,本来是Rackspace公司内部开发的用于支撑其公有云对象存储业务的后端系统。当时,Amazon的S3服务已经颇受欢迎,因此,Rackspace决定开发Swift以提供对应业务作为回应。也正是因为这个原因,Swift的设计目标十分纯粹,就是一个优秀的、可以和S3相媲美的对象存储系统。其他要求纯属多余,因此完全不在Swift开发者的考虑之列。

Swift的开发大致历时一年,并在Rackspace成功上线运营。此后,OpenStack项目于2010年正式发布。Rackspace贡献了Swift,而NASA贡献了Nova,二者成为了OpenStack最早的两个项目。其后,若干Swift开发团队的核心成员独立创业,成立了SwiftStack公司,依然活跃在相关社区。

由此可见,Swift正是一个典型的起源于公司内部的、作为正式产品开发的开源项目。从这一点而言,Swift和“学院范儿”的Ceph可谓截然不同。也正是因为这个原因,Swift获得了一个得天独厚的优势:不缺启动用户,一开始就有生产环境下的大规模部署应用案例。事实上,相对成熟、web场景下应用案例多,是Swift社区目前依然反复强调的一个优势。

从技术上讲,Swift的特点主要体现在设计目标明确,就是要做一个纯粹的对象存储系统,因此不会考虑Ceph所强调的统一存储特性。同时,为了便于和其他项目、应用集成,Swift选择了Python语言进行开发。

与之相比,Ceph同时考虑了对象存储、块存储和文件系统存储能力,且目前在OpenStack中应用最多的场景事实上是块存储。同时,Ceph在选择开发语言时,很可能主要考虑的是性能因素,因而选择了C++语言。而能够被用于块存储场景这一点,也部分印证了其性能确实比较优秀。

由此可见,Ceph和Swift的区别,本质上是由其产生背景和应用目标所导致的。对这二者进行对比,并进行技术上的评判,并不非常公平。

事实上,作为开源分布式存储系统中的两个优秀代表,Ceph和Swift的设计和特性之中,也有着不少的相通之处:

首先,二者都强调良好的可扩展性,因此都采用了无中心点结构。只不过Swift的架构中有元数据服务器,只是通过多节点扩展的方式尽可能解决了其可靠性和性能顾虑。

第二,二者都能提供可配置的高可靠性。在两者的集群中,数据的备份数都可以选择,在常见生产环境中,也都使用三备份的方式。

第三,二者都强调自动化的集群管理。Swift同样引入了自动化的集群维护能力。

由此可见,简单地强调这两者之中的某一个更为优秀,是不合理的,也是没有实际意义的。

当然,在实际使用中,毕竟还是需要进行方案选择。结合[3]文中的观点,笔者认为,合适的选择或许如下:

*如果需要一个纯粹的对象存储系统,则选择Swift;

*如果需要一个纯粹的块存储系统,则只能选择Ceph;

*如果是一个小规模的、希望控制系统复杂度的OpenStack部署方案,则选择Ceph;

*如果是一个规模较大的系统,块存储和对象存储分别有较大的业务需求,则可以考虑将二者分离,分别采用Ceph和Swift。

到本篇为止,这一系列文章对于Ceph技术内容的介绍已经基本完成。后面一篇文章,将主要是笔者学习Ceph过程中的一些思考,供有兴趣的读者一同品评。

“CEPH浅析”系列之六——CEPH与OPENSTACK相关推荐

  1. [转]“Ceph浅析”系列之(—)—Ceph概况

    转载自:http://yizhaolingyan.net/?p=11 本文将对Ceph的基本情况进行概要介绍,以期读者能够在不涉及技术细节的情况下对Ceph建立一个初步印象. 2.1   什么是Cep ...

  2. Ceph使用系列之——Ceph RGW使用

    本文分享主题是<Ceph使用系列之--Ceph RGW使用>,欢迎关注. Ceph RGW介绍 Ceph对象网关是在librados之上构建的对象存储接口,旨在为应用程序提供通往Ceph存 ...

  3. “CEPH浅析”系列之七——关于CEPH的若干想法

    为什么80%的码农都做不了架构师?>>>    本篇文章的内容,主要是笔者在调研分析Ceph过程中产生的一些思考.因为其中的内容比较自由发散,且大多是笔者的个人见解,故此另启一文进行 ...

  4. “CEPH浅析”系列之八——小结

    2019独角兽企业重金招聘Python工程师标准>>> 最初决定写这些文章的时候,本打算大致记录一下,几千字也就了事了.可是越写越觉得东西多,不说明白总有些不甘心,于是就越写越长,到 ...

  5. [转]“Ceph浅析”系列之(二)—Ceph的设计思想

    转载自:http://yizhaolingyan.net/?p=11 分析开源项目,时常遇到的一个问题就是资料不足.有时间写代码的大牛们通常是都是没有时间或者根本不屑于写文档的.而不多的文档通常又是使 ...

  6. Ceph分布式存储系列(一):Ceph工作原理及架构浅析梳理

    一.Ceph简介     众所周知,ceph是一种分布式存储系统,是有着"ceph之父"之称的Sage Weil读博期间的研究课题,项目诞生于2004年,在2006年基于开源协议开 ...

  7. Ceph分布式存储系列(二):ceph-deploy方式部署三节点ceph集群

    承接上文:Ceph分布式存储系列(一):Ceph工作原理及架构浅析梳理 之前都是使用Deepsea方式部署的ceph,长时间不用ceph-deploy了,这次来回顾,顺便总结下! 前言: ceph-d ...

  8. Ceph入门系列(一)

    Ceph介绍 ​ Ceph是一种热门的软件定义存储(SDS)技术,可以运行在几乎所有主流的 Linux 发行版(比如CentOS和Ubuntu)和其它类UNIX操作系统(典型如FreeBSD).Cep ...

  9. 【云原生 | Kubernetes 系列】--Ceph认证和RBD

    1. Ceph 认证机制 ceph使用cephx协议对客户端进行身份认证. cephx用于对ceph保存的数据进行认证访问和授权,用于对访问ceph的请求进行认证和授权检查,与mon通信的请求都要经过 ...

  10. ceph命令系列(一):ceph-deploy/ceph/rados/rbd 常用命令详解

    ceph-deploy 常用命令详解 命令 描述 ceph-deploy new [mon-node ...] 指定node(s)为monitor,开始部署一个新的ceph集群,并且在当前目录创建ce ...

最新文章

  1. java 静态方法覆盖_Java中方法的覆盖和静态方法的隐藏
  2. Hadoop Streaming框架使用(三)
  3. NSString字符串常用知识点
  4. 消息队列之ActiveMQ安装配置
  5. NetCat Tutorials
  6. ajax 跨域请求api_【.NET Core 3.0】框架之十二 || 跨域 与 Proxy
  7. 最强N皇后JAVA解题代码
  8. php_mvc实现步骤五
  9. php统计用户留存脚本,SQL 统计用户留存
  10. 同一个电脑可安装多个python版本吗_Linux下如何安装多个Python版本
  11. PlaceholderImageView
  12. Java 建模: UML 工作簿:第 2 部分
  13. android控件的touch事件_聊聊Android嵌套滑动
  14. 【基础】集成学习 (Ensemble Learning)
  15. 如何更好地控制input输入框的高度
  16. matlab的基本语法规则_MATLAB基础语法
  17. DEA_Malmquist指数模型学习笔记
  18. win10taskkill强行结束进程_win10系统强制结束进程命令的方案
  19. npm安装工具时候报错code EINTEGRITY
  20. GCC --verbose选项, -lpthread 和-pthread的区别

热门文章

  1. ASP.NET身份验证机制membership入门——API篇
  2. ++i i++
  3. 实现简单的web框架
  4. 泛微发布亿元补贴计划,推动移动办公普及
  5. SCE2007 –安装配置指南
  6. UVALive - 7147 (数学)
  7. 二分图最大权匹配:Kuhn-Munkres算法
  8. 绿色版Tomcat的配置
  9. elasticsearch删除索引
  10. BZOJ1906树上的蚂蚁BZOJ3700发展城市——RMQ求LCA+树链的交