实践课堂|QingCloud 对象存储服务特性及实践



  • 主持人:我在去年北京的实践课堂上认识QingCloud,近距离了解QingCloud,喜欢上QingCloud,加入QingCloud。QingCloud现在有着非常好的产品、团队,我们有非常多很牛的工程师。我们上个月拿到1亿美金的C轮融资,所以我们很有钱。我们需要工程师,我们需要优秀的工程师,我们需要很多很多优秀的工程师,同时也需要解决方案、实施交付、销售和市场。活动结束后,我们有穿着QingCloud衣服的小伙伴,如果想了解,大家尽量勾搭,我们非常欢迎,希望有更多优秀的小伙伴加入QingCloud。李威谈到下一个是对象存储,QingCloud跟大家谈对象,非常有诚意派出QingCloud第一高人王煜。

    6.pic.jpg

    王煜:大家好,我是QingCloud的系统工程师王煜,今天带来的分享是对象存储服务特性与实践。QingCloud的对象存储服务是从2015年开始,从无到有,完全由自己设计研发的存储系统,我们今年刚刚开始提供服务,今天要分享的几个主题,一是企业级存储面临的问题;二是QingCloud对象存储的使用特性;三是兼容你的S3遗产;四是实现对象存储过程中所看不到的内容;五是未来的计划。

    当今是高数据容量的时代,衡量企业全部的集合是GB为计量单位,五年前的计量单位变成TB,如今越来越多的企业需要存储的容量到达PB级别。越来越大的容量,带来的问题是越来越多的数据,从百万、千万到上亿。

    现阶段我们企业在面临海量数据存储时的选择有哪些?一是单机硬盘,对于数据存储需求并不是很高,文件数量不是很多的企业来讲,可以很好的满足需求。单机硬盘有容量的上限,单机硬盘有文件系统的限制,比如一个文件系统受到节点限制,会限制文件数量。我们不能提供可用性,数据安全没有太多的保证,它也不能被更多的客户端共享使用。在此基础上,有些企业会选择通过LVM扩展数据存储,通过更多的硬盘,可以提高数据存储的控件,通过RAID的方式对数据进行备份,面临的问题是数据容量依然是有限的。

    很多传统的、不缺钱的客户会使用SAN存储,这是集中式的网络存储,这是一个存储柜,企业在存储的时候需要付出采购成本,并不是所有的企业都有资金实力采购SAN这样的设备。

    NAS作为通过网络发展的文件系统,它一定程度上解决了企业对于中型规模数据容量的存储需求,依然会受到类似文件系统等瓶颈。对于有研发能力和运维能力的企业来讲,他们会选择市面上比较主流的开源分布式文件系统,比如OpenStack、Swift、Ceph、GlusterFS、HDFS,我们调研了很多市面上的开源方案,或多或少每一个开源的文件系统实现都不能非常好的满足企业的海量文件存储需求。比如HDFS并不是非常适合存储海量小文件。

    我们的企业在面临数据存储时有哪些需求,我们在实现对象存储时,企业需要一个无限容量的存储控件,意味着企业不需要关心它的存储空间有多大,现在存储了多少文件,还能存储多少文件。对于企业来讲,只要使用它就可以了。除此以外企业需要存储各式各样的文件,包括图片、影音、视频、文档,文件类型和大小是不可预期的,有1KB或是1TB的文件。企业需要对存储系统有更高的安全可靠性的需求。当你存储的物理硬件死机时,传统硬件解决方案里几乎不可能做到。企业需要更高可用性,当存储集群进行扩容、缩容、升级过程中依然要对上层提供更高的可用性。需要简便易用,我们希望提供存储服务让企业开发人员通过一个下午茶的时间可以完全的掌握QingCloud的存储该如何使用。最后一点是需要按需付费,这是QingCloud提供所有的资源是你需要多少,使用多少,花费多少的成本。基于这几点需求,我们实现了QingStor。

    QingStor对象存储服务的几种主要的访问方式。控制台界面,这集中在QingCloud官方控制台中,对象存储在存储控件之下是一个个的对象,对象之间是完全平的结构,为了让企业可以方便的管理海量文件,我们实现了一个文件系统,你可以在里面像操作本地文件夹一样,一切的操作都跟你操作本地的文件系统完全类似。

    RESTful API接口包含几个概念,我们的访问方式是完全RESTful,GET是文件上传,DELETE是文件删除,文件的命名是以资源的方式命名,其中一个例子是存储控件是mybucket,其中一个文件是myobject。当用户跟QingCloud对象存储服务交互时,我们处理完返回的结果依然是符合HTTP的,包括200、300、400以及500。

    为了方便企业的业务,非常容易跟QingCloud对象存储服务进行集成,我们在API的基础上提供了SDK。这是一个SDK的使用方法,一是创建存储控件,向存储控件上传一个文件,最后删除一个文件,我们提供不同语言的SDK可以非常方便的让企业业务跟QingCloud存储进行对接。

    我们提供了CLI跟QingCloud的对象存储进行交互,极大的方便了企业系统管理人员对企业海量数据文件进行管理。它的操作是列出存储间里所有的Object的列表,下面是格式的结构。我们所有开放的API接口都有对应的方式。

    对象存储服务的层级划分。在没有对象存储之前我们如何划分文件。提到文件系统本身有限制,单目录下不能存储太多的文件,如果有太多的文件对于数据文件的便利、存取都会有影响。如果要向文件系统存取大量数据时,你需要对文件进行比较合理的分布。如果我们使用文件系统对文件进行分布,我有一个用户的头像图片信息,我对这个文件做切分,对文件名字做命名,比如William,后面是目录级,我把整个字串做一个哈希,得到一个值,按两位进行分割,存储在你挂载的系统上。这样可以均匀的把文件分布到整个文件系统中。这里的问题是非常不利于管理,当你的文件通过这样的方式进行分割和存储,很难直接从目录的级别看出你存储的是什么样的文件。

    基于此,使用对象如何命名我们的文件。首先是域名,包括存储控件的名字,比如存储控件是Myapp,我们会提供别的方式将企业的命名直接在Myapp.qingStor.com。这样的结构非常清晰,便于管理海量文件。这是一个平级结构,最顶层是Service,在这之下是一个个存储空间,几个存储空间可能需要一个用户。完全不用担心一个存储空间文件数过多会有什么问题,这由对象存储本身考虑。

    如何设置合理的访问权限。我们提供三种读、写和读写访问权限。这三种访问权限可以被应用于读写对象,首先是匿名访问,对一个存储空间应用了,意味着用户可以完全不用带任何的签名信息直接访问对象存储的存储空间。我们可以为QingCloud的User设单独权限,意味着QingCloud的用户可以直接使用。里面有海量的工程师,他们的用户上传上来的。企业不需要对自己的存储空间写权限,企业可以匿名下发。这个用户可以直接向企业的存储空间上传文件,不需要为这个用户单独设置访问权限。

    客户端直传,(左图)在传统的没有对象存储之前,用户上传数据的路径,中间的Web Server是企业的服务器,可能是电脑、手机进行文件的上传。它首先传到企业的外部服务器中,通过外部服务器做中转,转到企业的存储系统中,这是QingCloud没有对象存储之前,企业数据的流向。应用QingCloud的对象存储后,(右图)企业的Web服务器依然存在,并不用于数据接收和上传,只是用于下发一个签名。企业用户在电脑或是终端上,只需要获取,从Web服务器获取数据上传认证签名,这样的好处是节省了带宽的流量,其次节省了部署Web服务器的复杂过程。

    分段上传。企业有很多非常大的文件,这些文件在上传的过程中,可能在一个极其糟糕的条件下,在这样的情况下,企业可以把大文件进行分割,分割成一个个小文件进行上传,上传后进行文件合并。其中一个出现传输错误时,只要重新传输失败的那一块就可以了。有些文件产生的周期比较长,可能需要在一天中,把产生的文件片断一点点的传到对象存储的服务中,做最终合并。底下有一个例子说明这一点,这是企业服务器文件目录,访问日志的切分是按照512MB后要进行切分,这个日志属于同一天,如果你想把同一天的日志进行合并,可以通过分段上传的方式进行。分为三步,一是initiate,可以放在一个logs的目录下,2016年3月14日的访问日志。创建完后可以把文件的分段一段段上传,这个过程非常长,在这一天的结尾把所有的文件上传。完成后的第三步是调一个完成的接口,进行一天的文件数据合并。

    QingStor支持在线播放和断点续传。因为有很多图片和视频的数据要展现给用户,他在自己企业的网站上集成了QingCloud的数据存储服务,直接在浏览器上播放视频数据,可以暂停和继续播放,这是由于我们支持了在线播放和断点续传才能使显得。你可以使用喜欢的下载软件进行数据文件的下载,由于支持断点续传。暂停后不需要重新下载,只需要从暂停的点往后进行后续的下载。

    监控信息是我们非常重要的特性,QingCloud对象存储提供三个维度的监控,包括存储容量、API调用以及进出流量。(右图)是线上提供在线视频的真实用户访问流量。本图可以代表企业访问的高峰期和低峰期,左边的起点是18点的时候,往右移动有高峰期9点钟后慢慢进入低峰期。中间半夜是访问请求的低峰时间段。从早上6点钟,流量开始攀升,赘物12点有一个低谷。可以想象用户中午12点去吃饭,请求会越来越少,过了12点后有一个攀升,下午3点会下降一点,这是非常典型的,企业在运用对象存储的流量图。通过QingCloud可以提供的非常直观的监控信息的图,可以很容易的监控企业在使用对象存储的时候所看到的企业流量负载的情况。我们提供非常短的监控周期,一小时内可以看到最近这一段时间内的所有其他。

    在做对象存储之前,市面上有很多独立第三方的云存储服务。QingCloud的对象存储相对于他们的优势是可以跟QingCloud的计算进行紧密的结合。我们可以从本图看到,QingStor服务是分区域的,如果你的QingStor服务在北京3区,QingCloud所有IaaS层的资源可以直接通过内网跟QingCloud进行交互,节省外网流量,其次内网速度会更快。QingStor也会跟QingCloud大数据平台进行接驳,直接将大数据的处理结果呈现在QingStor对象存储数据中。很多用户有图片文件、视频文件的处理需求,可以在QingStor上提供支持。我们未来会把QingStor作为自动化部署的中转站,可以把企业的持续、数据等存储在QingStor中,代码的提交、测试的执行以及部署的阶段都可以连通起来。

    对象存储服务,我们知道S3是AWS的对象存储服务,有将近10年的历史,很多企业在使用QingCloud的对象存储之前,都是使用AWS的存储服务。为了可以更好的接合,所以做了S3客户端生态,在无须修改代码的情况下,把曾经接驳S3的代码切换到QingStor的服务中。熟悉S3服务的人可以看到,boto是S3的SDK,可以直接使用S3的SDK跟QingCloud的对象存储进行接驳。

    我谈到的是从用户的角度可以看到的QingCloud存储服务的使用特性,但是QingCloud对象存储服务,我们在底层做了很多大家看不到的事情,很多是企业非常关心的事情。首先是数据安全性问题,我们通过同步写多份数据副本,不丢数据,硬件损坏依旧可用。高可用能力,系统全分布式化,无单点故障和单点瓶颈。我们在系统的每个层面上都是分布式处理,包括接入层、索引层、存储层,意味着系统在扩容、升级、硬件损坏更换的过程中,硬件可以对外提供服务。我们在对象存储的实现过程中,在索引层和接入层依赖IaaS平台,我们会同时得到IaaS平台底层运维和调度系统资源,利用IaaS平台系统资源调度的好处,为IaaS服务对象存储系统进行快速服务的能力。

    研发计划,我们在开发的过程中会不断收集多用户的需求,主要的需求是SDN需求,我们在服务层面的用户非常广,有一些网络并不是非常畅通,我们如何加速这些用户访问对象存储的速度,SDN要加强、跨区灾难备份、图形图象处理、接驳大数据平台,跟大数据平台非常容易的处理完数据后,直接把数据存储到QingStor对象存储中。这是我们今天分享的内容,谢谢大家。
    提问:我特意赶来听你的报告,因为我是你们的客户。我们现在用的是QingCloud,现在有一个很重要的场景是有海量文件存储系统,存的都是小文件。我们想把2000多万个小文件放在云上进行存储,GlusterFS不适合海量存储,你刚刚所说的对象存储是否适合海量小文件存储。将来扩容是不是平滑过渡,万一出了故障,能否同时响应。我把servers的文件如何快速的上传到云存储上。
    王煜:对象存储解决的问题改变解决海量小文件的问题,这是最基本的使用需求。我们设计之初考虑了上亿万的文件存储需求。我们涉及对象存储时,增加了分布式化索引层,它可以无限进行水平扩展,像2000万、2亿甚至海量的数据小文件是没有问题的。

    关于平滑扩容的问题,对象存储在设计的时候一是解决海量存储小文件的问题,二是规模伸缩,我们无法预期数据增长的速度。

    提问:GlusterFS扩容时会对所有的存储文件做哈希计算,我们进行扩容后发现,文件读写速度非常慢,无法使用。我现在申请了10T空间,半年就满的,这时候要紧急扩容,把扩建放大,读写会不会受到影响?

    王煜:GlusterFS是工程化的设计,在数据存储时依然使用本地的系统,没有对数据的小文件进行合并,单机文件系统存储海量小文件过多的情况下,会达到文件系统本身会达到的瓶颈,在这种情况下,我们有针对性的小文件存储进行优化,我们会对小文件进行合并,合并完后在存储本身,并不会有像云存储GlusterFS那么多小文件的情况。这是一个水平扩容的过程,随着系统的增大,属性不会越来越下降。


登录后回复
 

与 青云QingCloud 社区 的连接断开,我们正在尝试重连,请耐心等待