专家观点   

金山云CTO杨刚谈开源改进与自主研发

时间:2013-01-29 09:08:00

云计算中,最先落地也是最容易引起关注的是云存储。不同于亚马逊的S3,国内云计算企业大多选择以Dropbox为标杆,以网盘/云盘为切入点试水个人云存储市场。由此也缔造了自2011年到现在,国内大大小小近60种网盘/云盘林立的盛景。

对于陷入红海(此处特指面对个人云存储)的云存储企业而言,首要任务是在产品形态、交互界面、空间大小、收费策略,跨平台及云同步服务等方面搏杀出来。但现实却并不以意志为转移。随着百度、腾讯、阿里以及三大运营商、甚至区域政府主导的云平台建设的不断深入,云存储(个人+企业)市场呈现出猛烈的兼并重组的前奏。


金山云 CTO  杨刚

金山云,存储领域中做的较早(最初为金山毒霸云查杀提供存储支持,而后是金山快盘以及为小米手机提供Cloud服务),临时组团队+内部服务+外部服务+资本注入下,发展势头良好;金山云CTO杨刚,一直奋斗在存储第一线(直到现在每天夜里也在编程),历经第三方服务(租用) -> 存储设备(带RAID存储服务器) -> 开源方案(通用存储服务器) -> 部分自主研发(驱动优化) -> 完全自主研发(量身定制)等多个阶段,走向“业务形态稳定,预计今年3月份发布个人+企业市场的云存储平台,形成以云存储为支撑的垂直子公司的既定目标。

杨刚对于云存储技术感悟来自多年的亲身实践,作为资金宝贵的创业型企业,从O开始到“有点规模”再到成为“互联网的小辈儿(杨刚语)”,金山云的技术变迁忠实反映了技术关键环节的“各种贵”,以及随着规模的扩大,如何在改进开源方案和寻找更为灵活、简便、符合发展需求且成本更低的自主研发方案之间寻求平衡发展。这一历程,几乎可以让更多初创企业来直接复制和借鉴。本文由此产生,借用金山云存储的实践来还原这一历程,以飨准备于云上的创业者;也以金山云来标注云端创业企业通过开源优化+自主研发实现企业成长的历史印记

没有技术的云存储企业逐渐淡出

 

CSDN:面对市场超过60款云存储,其中不乏百度、腾讯、华为等大型企业的身影。怎么看待这个市场?从技术架构和产品服务模式等方面描绘下金山云?

杨刚:2011年的时候同类产品更多,当时我曾经预言,2012年会有大变化。就是没有核心技术的小公司将逐渐淡出,拥有资源和竞争力的大公司将会成为最有力的竞争者。目前竞争格局和当时的预想类似。

我认为发生这个变化是市场向更成熟的方向推进的必然。金山云也已经从各方面做好准备。首先,明晰了金山云的业务和服务:金山云是一个垂直领域的云服务提供商,我们专注于存储,不仅提供在稳定性和价格上有竞争力的存储平台,同时提供面向个人和企业(最终用户)的金山快盘产品,目前询问企业版产品的客户非常多,我们预计可望在今年3月份正式发布。其次,技术上的不断验证:在过去一年,金山云存储平台主要专注于支撑金山快盘、小米Cloud以及金山内部的其他公司,因为我们希望在今年能够提供一个经过大规模实际验证的云存储平台,而不是一个实验室产品。最后,在资本上的准备:我们有两套方案,金山独自投资和接受外部资本。我们倾向于后者,因为这样可以有力地激励团队更加努力工作,不断推出可靠稳定并且更好用的产品和服务。


自主研发云存储技术的诸多感悟

 

CSDN:想要打造“跨平台和云同步”的云存储服务,其背后的技术架构是怎么样的?个人快盘+企业快盘是否共用同一平台?如果是,彼此间如何进行技术区隔?

杨刚:金山云的技术架构包含三个非常清晰的层次。最底层是存储服务,类似亚马逊的S3。它是完全自主研发的系统,目标是在提供业务所需的服务级别(速度、稳定性等要素)的同时,将单位存储成本降到一个极限值。我们的存储实验室成立于2007年,从最开始基于开源方案的开发,经过多年不断更新,架构和所有模块都经过了大规模调整。它是在一个实战中不断进化的系统,也是快盘最为重要的核心系统。

中间一层是快盘开放平台,为了提供更好的服务给快盘开发者,我们将快盘原始API和开放API做了整合,目前已发布的Android版就是完全基于快盘开放API开发的,其他版本在未来也会有计划的迁移到开放API上。

最上面一层是快盘应用,包含Windows、Mac、Android、iPad、iPhone客户端和网站

企业版快盘是基于个人版快盘的基础之上开发的。在服务端,企业版特有的服务功能通过SOA的方式建立在个人版通用的服务之上。在客户端,企业版客户端基于个人版客户端,使用内部的插件协议进行新功能的开发(未来我们也有计划将插件系统放到开放平台上)。但在服务部署上,企业版会部署一套和个人版独立的服务实例。这样做的好处是既可以提高整体的开发效率,个人版的功能和体验改进可以很快合并到企业版中,团队的研发成果被充分重用。同时两个版本又相对隔离,可以不会彼此牵扯,影响开发进度。

CSDN:现在平台用户总数3500+万,用户上传的文件数量超过150亿,大规模并行服务的需求会体现在哪些方面?其后台架构中核心环节有哪些?

杨刚:我觉得分为三个阶段。第一个阶段,服务本身的并发能力需求。一般在服务端研发时,会将各个服务的逻辑进行细粒度拆分,让单个服务尽可能简单,从而实现高并发和大数据容量。这些业界已经有大量的成熟案例。我们比较特别的地方是存储子系统,这个系统非常复杂,它包含了很多子系统。大家平时所讨论的分布式文件系统(例如 Hadoop 的 HDFS、淘宝的 TFS 等)只是其中一个子系统。有些子系统是为了互联网数据分发需要(下面提到),有些子系统是为专门的设备优化。当然这些子系统可以进行比较灵活的拼装和组合,根据不同的业务场景。

第二个阶段:互联网优化阶段。众所周知,中国的互联网结构非常复杂,互联互通的问题非常严重。针对这种问题,互联网公司大多采用拉专线到自己的机房进行汇聚的方式。这种方式成本非常高,而且存储服务所需的带宽过大,汇聚容量很难满足不断增加的用户量。金山云存储则采用了数据分发为主的方式,有子系统根据用户的使用位置不断进行数据调度。只有调度未覆盖或者因时间延迟未完成数据分发时的跨网络访问才使用汇聚专线。

第三个阶段:优化阶段。因为金山是从软件公司转型而来,基础软件的研发实力相对比较强。因此我们也不断开发新的服务中间件,逐步合并到整个系统中。例如,我们的一个简单离散KV数据集服务,用于数据块元数据管理,在我们自己的使用场景里,其性能大约可达同配置MySQL服务的10-20倍,也就是说过去需要10-20台服务器的,现在只需要1台。我们的存储方案中,包含文件系统、硬件控制之类的部分也都是自己开发的。

CSDN:可以举些具体例子么

杨刚小文件优化(金山云中有百亿级小文件需要做统一管理)中,元数据服务很重要,但业内传统系统并不是为小文件优化的,一个历史操作需要耗时数十秒,我们的文件系统能够按照既定策略进行组织,大幅度减少文件寻道次数,减少硬盘磨损几率。而多IDC调度(这也是所有资金不充裕企业的共同的痛点)中,大企业一般都会采用拉几十G的专线实现互联互通,但“实在太贵,也不够用”!所以,金山云文件分发在2个数据中心,采用了中控管理+备份的方式,彼此之间通过互联网连接。当然,这其中没有遵循传统模型的冗余结构,而是将IDC冗余定义为主备关系,不需要完全实时同步运行,最终通过大哈希算法来解决数据一致性延迟问题。

还有一个典型的例子是数据库中间件。业内有一个公认的规则:MySQL——NoSQL——定制数据集。随着金山云的发展,由于MySQL很难实现自动化,所以也在考虑NoSQL。但一方面由于DBA对MySQL较为熟悉,而NoSQL还有很多陌生之处,极有可能出现错误,后续修正投入会“非常贵”,所以我们选择从MySQL直接跳到了定制数据集研发,也就有了上面说的单离散KV数据集一台云服务器比原来10-20台MySQL服务器性能更高。

CSDN:在用技术手段完成战略或运营目标的过程中,您遇到了哪些难题?又是如何解决的?

杨刚:因为我们最开始是软件公司,人才储备都在软件领域。而进入到云存储市场后,我们发现,要真正做好云存储服务,需要将整个链条全部打通,也就是从IDC、到存储设备、到存储系统、到应用服务,再到应用和用户。为此我们和硬件厂商进行了非常紧密的合作,我们的团队也参与了硬件的设计。我觉得这是第一个挑战。

第二个挑战,来自软件公司到互联网的转型。和以前不同,我们没有大段连续时间来进行技术攻坚工作。技术一直被业务拉着跑,我们的首要目标是满足业务的需求,主要是负载量、稳定性、速度体验等方面。还好有大量开源技术和互联网前辈的一些成熟实践,帮我们顶住了服务压力。我们一边不停的增加服务器,满足业务需求;一边找时机,一点一点完成方案升级,以达到降低综合成本的目标。方案升级是最考验的,因为它要保证业务的连续性。大部分情况下我们的升级都不会中断服务,用户没有感觉;很少数情况下我们会在凌晨安排数个小时的停机维护。后者一般是因为数据发生了大规模的异构,热迁移代价太高。为了这几个小时的维护,我们可能要准备一个月,不断进行实施和回滚的演练。

金山云保持独立,不会考虑其他公有云

 

CSDN:金山云是构建在自己的云平台上,但随着规模与数量的递增,是否会考虑用到更多公有云服务(比如AWS,Asure,阿里云,腾讯云等),还是一直保持独立?

杨刚:保持独立。公有云服务满足的是通用需求,而我们面对的更多是特定领域的挑战。但是未来,不排除金山云和其他云服务平台合作的可能性。因为金山云主要专注于存储领域,不想做一个大而全的平台。

CSDN:近期Dropbox出现服务故障(用户称无法访问或同步其文件),尽管AWS声明不是S3的问题,但一连串的宕机丝使得云存储企业面临更多质疑。对云存储而言,技术上怎么避免出现这类问题? 

杨刚:我觉得整个云计算产业还需要逐步成熟,需要经过时间的考验。以前的互联网业务,从设备采购到最终应用都是同一个公司完成,方案的相互协调、整合程度较高,能够从业务的角度,来以较小的代价,实现业务所需的稳定度。而云服务将这个过程分开到了两个公司(云服务提供方和应用开发方),两者之间的配合度显然比不上同一个公司的情况。这样,云服务提供方就需要做更多的事情,来保证其承诺的SLA,但这需要付出更大的代价,而它不一定是应用开发者所需的,甚至是不能满足开发者所需的。

未来要解决这个问题,需要云服务提供商和应用开发商的紧密合作,双方不应该是一个单纯的采购关系。当然,这意味着云服务商要做好服务工作,这一点我们会不断探索。

CSDN:为避开红海,实现盈利,金山云开始发力企业快盘。根据目前资料,借助WPS的基础,金山云可通过在企业内网或私有云上的模块化组件来实现部署。具体是怎么样或者如何规划的?

杨刚私有云业务是金山一个跨公司配合的业务,我们预计在三月份正式发布。届时,金山快盘企业版将包含互联网SaaS服务和企业内网部署两个部分。

CSDN:作为开放API的厂商,数据显示,金山快盘的开放平台已接到超过一万个中小创业团队的使用申请,成功部署的产品超过100个。未来方向如何?

杨刚:我们正在致力于为基于金山快盘开放API的应用开发者带来回报。我希望应用开发者近期关注一下即将发布的开放平台企业版部分,我们会将企业版开放平台上的应用选择性的整合到我们的企业版中,并给对应的应用开发者直接分成。


构建CTO能力的三方面要求

 

CSDN:作为技术层提升到管理层的代表之一,什么样的能力对CTO而言最重要?如何来构建这样的能力?

杨刚:这个话题有点大,很多人都从不同角度发表过观点。我的言论只能代表我自己的经历。我觉得第一个能力是多线程处理能力。在做纯技术岗位时,有大段的连续时间进行某一项工作。在做CTO时,则要同时面临很多不同线索的任务,工作时间也经常被打断。这个过程需要一段适应时间。

第二个方面是知识的深度和广度的切换。以前做架构师的时候,角色是团队技术的保障,除了设计系统框架之外,更重要的事情是在团队技术上遇到障碍时,能带头解决它。因此架构师要求的是对问题域和实现域的技术深度。而CTO不同,它是制定公司技术路线,辅助业务需求的。要做的事情通常是接触未知的领域,通过迅速发现、了解和整合不同领域的东西,形成一个有利于公司业务发展规律的技术路线图。因此CTO的要求是技术的广度而不是深度,并且对技术外的,包括经济、法律等诸多层面都需要有准确的把握。

第三个是团队协作上。架构工作是软件开发过程模型中的一部分(参与需求分析、概要设计和详细设计、测试框架设计)。它的工作流程和工作方式是软件过程中已经标准化的,包括产出什么文档,也有相关标准。而CTO管理的更像一个咨询团队,首先接受来自内外部大量的信息(甚至要自己出去找信息),然后协调人力进行一些探索工作,然后汇总形成一些素材。这个过程中充满着未知性和不确定性,因此对于团队管理和协作的要求非常高。


CSDN:个人云存储盈利模式不清晰一直为业内所诟病,云提供商纷纷转战企业级市场。金山云自2012年2月分拆为独立子公司,12月引入小米科技入股,从资本、产品、发展等方面对未来进行了蓝图规划。技术团队从哪些方面支撑金山云发展?会用到哪些新的技术?希望实现什么样的职业目标

杨刚:为金山云的业务发展提供稳定有力的技术支持是我的使命。今年金山云开始进行融资工作,不论最后的结果是接受外部投资,还是由金山独立投资,金山云将会开始一个新的台阶。具体到我这边,技术团队也会有比较大的调整。首先我会分离存储实验室和存储服务团队,前者致力于底层存储技术的不断改进,而后者致力于为使用云存储服务的开发者(包含我们自己的应用)提供更优质的服务,包括一些大家在使用存储时,可能需要的附加服务,例如Office文档的在线查看、图片的后期处理服务等等。其次我会花更多的时间在人才的寻找上,云业务是一个复杂的大系统。我希望能够找到更多希望投入到这个领域的高手,一起来完成这个理想。而在技术上,我们将会以对开源方案的改进和自主研发基础件两条线同时进行,让技术进行PK。同时,我们会不断整合国内一些优秀的产品和技术,与合作伙伴一起为客户带来价值的最大化,实现共赢。

我个人的目前的职业目标非常简单,希望能尽最大的努力,让金山云业务得到真正的成功。







 

来源:PHPchina

Notice: Constant RUNTIME already defined in /srv/html/srccn/news/config.php on line 15 Notice: Constant ROOTDIR already defined in /srv/html/srccn/news/config.php on line 16 Notice: Constant SITEDIR already defined in /srv/html/srccn/news/config.php on line 17 Notice: Constant DATAURL already defined in /srv/html/srccn/news/config.php on line 20 Notice: Constant VERSION already defined in /srv/html/srccn/news/system/kernel.php on line 17 Notice: Constant COREDIR already defined in /srv/html/srccn/news/system/kernel.php on line 18 Fatal error: require(): Cannot redeclare class mysql in /srv/html/srccn/news/system/kernel.php on line 22