本篇文章的内容,主要是笔者在调研分析Ceph过程中产生的一些思考。因为其中的内容比较自由发散,且大多是笔者的个人见解,故此另启一文进行讨论。

关于Ceph的性能

目前为止,本系列的文章中没有涉及到Ceph性能的详细讨论,也没有给出任何的Ceph性能数据。原因很简单:笔者本人没有机会进行详尽的Ceph性能分析研究,也没有见到比较全面的相关数据。因此,为了避免以片面的数据误导读者,便没有提供任何信息。

以笔者个人的经验而言,探讨一个系统领域的开源项目的性能,事实上并不容易。其原因在于,影响一个实际部署中系统的性能好坏的因素太多、太复杂。硬件配置、 软件版本、参数调整、应用负载及场景设置,各个方面的因素变化都会导致性能测试结果的不同。因此,很难一言蔽之,认为某个项目的性能是好还是不好。

举一个不直接相关的例子。在hypervisor领域,大家很可能会倾向于认为ESXi的性能优于KVM,但事实上,在SPECvirt性能测试结果排行榜 上,基于KVM的系统常有高居第一的时候。究其原因,除了硬件性能的因素之外,KVM有大量的配置参数可以调整,而调得好与不好会极其明显地影响系统性 能。

又比如常用的开源大数据工具软件Hadoop。同一个Hadoop集群用同样的应用程序处理同样的数据集,在配置参数不同的情况下,其最终运行时间长度可能相差数倍。

正是因为参数配置、硬件规格、软件版本、应用场景等因素都可能对性能产生明显影响,因此,对于Ceph这样一个部署方案多变、配置参数不少的系统,如何评测其系统性能,是需要审慎思考的。

反过来讲,这倒也是开源软件引出的一个生财之道。虽然软件本身是开源的,大家都可以免费下载免费安装,但能不能用好就要依靠精深的专业技能了。类似的公司国外屡见不鲜,而国内也已经开始出现。

Ceph的架构与硬件平台之间的适应性

Ceph自2006年正式发布以来,其基础架构(RADOS)部分并没有发生大的变化。本质上,这还是因为RADOS的设计确实优秀,有其前瞻性,因此没有必要大动筋骨。但这并不意味着没有必要对其进行适当反思。

如 前所述,2006年的时候,商用处理器的主流仍为单核,单条内存和单块硬盘的容量也都远小于现在的主流水平。但是,OSD的基本硬件资源要求并没有发生变 化。这也就意味着,在目前的典型部署方案中,一台物理服务器上很可能有数十个处理器硬件线程、数十块硬盘,于是也就承载着数十个OSD同时运行。然 而,RADOS结构的基本假定是,集群是由大量的、相互独立运行的OSD组成的,则目前的典型硬件方案有可能影响这种假定的有效性。例如,如果一台服务器 出现故障,必须关机进行维修,则意味着数十个OSD一起突然下线。由此受到影响的PG则可能多达成千上万个。这种突发性的事件对系统的自动化维护机制可能 会造成一定的压力。

由 此,笔者想到,Sage设计Ceph时面对的硬件平台,事实上应该是处理能力不需要过强、硬件规格比较简单的系统。而这种系统可能与目前的ARM架构或者 Intel Atom架构的micro-server更为相似。或许,基于micro-server部署Ceph集群,会是一种值得尝试的方向。

此外,华为和希捷合作推出了IP硬盘产品。虽然还缺乏更进一步的了解,但直观上推测,这种全新的、轻量级、智能化的存储设备,可能也是一种非常近似于Sage当年设想中的OSD的硬件平台。

Ceph与软件定义存储

“软件定义”这四个字可谓是目前最炙手可热、也最让人糊涂的概念之一。软件定义计算、软件定义网络、软件定义存储、软件定义数据中心,以上几个可能是目前最为常见的相关名词了。

到底什么是“软件定义”,现在还没有形成完全一致的见解。并且,参考技术发展史上的若干先例,以后也未必能形成所谓的一致见解。在这种情况下,以一个具体实例入手,可能更容易获得直观认识,并由此建立起更系统的观点。

笔者认为,对于任何一个系统而言,“软件定义”的概念,更多体现在这里:这个系统的哪些特性,比如功能或者性能,以前是固定的,或者只能进行有限的配置,而现在则可以进行方便灵活地定义和改变。

例如,对于一台物理服务器,一旦其硬件配置,如CPU、内存、硬盘等连接好,则这台服务器的规格和性能就确定了,能够通过BIOS配置等方式调整的性能和功 能范围是很有限的。但是,对于一台虚拟机而言,即便在虚拟机已经创建并安装了操作系统之后,其CPU核数及处理能力、逻辑物理内存大小及真实物理内存大 小、硬盘数量容量及读写性能、网卡型号数量及网络带宽等等特性都是可以方便灵活地通过软件方式进行控制和改变的(其中部分配置操作需要对虚拟机进行重启才 能生效),且这种配置可以由应用层软件进行控制。两相对比,则虚拟机的这种可定义性就是软件定义计算的一个直观实例。

下面再具体到存储领域加以讨论。一般而言,一个存储系统的主要特性大致包括:存储类型(文件系统?块存储?对象存储?),存储容量,存储性能(访问带宽、访 问延迟等等),存储策略(备份策略、访问安全性策略、对数据的高级处理功能等等)。参考上面所举出的软件定义计算的例子,可以想见,对于一个软件定义存储 系统而言,这些特性(至少是其中的大多数)都应该是可以通过软件方式加以定义的。

具体到Ceph而言,其最为符合软件定义存储的特性无疑是,Ceph的存储类型是可以通过软件方式定义的。同样的一个RADOS集群,可以通过安装不同的上 层软件和对应的客户端程序,实现块存储、对象存储和文件系统存储功能,这一特性对于传统的存储系统难以想象。除此之外,Ceph的存储策略,如备份策略、 后台数据处理功能等,也都可以方便地通过软件方式加以定义或扩展。因此,从这个角度出发,Ceph也可以被认为是软件定义存储的真实案例之一。

Ceph与数据中心计算

传统意义上,计算系统的设计是以计算为中心的。数据从存储、网络或其他设备流入处理器,经过处理后再流向存储、网络或其他设备。然而,随着待处理的数据量以 爆炸式的速度增大,也随着计算能力提高的速度超过存储和传输能力,这一处理方式可能变得不再经济,因为针对大量的数据进行频繁硬盘存取和网络传输的代价都 是非常可观的。

数据中心计算这一概念,也就是在这种背景下被提出的。其核心思想,也就是让计算在数据所在的地方发生。数据在哪里,就把计算任务发送到哪里去执行,而不要再 为了使用“强大”的计算能力把数据搬来搬去,传来传去。事实上,Hadoop的出现,就是这种数据中心计算思想的现实反映。

数据中心计算的另一实例,是目前OpenStack社区中出现的一种叫做ZeroVM的轻量级虚拟化技术[1]。ZeroVM的思想就是让计算发生在数据所在的地方。基于其官方提供的信息,目前已经实现了ZeroVM和Swift的整合,可以让处理任务直接运行在Swift的服务器端。

事实上,Ceph也提供了同样的能力。Ceph的整个设计,都是基于Sage的一个基本思想:充分发挥存储器件自身的计算能力。这种思想不仅使得OSD可以 相互配合完成数据访问操作和集群维护功能,更允许OSD将富余的计算能力提供出来,用于运行数据处理任务。

目前,RADOS提供的机制允许在OSD上直接运行可动态加载的数据处理程序插件,以便在服务器端进行数据处理工作,例如,对图片存储系统中的图片进行自动 加水印、尺寸和格式自动转换等后台操作。事实上,基于这种能力,也完全可以实现类似于Hadoop的大数据处理系统。

对于大数据而言,存储和处理是其两个关键的技术领域。由于Ceph自身就是优秀的存储系统,又具备直接承载计算任务的能力,因此,面向大数据的数据中心计算很可能是Ceph的潜在应用方向之一。

Ceph在实际应用中可能存在的问题

到目前位置,本系列文章基本上都是在介绍Ceph的各种优势与特长。但是,任何系统都不可能是十全十美的,本着鸡蛋里挑骨头、吹毛求疵的精神,还是要在这里吐槽几句。

从非技术角度出发,Ceph的最大问题是火起来的时间不够长,因此可以参考的文档还不是很多,中文的尤其如此。但这个没有办法,只能众人拾柴火焰高,一点一滴作贡献。

此外,对Ceph诟病最多的可能还是不够成熟云云。但一个开源项目总是用得人多了才会成熟的,而Ceph目前正在这个过程中,所以需要的还是时间和参与。

另外,以笔者的感觉,Ceph的高度自动化可能也是个双刃剑。好处固然是很多的,但弊端就是系统的运行状态不完全在管理员控制之下,系统中会有若干自动触发而不是管理员触发的操作。这个特点可能会给系统状态的监测和控制带来一些复杂度,需要管理员去适应。

基于Ceph的产业需求和可能的商业机会

    特此声明:这一节的内容纯属crazy idea,不构成投资建议:-)

首先,Ceph的安装部署和性能优化必然成为突出的需求。因此,将Ceph和商用服务器整合成易于部署、性能出色的各类存储解决方案,应该是可以考虑的方向之一。

同时,由于Ceph自身对于OSD硬件平台的特殊假设,以及由此导致的优化空间,则在成本合理的前提下,开发更加适用于Ceph OSD的定制硬件平台(类似于micro-server或者IP硬盘等),并突出存储的高密度、低功耗、高可维护性等特点,也可能成为一种选择。

此外,针对Ceph集群的专用集群监控、性能分析等工具软件也可能会有一定的需求。

最后,基于Ceph的后台数据处理软件工具包也值得考虑。

“Ceph浅析”系列之七——关于Ceph的若干想法的更多相关文章

  1. “Ceph浅析”系列之二——Ceph概况

    本文将对Ceph的基本情况进行概要介绍,以期读者能够在不涉及技术细节的情况下对Ceph建立一个初步印象. 1. 什么是Ceph? Ceph的官方网站Ceph.com上用如下这句话简明扼要地定义了Cep ...

  2. “Ceph浅析”系列之一——前言

    开源技术专家章宇同学(@一棹凌烟)在C3沙龙分享过Ceph之后,最近来了劲头,一口气写了一系列<Ceph浅析>的博文,共8篇: "Ceph浅析"系列之一--前言 &qu ...

  3. “CEPH浅析”系列之六——CEPH与OPENSTACK

    在 <"Ceph浅析"系列之二--Ceph概况>中即已提到,关注Ceph的原因之一,就是OpenStack社区对于Ceph的重视.因此,本文将对Ceph在OpenSta ...

  4. “Ceph浅析”系列之五——Ceph的工作原理及流程

    本文将对Ceph的工作原理和若干关键工作流程进行扼要介绍.如前所述,由于Ceph的功能实现本质上依托于RADOS,因而,此处的介绍事实上也是针对RADOS进行.对于上层的部分,特别是RADOS GW和 ...

  5. Ceph浅析”系列之四——Ceph的结构

    本文将从逻辑结构的角度对Ceph进行分析. Ceph系统的层次结构 Ceph存储系统的逻辑层次结构如下图所示[1]. Ceph系统逻辑层次结构 自下向上,可以将Ceph系统分为四个层次: (1)基础存 ...

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

    最初决定写这些文章的时候,本打算大致记录一下,几千字也就了事了.可是越写越觉得东西多,不说明白总有些不甘心,于是就越写越长,到这儿为止貌似已经有一万七千多字了.除了博士论文之外,应该是没有写过更长的东 ...

  7. CEPH浅析”系列之三——CEPH的设计思想

    Ceph针对的目标应用场景 理解Ceph的设计思想,首先还是要了解Sage设计Ceph时所针对的目标应用场景,换言之,"做这东西的目的是啥?" 事实上,Ceph最初针对的目标应用场 ...

  8. 理解 OpenStack + Ceph (2):Ceph 的物理和逻辑结构 [Ceph Architecture]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  9. 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

随机推荐

  1. css font-weight原理

    为什么要记录一下?因为今天我要设置一个字符加粗,然后就用font-weight:200,没有任何效果.现在看来很可笑,400才相当于normal,200怎么加粗,奇怪的是也没有变细.所以得研究一下fo ...

  2. 退役了退役了-AJAX

    hi 昨晚打球悲剧的把脚崴了. 要知道,上一次崴脚是四年前:那一次伤的是左脚,也是我这么多年打篮球的生涯中,这么多次崴脚中,最严重的一次受伤.休息了整整一个月,受寝室兄弟们的无微不至的照顾,最后也买了 ...

  3. OpenXml入门

    一. OpenXml简介: Open XML标准的简单介绍:Ecma Office Open XML(“Open XML”)是针对字处理文档.演示文稿和电子表格的国际化开放标准,可免费供多个应用程序在 ...

  4. Book LIst

    Go ahead. Linux APUE Linux Kernel Development 鸟哥的linux私房菜 基础篇 鸟哥的linux私房菜 服务器篇 Network Computer Netw ...

  5. netty5和4.x,3.x的一些区别

    http://item.congci.com/item/netty-5-0-4-0-xin-bianhua-he-zhuyi-dian

  6. FMS 客户端带宽计算、带宽限制

    FMS 客户端带宽计算.带宽限制 1. 带宽计算 FMS内置了带宽检测的特性(被称作"native bandwidth detection"),要进行带宽检测,客户端只要在成功连接 ...

  7. 备战NOIP每周写题记录(一)···不间断更新

    ※Recorded By ksq2013 //其实这段时间写的题远远大于这篇博文中的内容,只不过那些数以百记的基础题目实在没必要写在blog上; ※week one 2016.7.18 Monday ...

  8. C#几个经常用到的字符串截取

    C#几个经常用到的字符串截取 一. 1.取字符串的前i个字符 (1)string str1=str.Substring(0,i); (2)string str1=str.Remove(i,str.Le ...

  9. 重写setTimeout扩展参数

    //判断函数行参长度来决定是否需要重写setTimeout,ie8以下为undefined if(window.setTimeout.length == undefined){ var __sto = ...

  10. web端通信技术

    1.web端通信技术:长连接.长轮询.websocket; 什么是长连接.长轮询? 就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它 ...