张矩:云计算产品线的三个核心

2011年5月18日,应用与创新第三届中国云计算大会云基地专场在北京云基地二层举办。中云网作为本届云计算大会云基地专场官方指定战略合作门户网站和官方指定的合作新闻中心,进行全方位的视频、图文采访与直播。

19日下午,“应用高峰论坛”在云基地召开,友友系统副总裁张矩出席大会并发表主题演讲。

友友系统副总裁张矩(中云网摄)

以下是友友系统副总裁张矩的演讲全文:

张矩:

大家下午好!

刚才辛总说了友友是专注于云计算核心平台开发的公司,其实我们整个产品线是建立在三个核心的基础之上。首先是怎么解决大规模系统中各个节点协同工作的问题,也就是通讯的产品能够保证在大规模的网络部署情况下各个节点之间能够有高可靠的通讯层面。

第二个是把整个系统构建好之后,我怎么把大规模系统资源聚合起来统一管理和统一调度。第三个就是我们对海量数据如何进行存储、处理,并且能够从中提炼出我们需要的知识,大概是这么一系列产品。

友友提出一个概念叫做统一存储,我们希望在企业内部或者是应用场景内部有一个统一的统计架构或者是存储体系来支持各种不同的业务系统在上面应用,这款产品叫做DataCell,这个产品从设计的理念上来讲,我们是一款支持非常海量数据,也就是说一个安装的部署通常可以支持PB级的存储能力,并且以统一的存储系统同时能够支持现在在企业中能够经常看到的使用范围最广泛的几种不同类型的数据,包括结构化,这也是我们常说的数据库的应用,也就是说每一个数据是有结构的,具有不同的栏目标识数据内容。

另外一种是非结构化数据,实际上也是企业最熟悉和最常见的数据,包括各种办公的文档、多媒体的文档,甚至做设计图纸、软件的代码文档,我们都认为这些数据内部结构并不很明显,但是我们对内容往往很关心。

我们DataCell支持这四种企业内部最常见的数据类型,首先就是刚才讲的数据库结构化数据的存储。另外一个是大规模的网站和企业内部经常提到的对象存储,也就是我们常说搜索和存储的内容。还有就是大家最常见的存储内容就是文件。再一个类型我们把它单独划出来,我们认为云时代和物联网时代增长速度非常快的一类数据,我们把它称为时序数据,甚至包括我们应用比较多的电力系统应用,比如说用电量的采集,这些都是非常典型的时序数据。

这个可能稍微技术一点了,讲一下我们DataCell数据产品,从设计和技术实践上的体系结构。大家了解类似于Google文件系统分布式存储,我们这个存储架构和基于这个类型体系的存储还是有一定区别的。一个最明显的区别在于对于GMS文件体系它有一个中心节点,至少在逻辑上会存在一个中心节点,我如何把存储系统内部的原数据进行统一的存储和管理,这样在客户端访问存储系统的时候要通过原数据的服务器来获取数据存储具体的位置和信息。我们试图改变这种体系结构,我们用一个我们认为状态服务器来取代传统分布式存储控制节点或者是原数据服务器。

在这里我想给大家稍微解释一下我们新的设计理念,在传统的分布式存储架构中,其实也就是五六年的时间,在传统分布式数据架构中原数据服务器或者是中心控制节点,往往是整个存储系统无论是从性能上还是从容量上的瓶颈。首先一点客户对数据的访问,任何一次访问都要先去中心节点询问数据基本的属性和存储位置的信息,然后才能根据这些信息对数据系统进行访问,这一来一回首先在增加了访问的时演,整个重新节点的吞吐量,也就是说我能够支持多少个用户,也决定了整个存储系统的用户。

可能大家使用过分布式存储都会有明显的感觉,存储系统稳定性的问题,如果存储系统出了问题往往是中央节点原数据的问题。因为分布式存储在存储节点上往往具有比较多的冗余,一个数据存到里面通常是两到三个备份,来保证数据的可靠性的问题。在这种设置下如果有一个存储节点或者说一个硬盘出现了故障,这个时候实际上对整个存储系统的可靠性基本上没有什么影响,也就是说数据是多种拷贝的。往往是因为中心就是我们说的原数据服务器或者是控制节点出了问题,这导致了原数据在控制节点上出现了不一致的情况,这会导致整个存储系统的稳定性下降,甚至在某种情况下会导致数据的丢失。

在我们新的体系架构当中,我们把原数据的信息,也就是说存储的数据信息的属性以及存储位置的信息直接放在存储节点之上。这样的情况下,实际上客户端对数据的访问是直接到存储节点访问的,在这种情况下我们消除了数据端访问数据的时候必须经过原数据服务器中心节点的流程,这个很大程度上影响了访问的时延。另外由于不存在中央存储的节点,这个时候只要存储节点自身冗余性能够保证的话,整个系统稳定性和可靠性可以得到很好的保证。

在直接存储的架构上,我们引入状态服务器的概念,我们怎么能够在完全分布的情况下更好的支持传统意义下的文件系统的功能,在这个架构下我们既能够保证性能延展的指标,又能够很好的保证文件系统。

DataCell有几个新的架构带来跟传统分布式存储相比较有比较明显的优势。首先就是我们的性能,刚才给大家解释了,由于我们不存在中心控制节点问题的时候,吞吐量和时延会保证比传统的分布架构要优秀。同时在整个体系架构的设计上,我们还特别做了一些设计上的优化,其中几点跟大家分享一下。首先是数据水平的均匀分布,我们知道分布式系统比较起一体的单一节点系统最大的优势是我们可以通过各个节点的协作,我可以把任务或者是访问的数据的供给分配到不同的节点之上,让大家同时协同来工作,这样保证更高的功能。也就是说我可以在每一个单一节点上,都不需要传统的阵列或者是传统的高端设备那样,但是我结合起来可以实现整合以后的效率或者是性能要比传统的架构好很多,这里面我怎么更好的把这些数据分配到现有的节点之上,实际上一个很大的挑战是,数据水平分布的挑战是,如果存储的节点状态变化了,我怎么还能够保证数据的分配均匀性。比如说存储节点原来有一百个后来由于性能的原因我增加五十个或者是二十个,这个是水平分布的优化。

我们如何做垂直分布呢?大家都知道在现在硬件技术情况下,硬盘的性能要比内存差两到三个数量级,这是现在硬件的基础现状。我们如何利用性能上不同硬件做优化来提高整体系统的性能,我们也做了一个比较深入的研究和优化。首先在现在的硬件体系架构中,如何更大量的使用内存减少对硬盘的操作,这是一点。这个又要谈到分布式的架构对优化的影响,数据的可靠性通常是通过分布在不同节点上数据的多份拷贝实现的,这个比起传统单一的存储服务器或者是存储阵列来讲有一个好处,就是说我可以把数据写到硬盘上,这个时间我可以适当的推后。为了保证数据的可靠性,一般来讲时延应该控制的非常短,我告诉服务器要保存的时候,通常服务器必须要写到硬盘上,这样才能告诉访问端说数据已经保存下来了,不然会存在一个风险服务器断电或者服务器故障的时候,我已经保存下来的数据因为服务器的故障而丢失。所以在这个时候我可以适当的延长数据滞留的时间,这对提高系统整体存储性能是有帮助的,所以我们在整个优化中更多的使用硬盘和控制数据在使用中的滞留时间。

实际上包括任何一个计算机的系统很难设计出一个满足各种应用场景,各种不同的应用,不同的访问模式下都优化的系统,这个系统从理论上讲是不存在的。我们认为能够做到或者能够做的更好的是不同的应用和访问背景,来对这一类型进行优化。我们觉得DataCell存储系统里面实际上有针对不同的应用和属性类型有四种基本上面向数据访问模式进行优化的存储引擎。

一类是针对文件的存储引擎,这类存储引擎一般具有比较明显的特色,就是文件的尺寸比较大,像一个多媒体的文件从几百兆到上GB的量级是非常常见的。这个时候为了它的性能优化存储显然是跟小文件或者是小的数据非常不一样的使用场景。

另外一个存储场景实际上是对结构化和半结构化数据,通常是尺寸比较小,数据量在一兆以内,甚至包括一些小的数据文件,我们都是针对这种数据引擎使用。

第三类就是很明显以时间为索引点的数据,通常也是数据的大小在一兆以内,有一个非常明显的特征,就是说数据的索引是用时间点索引。而且由于时间的发展是单向的,时间是不停往前走的,数据的累计或者数据的读写实际上也是单向往后添加的。对此我们做专门的数据引擎来负责这一类数据的存储。

最后一个就是我们认为的流媒体数据,这个数据有一个很大的特征就是尺寸比较大。其次对它的访问就是读取的过程是具有非常明显的顺序特征,对于这类应用我们有优化的流媒体引擎专门负责存储这样的数据,针对不同数据特征的存储引擎,我们可以保证存储系统能够达到比传统的分布式系统性能要优化很多和高很多的存储系统。

在实践上我们系统存储的数据和读写的数据流,以及和数据访问控制,包括系统内部的控制信息,它的通道是完全分裂的互不影响,这样可以保证数据读写的性能,又可以保证数据内部进行重新分工,以及数据状态迁移的时候有非常高的可靠性。

在新的分布式存储特点里面有非常高的延展性,这点和传统相比也是一个非常大的优势。刚才讲了文件系统通常都具有中心节点,而这个中心节点容量通常会确定一个存储系统到底能存放多少个文件。其实文件的容量是个次要的约束条件,最主要的约束条件是文件的个数,主要原因是因为每一个文件的原数据,文件的属性和文件存储的地方和位置,这些信息一般在原数据服务器或者是控制节点上都是要放在内存里面,这样才能保证你的存储能够达到满意的性能。也就是说原数据服务器内存的大小,实际上决定了整个存储系统到底能存多少文件,比如说常用的服务器48G内存和64G内存,可能支持的数目也就是一亿个文件水平左右,由于我们趋中间化的算法,可以保证我们新的分布式系统的延展性要远远优于传统的分布式系统。

但是我规模大了以后需要保证几点,也是需要特殊考虑,虽然在物理上没有明显的限制。但是在具体的实践上怎么能保证在大规模的情况下依然具有非常良好的性能和可靠性,其实主要是解决两个问题。一个是通过存储系统的方式保证整个存储系统各个节点的状态是一致的,每个节点基本上都能够知道整个系统现在的状态。再一个就是刚才给大家提到过的我节点多了以后,节点成员的身份发生了变化,或者是新加了节点以后,我的系统怎么能很快的达到新的平衡状态,能够很快的发挥对用户提供数据的服务,这也是在系统中经过特殊处理和考虑的。

其实总结起来,首先是高容量,我们DataCell的部署基本上都会在TB的存储量级上。刚才给大家讲了我们延展性的优势,可靠性也是通过数据的冗余来实现的。另外就是我们的性能,一会儿跟大家分享几个案例,特别强调在不同存储形式下能够实现性能的参数,刚才跟大家分享的是对不同应用模式的多引擎的支持。

另外想跟大家分享的是基于DataCell分布式存储之上,我们构建了一个叫做智能存储的平台,海量数据前几个演讲嘉宾都多多少少提到了,新一代应用无论是企业的应用、互联网的应用,甚至包括即将发生的物联网的应用有一个非常大的特点,各个业务系统都在面对一个挑战就是海量数据的挑战。刚才我们跟大家分享了分布式系统解决了怎么能够高可靠存储、高性能的存储大量的海量数据的能力,其实这只是解决了整个问题的一部分,海量数据的应用带来的问题实际上是两个方面。首先一个是这些数据你能力采集进来存的下,其次这些你怎么利用这些数据。举一个最简单的例子,像企业经过一段时间的运行,一般都会积累很大量的文档,而且这些文档具有几个比较典型的特征。首先这些文档是由不同的业务系统生成,有人事部产生的数据,财务会产生不同的数据,这些海量的数据你把它集中的存储下来只是解决了问题的一部分。既然把整个数据全都放在一个地方存储下来,我要搜索或者检索数据的时候,或者我要查询其中一篇文章的时候,你怎么能够很快很准确的把我想要的东西告诉我,这是另外一个问题。也就是说存储实际上要提供两个功能,一个是要存得下,另外你需要数据的时候可以很方便、很快捷的把你需要的数据返回给你。

智存平台是构建在分布式系统之上,又构建了一层对数据进行高效的分类、检索和搜索平台性的产品,它的几个特征主要是我刚才提到的,首先是对海量数据能够存得下,在存储容量上有很大的优势。对存储系统之中的数据有很好的管理功能,最为重要的实际上是数据存到系统之后给你一个方便使用的接口,能够让你很快捷的掌握到并且所使用。

对于无论是在企业里面的员工或者对于我们平常的生活,数据的提取或者是数据的检索通常通过两种形式实现。第一个是现在非常普遍使用的搜索引擎,我其实知道我需要的信息或者需要的文档,它讲述的关键内容是什么,这样我们通过关健词搜索我需要的文档。第二种检索的方式实际上更像图书馆方式,我知道需要检索文档的分类,我根据分类的体系架构能够通过一点一滴一步一步最终定位找到我需要的文档,其实传统的文件系统或者传统的文档管理系统更多的是第二个方式,我有一个目录结构或者是分类体系像图书馆,这样我所根据我所关心内容的目录来定位我的文档。在我的智存平台里,实际上把通常使用的文档检索的方式有机的结合起来,我既提供一个良好的全文搜索的体系,又同时支持企业对你自身文档或者是自身存储的数据进行分类,并且进行模板化的管理。在这种设置下,我可以很方便对海量数据和海量文档进行定位和提取。这是我们关于海量数据最重要的两个产品给大家做一个汇报和介绍。

下面我想跟大家分享的是友友系统在最近两年,在一些具体的使用案例,具体为客户解决了什么样的问题。

第一个使用案例是我们为电力公司构建的统一的数据存储和访问系统,这个电力公司是在运营了很长时间之后,积累了海量的文档,文件的数目可能在我们构建系统的时候大概有7000到8000万个文档,现在可能更多了,这是两年前的状态。当时有三十多个业务系统,每一个业务系统有自己的存储,也就是我们常说的文件服务器,这个时候它面临着很大的问题。首先是如果每一个文档被各个部门都要使用的话,在系统里面往往每一个业务系统都会把这个文档拿过来存到自己的文件服务器中供自己的部门内部使用,这是一个现状,但是带来一个很大的问题,这个文档首先浪费了存储资源。如果文档有更新的话,基本上达到每一个存储的备份都是最新的,部门之间文档的共享实际上非常难做到。文档的共享往往是靠发邮件的方式或者是通过索要的方式存在像USB存储介质上进行分享。其次是部门之间或者是团队之间根本没有办法知道另外一个团队手里到底有什么样的资料和信息。所以对他来讲构建这么一个统一存储和访问是非常有必要的。

我们搭建的系统是在DataCell和智存系统之上,对将近1亿份文档进行了存储,同时提供了符合业界标准应用开发接口,这样很方便把各种不同部门应用各种不同的系统对接到这个上面,这样的话各个业务系统使用的是同一个存储系统来支撑,非常方便整个数据的整合和分享。而且我们在统一的存储基础之上,利用我们的智存提供接口,这是两年前上线现在已经在使用的系统。

另外一个案例是我们为电信公司构建日志分析系统,这是很典型的时序数据的使用案例,大家知道电信公司对自己的客户提供互联网访问的服务,大家上网去访问各种不同的网站,其实你每访问一次网站实际上都回升成一个DNS的记录,就是说你去访问了哪个网站,从哪个客户端在什么时间访问了什么样的网站,这个信息实际上对电信公司是非常有价值的。首先它可以知道用户对网站的访问习惯,还可以对用户的访问内容做一定的监管工作,大家看看首先是对什么样的内容感兴趣,对什么样的网站感兴趣,其次看看有没有不应该访问的内容。但是这个数据量由于电信公司的客户非常庞大,数据量是很大的,像省公司在一个城市它的用户DNS访问量一天会生成80亿条新的记录。对于电信公司的需求来说,我对这些访问记录的数据需要保持六个月,大家可以做一个简单的数据计算,这六个月存储的数据大概是14000亿条访问的记录数据,如何能在这14000亿条数据中很快的检索到电信公司所关心的内容,实际上这个任务已经远远超出了传统的数据库怎么解决处理容量的范围了。在我们的系统上线之前,对他来讲只能保存一个月访问的日志,远远达不到他需要的六个月的存储时限,我想检索某一个客户端在某一个时间访问某一个网站,我想查询一个请求,从查询请求递交到结果返回大概需要20分钟到30分钟。我们系统上线首先达到6个月的存储,我们做到的响应时间大概是5秒钟左右,这是性能上的对比大概是三个数量级的提高。

下一个案例是我们为社区网络游戏做的平台支撑,不光光是海量存储的问题,我们还有资源管理功能。成功的互联网很多应用有一个很大的特征,就是用户量通常非常的巨大,像这款游戏在上线一个月的时间大概日活跃用户到了1000万的水平,整个注册用户大概是五千万到六千万,大家都看社区网游是一个非常有特色的应用,再一个是用户的状态是随着用户游戏进行中不停的发生变化。也就是说用户的状态信息,随着用户来玩游戏的时候实时的需要进行非常准确的更新,在这个情况下我怎么能够支撑一千万个用户同时在线,而且保证用户状态信息实时更新,这对大规模网络游戏来讲是非常大的挑战。这是同样使用DataCell产品,虽然存储的内容还不一样,从刚才第一个文件存储到第二个时序数据的存储,到这个是非常典型的对象存储,也就是说我存储用户的基本信息,以及用户在游戏中的状态,怎么支撑上千万同时在线高性能的支撑,而且能够保证用户的体验要非常的好,我对后台数据访问的时延要保证200毫秒左右,这样用户在玩游戏的时候才不会有等待的感觉,这是很典型的应用案例,现在游戏还属于最成功的游戏。

最后一个案例是流媒体引擎的应用,我们叫做平安城市项目典型的应用。也就是说在一个城市之内,我们要在城市各处安装高清摄象头,在这个案例里城市需要安装75万个高清摄象头,每一个摄象头生成的数据流大概是6兆每秒,这些数据大概要保存一个月的时间供安防人员或者是城市管理人员进行访问和分析。所以这个规模大概是什么样的情况,75万个摄象头,每个摄象头每秒产生6兆的数据,这些数据要保存一个月,大概算起来总量是1000个PB的数据量,总量是一个方面,为了支撑这75万个摄象头,总体会聚存储系统的带宽,如果系统整个上线以后将会是全世界最大规模的存储和视频监视系统,全世界最大的视频分享网站整个存储量也就是在45个PB水平左右,而这个系统上线之后到1000个PB。这个系统还没有上线,我们正在做验证的工作,也是使用DataCell,这是非常典型海量数据的应用场所。

跟大家分享这四个案例,从文件存储到时序数据存储到对象存储,再到最后的流媒体存储不仅在产品开发中得以实现,在实际的应用中或者是验证系统都是存在的,今天跟大家分享的就是这些,谢谢大家。