淘宝Fourinone是一个自主研发的分布式并行计算框架,它集成了Hadoop、ZooKeeper、MQ、分布式缓存四大主要的分布式计算功能,Fourinone的功能强大用途广泛,它实现了ZooKeeper的所有功能并进行了很多改进,它同时又提供完整的分布式缓存支持,包括中小型缓存以及大型集群缓存,它使用不同于Map/Reduce的全新设计模式解决问题,模仿现实中生产加工链式加并行处理的“包工头/农民工/手工仓库/职业所”方式设计分布式计算,它还可以当做简单的mq使用。Fourinone整体短小精悍,就一个jar包没有任何依赖,很方便嵌入式开发使用。InfoQ就Fourinone相关技术设计对彭渊做出了采访。
InfoQ:您在演讲中提到的四个功能产品:Hadoop、ZooKeeper、MQ、分布式缓存,Fourinone中如何平衡它们之间的关系?
彭渊: 首先,我觉得应该再解释一下Fourinone是什么:
Fourinone是一个精心设计的框架和API,它不是四个产品的组合,它不是Hadoop的复制品,也不是将几个开源产品拼凑起来的东西。它的目的是帮助你去利用多台计算机的资源实现各种分布式应用。下面这段话是它的定义:
Fourinone提供了一个4合1分布式框架和简单易用的编程API,实现对多台计算机CPU、内存、硬盘的统一利用,从而获取到强大计算能力去解决复杂问题。
Fourinone框架提供了一系列并行计算模式(农民工/包工头/职介绍/手工仓库)用于利用多机多核CPU的计算能力;提供完整的分布式缓存和小型缓存用于利用多机内存能力;提供像操作本地文件一样操作远程文件(访问、并行读写、拆分、排它、复制、解析、事务等)用于利用多机硬盘存储能力;由于多计 算机物理上独立,Fourinone框架也提供完整的分布式协同和锁以及简化MQ功能,用于实现多机的协作和通讯。
所以,框架和编程API是Fourinone的核心,它不实现具体的分布式应用,但是你可以用它帮助你去实现具体的分布式应用,无论是分布式计算还是存储还是协同等。
在智能手机出现以前,我们会认为电话、MP3、应用程序、数码相机是完全不同的产品,实际上我们不清楚这些产品内在技术的联系,我们只是一个使用者,当智能手机出现以后,我们发现它们也可以结合的很好。
Fourinone实际上将多种分布式问题的理解融入到了一个框架中,考虑到底层实现技术的相似性,对复杂的分布式计算应用进行了大量简化和归纳,所以最后它看上去综合了4种主要的功能。
虽然中国人动辄花费上百万去购买美国人的应用服务器层软件,并误认为是需要数千工程师长周期才能完成的工程,但是有过多年的行业经验和认真研究过开源软件就知道,几乎所有的开源软件的作者一般只有1-3个人,这种创新孵化阶段的投资并不大。Hadoop的作者其实也是Lucene的作者,这跟软件外包以人头数计算利润的形式是不一样。如果进行了商业包装,加入了销售、解决方案、技术支持、售后服务等等,那整个服务团队和投资都会加大。
InfoQ:Hadoop这个社区现在的发展如何?如果其它用户选择这个产品出现问题时能否及时找到和产品一样免费或者廉价的技术支持?
彭渊: Hadoop社区现在正在被各商业公司借助“大数据”理念进行商业改装和推动,纵观十年来的it行业的几次技术浪潮:
·COM/COM+
·J2EE/EJB
·SSH
·SOA/SAAS
·云计算/大数据
Hadoop属于上面大数据这波潮,这个行业的技术推新规律从来都没变,都是先抛理念,再出产品,再卖服务,最终获取商业利益,所以Hadoop社区不会是完全单纯和廉价的。现在的Hadoop认证就是一种收费的技术培训服务,商业公司改装过的Hadoop产品肯定也是收费的。
而Fourinone做的是一个框架和工具,它不存在被商业改装和推动,所以它的社区更简单、完全免费。好的工具软件最好要做到自助,将复杂的问题简单化,而不是将简单的问题复杂化,就像使用Windows、 Word、 iPhone这些东西,几乎不需要太多学习成本,不需要过度依赖一个技术社区。Fourinone自带了一系列学习指南和功能Demo,几乎可以涵盖所有学习内容了。
InfoQ:系统中如果发送、接收的数据错误需要替换怎么做?
彭渊: Fourinone里的数据发送多数是工头将相关计算的数据/命令/消息通过手工仓库传给工人执行,并检验执行状态。如果发送接收发生错误,那通常有两种情况: 一种是系统故障引起的发送接收失败, 一种是业务逻辑意义上的错误数据。系统故障导致网络断掉或者挂机,框架会捕获故障信息并通告,工头在检验工人执行状态时会获知,并进行相应的业务上的故障处理,重发或者单独记录;业务逻辑意义上的错误数据,通常在工人的业务实现逻辑里去判断,这个是由开发者去控制,框架不做业务逻辑上的处理。
InfoQ:这个系统一旦遭遇故障,不同节点数据不一致,如何恢复整个系统?性能和安全性如何平衡,什么数据放在这个系统上?淘宝自己的交易数据、财务信息、组织人事信息是否也在这个架构上管理?
彭渊: 这两个问题是以Hadoop的思维方式问的数据的存储和容灾处理。
Fourinone不是Hadoop,它是一个框架和API,它不是一个存数据的文件系统,它的计算数据的来源可以是任意数据,如数据库,分布式文件系统,缓存系统等等,但它本身不存储数据,只做分布式计算,通常一个典型的分布式计算结构,由工头、工人、职介所组成,其中工头是嵌入式的,它不是一个服务程序,在嵌入它的系统里new工头类并管理它的生命周期,工头不存在恢复或者容灾的概念。工人和职介所是服务程序,如果工人节点故障,职介所会实时感知,工头分配计算时会获取到最新活跃工人数量,如果是职介所节点故障,Fourinone实现了领导者选举机制,会实时切换到备份职介所上。
Fourinone新版本提供了对分布式文件的操作处理,将集群中所有机器的硬盘资源利用起来,通过统一的fttp文件路径访问,如:
windows:fttp://v020138.sqa.cm4/d:/data/a.log
linux:fttp://v020138.sqa.cm4/home/user/a.log
提供对集群文件的操作支持,包括:
1、元数据访问,添加删除,按块拆分, 高性能并行读写,排它读写(按文件部分内容锁定),随机读写,集群复制等
2、对集群文件的解析支持(包括按行,按分割符,按最后标识读取)
3、对整形数据的高性能读写支持(ArrayInt比ArrayList存的更多更快)
4、两阶段提交和事务补偿处理
5、自带一个集群文件浏览器,可以查看集群所有硬盘上的文件(不同于Hadoop的namenode,没有单点问题和容量限制)
总的来说,将集群看做一个操作系统,像操作本地文件一样操作远程文件。
但是Fourinone并不提供一个分布式存储系统,比如文件数据的导入导出、拆分存储、负载均衡,备份容灾等存储功能,不过开发人员可以利用这些API去设计和实现这些功能,用来满足自己的特定需求。
所以,Fourinone将复杂的备份容灾通过简化的API方法给开发者,但是不实现具体的备份策略,这个由开发者根据自己的存储特点去做。就像使用Windows,往C盘存了一张图片,Windows不会自动往D盘复制一张,但是提供鼠标右健点复制的功能,你可以使用该功能去备份。
Fourinone为了追求一个最轻巧精简的框架,只做俄罗斯套娃中最小的一个,开发者可以去细细体会,并扩充更多的精彩。
彭渊,现在淘宝网任高级专家,从事互联网核心技术研究。之前在金蝶总体架构部任SOA架构师,负责设计ESB。
从业Java技术领域十多年,撰写过多款开源软件,拥有软件著作权的代表作有:BS系列软件(包括财务进销存、OA产品、CRM等)、FMS视频会议、Flash网站生成软件。其中BS系列软件获得过风险投资, FMS视频会议获得金山举办的首届中国优秀软件创新大赛优秀奖。《BS财务进销存》、《FLASH网站生成软件》在华军、天空可免费下载。
《淘宝分布式并行计算四合一框架Fourinone》是云计算方面作品,目前已经通过压测并用于淘宝业务场景, WordCount和排序等经典指标均优于Hadoop。