BT

您是否属于早期采用者或者创新人士?InfoQ正在努力为您设计更多新功能。了解更多

姜冰:FreeWheel高性能可扩展的流式计算框架实践
录制于:

| 受访者 姜冰 关注 0 他的粉丝 作者 InfoQ 关注 5 他的粉丝 发布于 2017年9月5日 | 硅谷人工智能、机器学习、互联网金融、未来移动技术架构 ,尽在QCon上海2017
15:48

个人简介 姜冰,我加入FreeWheel之前,曾经在Yahoo的Hadoop Team还有人民搜索等公司有超过7年的大数据研究和实践的经验,现在是FreeWheel大数据处理平台的主任工程师,全面负责FreeWheel 数据平台的架构和研发的工作。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. 这里是QCon北京2017采访间,我们请到了FreeWheel的姜老师。请姜老师介绍一下自己吧。

姜冰:我是来自FreeWheel的姜冰,今天很高兴来到QCon2017北京的现场,给大家分享一个FreeWheel大数据处理实践的报告。在我加入FreeWheel之前,我曾经在Yahoo的Hadoop Team还有人民搜索等公司有超过7年的大数据研究和实践的经验,现在是FreeWheel大数据处理平台的主任工程师,全面负责FreeWheel 数据平台的架构和研发的工作。

   

2. 能介绍一下你们的应用特点吗,对数据处理的量级和实时性的要求是怎样的?

姜冰:FreeWheel 的数据是跨DC的,我们的数据服务器来自于全球的6个DC。我们的广告服务器产生数据之后会聚集在一起。我们通过Global Kafka的方式聚集在一起,每天会产生大概超过3个TB的数据文件,每天展示广告的数据量是超过10亿次的。

   

3. 那您觉得现在的系统问题是什么?您为什么选择基于Lambda的数据处理架构?

姜冰:基于Lambda的数据处理架构是源于客户对我们数据平台的需求。他们希望能够实时地查询到他们广告投放的状况。Lambda架构本身包括Speed Layer和底下的Batch Layer。查询引擎是通过Presto去查询,Presto的底层是由实时的HBase Table和Parquet文件组成。HBase Table要有一个流数据的处理框架,通过Kafka消费,然后最终处理写到实时的HBase Table。离线方面,我们通过一个Map Reduce,会将HBase Table,通过Parquet文件的方式dump到我们的HDFS上。我们的Presto会同时向这两边去查询数据,最终反馈结果。

   

4. 现在搭建的这套系统已经在公司里广泛应用起来了是吗?

姜冰:对的,这套系统的话,现在已经为我们的数据科学家,为我们的客户支持团队提供了每天大量查询的查询引擎,他们通过我们这套系统可以实时地看到我们的数据广告投放的状况,以及他们据此可以研究些趋势类的报告,反馈给客户。

   

5. 那您觉得在这些广泛应用中最大的难点是什么,您是怎么解决这些问题的?

姜冰:在我们使用这套架构当中,其实所谓的难点第一是我们整个的环境部署问题,因为我们的环境是自己研发的。刚才提到我们的数据每天有大量的会话性的数据,这些会话性的数据是由一个request和若干个ack组成,流式处理框架需要能够将这些同一个transaction下的request ack聚集在一起,这样就可能会遇到一个问题就是数据到达的时间,会有比较大的间隔。对于我们的框架来说,框架需要能够及时地发现这些late data,就是到达时间可能晚于期望,这样在我们架构上其实有很多嵌入到处理逻辑里面的一些代码。这样的话使用普通的Spark Streaming 或者Storm那种类型的流式处理框架不能满足我们业务需求,所以基于此我们通过Docker +Slider的方式开发了自己的一套流式处理框架满足业务需求。我想这就是我们目前遇到的主要的困难和解决的办法。与此同时还有一些困难是我们扩展性的问题,因为我们流量的变化是很难预测的,我们支持的业务是给美国媒体公司来提供广告投放业务,现在媒体公司本身流量的波动是非常大的,就像奥运会期间我们可以看到NBCU作为美国的主办方,每天的流量就突然间比平常以前的流量超过2到3倍,这样我们的架构也应该拥有足够的可伸缩性,对底层数据处理平台来说,也应该具有非常好的可伸缩性。这点上我们引入了Slider + Docker的方式使我们的服务变得非常灵活,我们可以根据业务流量的需求,及时地修改我们每个层次上服务实例的个数,去满足我们数据处理的需求。

   

6. 那您现在系统整个运维自动化程度如何?

姜冰:系统整个运维自动化程度,整体上来说我们内部有一个比较完善的CI/CD的流程。这套系统基于Docker来实现测试环境和生产环境的统一。在部署上首先经过回归测试,经过验证之后,会直接提交到我们的Docker  Registry上,后续无论是测试环境还是生产环境我们都通过统一标准的方式来部署,这样整体上实现了端到端自动化的流程。与此同时还有一个问题就是,现在不同的业务,因为它对于服务质量的要求和SLA保证的情况(不同),对于发布的策略有所不同,有些业务可能希望SLA比较高,可能是3个9或者4个9,那么停机维护时间的要求会非常严格或者说苛刻。在此我们是通过Slider的方式,来实现一个类似于灰度发布和基于部分来发布,尽最大可能性降低整个服务维护的时间,保证在服务稳定的情况下完成性能以及一些新版本的发布。

   

7. 那您在Lambda数据处理架构中都用了哪些重要的开源模块呢?

姜冰:在开源这块,我们主要依赖于Hadoop的生态系统 ,主要包括像Hadoop,Kafka,HBase,以及我们在对应用的组装这块引入了Apache Slider,它也是一个应用式的框架,基于此我们可以通过Apache Slider把我们的应用资源需求,还有内部的逻辑关系表达出来。通过向YARN发请求然后申请资源,最终把服务部署到YARN平台上,这是我们依赖的整个开源的情况。

   

8. 那么您的公司有没有对这些开源模块进行二次化的定制开发?

姜冰:在这块,我们确实有比较多的实践,今天在讲座里也提到,我们对于Apache Slider,其实是有很多的改进和优化。比如我们改进了Slider的一个flex的功能,使得Slider可以在指定的机器上去启动和关闭某些实例,同时我们也修改了SliderAgent和DockerContainer它们状态不一致的问题,此外我们还解决了一个在Slider App内部去动态升级Docker Image的一个问题。除了Slider之外,我们其实还优化了Hadoop YARN 的环境。我们讲到我们的计算服务和底下的核心服务是共置机器的,那我们怎样保证计算服务和核心服务互相不干扰,其中一点就是我们把以cpuset为CGroup核心的这样一套资源隔离的方案,引入到我们的YARN平台上,这样通过YARN,我们可以去设置更灵活或者说更稳定的一个CGroup的策略。

   

9. 在公司应用中可能有两种应用,一种是调研式的应用,一种是在生产环境中正式地使用,这两种应用方式,您的部署包括应用方案,都是混合的吗还是说专门为生产环境有一套自己的保障服务的方式?

姜冰:我觉得是这样,我们本身从环境上来说存在一个研发与测试环境(R&D)和一个生产环境(Production),但是我们R&D的环境和Production的环境,依赖的环境的部署状况和使用的平台,都是完全一样的。因为刚才也提到我们整个服务是依赖Hadoop,Kafka,HBase相关的开源组件,然后我们的部署方案又定位成Slider + Docker,这样在我们任何的环境上,包括R&D,包括Production,甚至我们现在大规模使用的AWS上,实际上都是完全一套的解决方案,相当于一套代码,我们开发的任何一套作业的代码和服务的代码,都可以没有任何差别地部署到我们R&D,部署到Production以及部署到AWS的云环境上。

   

10. 可扩展性一致性确实做的非常好,那您觉得系统有没有其他没有解决的问题,改进的计划是什么?

姜冰:说到没有解决的问题,和改进的点,我觉得还是蛮多的。因为对于我们来说,我们实现了自己的一套流式数据处理框架。对于流式处理框架很难解决的一个问题,就是有关于Exactly Once,就是怎样保证所有的数据处理都是幂等的。我们在处理上引入了HBase,引入了Kafka,但是仍然不能保证我们的数据可以100%地输出到下游。因为有一种可能性,比如因为网络情况的改变、依赖服务的变化等异常,那么在异常的情况下我们怎么样去及时地发现这种差异,这也是我们的流式处理框架需要解决的最重要的问题,只有这样我们才可以保证经过我们流式框架处理过的数据是非常完整的,没有任何丢失的。基于这点我们内部会实时监控数据质量,并有完整的数据修复流程。 因此,监控从Kafka产生的数据,到最终输出出来的HBase和底下存储到Parquet上的文件的数据,要保证两者是一致的,这点我们有一个非常完善的plan,我们现在正在积极推动这一块。

除此之外其实我们在Slider上也是在继续的深耕,因为我们在大规模的依赖Slider,所以也有工程师在做关于Slider的一个状态的管理,包括它更好地去做gracefully stop这一块,我们也有非常多的资源的投入,这些都是我们接下来要继续推动的工作。

   

11. 刚才提到Lambda框架这块基于很多开源的组件做了很多二次开发,您觉得是不是未来业界的趋势,大量的使用开源软件,在此基础上进行二次开发,然后适配公司的业务?

姜冰:其实我们现在都是以拥抱开源的心态来做一些事情,开源给我们很多非常好的选择。因为开源意味着我们有更多的机会和业界的技术同仁一起探讨问题,无论你在哪里,都可以保持同步,这点非常好。另外开源的话不光是可以交流一个公司的需求,也可以和其它公司共同分享一些使用案例,分享一些见解,我觉得这点也是弥足珍贵的。所以在这样的背景下,我们非常拥抱开源的技术,但是我们在拥抱的过程中也是非常谨慎的。任何的技术,首先要看技术底下的社区的活跃度,另外也在看技术本身,是否能够足够解决我们的问题,就是说既要看到开源的优势,也要看到开源我们需要慎重的地方。所以说我觉得尽可能和开源项目做好集成,又要慎重地看他们提供的一些新的feature,是否过度设计以及过度复杂,是否能够满足我们的需求等。

InfoQ:那今天的采访就到这,谢谢姜老师的分享。

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT