流式计算的几个问题

通过最近一年的流式计算的研发、维护和学习,及对《CLOUD-BASED DATA STREAM PROCESSING》的学习,总结一下流式计算的几个问题。

问题:

  • 解决什么业务问题
  • 流式计算系统的关键技术
  • 未来的发展方向

一、解决什么业务问题

随着PC互联网与移动互联网在国内外的普及,越来越多智能设备及传感器互联成网,同时产生的数据规模也越来越大,企业或者国家机构就有非常有经济或行政动力去实时获取这些设备所采集或感知的“对象状态”,以实时地计算出目标群体或场景的动态描述。而在流式计算普及前,大家通常使用MR模型的分布式批处理系统完成大规模数据的计算,但其存在先天的延迟大的特性。这对于,尤其是对于移动设备的高度实时化,批处理计算已无法胜任当前的数据计算。与此同时,对于某些业务场景,实时性越高,客户或使用方越能从实时度中获益,诸如互联网广告系统的投放状态、广告主预算报表、结算报表等。

二、流式计算系统的关键技术

流式计算系统首先是一种分布式计算计算,因此其在支撑自身的计算模型时必然会遇到分布式系统都会遇到的问题。其一便是扩展性,即在数据规模变化时,流式计算如何保证自身适应这种变化;其二是容错机制,这是分布式系统亘古不变的话题,只是由于流式计算模型有其特殊性,容错机制除了分布式系统都有的状态一致性保证,还有粒度细到单事件数据的完整性保证(由弱至强三类语义:at-most-once,at-least-once,exactly-once)。

1、扩展性

数据分割并行处理:首先要解决的是如何分割数据,即提供哪些分割数据的手段,像STORM就提供了Shuffle grouping\Fields grouping\All grouping\Global grouping\None grouping\Direct grouping\Local or shuffle grouping\Custom八种数据分割并行处理方式。确定了如何分割,还需要解决如何获得较优的分割粒度。只所心说“最优”,是因为分割粒度越小,虽然并行度加大,整体计算加快,但会带来计算节点也随之变多,导致资源消耗加大的问题;反之,单个计算的计算负载就加大,带来整体计算变慢,甚至稳定性问题。

对于如何分割的问题,目前主流的流式计算系统都能提供框架层面的支持。但对于如何获得较优的分割粒度,目前普遍是通过“事先流量计算+测试作业反馈调试”完成一个较优的分割粒度,几乎无流式计算系统提供框架层面的自主调整分割粒度,完成对数据规模的变化适配。因此,目前对于这个问题普遍采用静态(事前)方案。

但最近云计算提供的弹性计算(单机的垂直弹性与机群的水平方向弹性)能力,可以在一定程度完成计算粒度的较优化扩展,即根据负载情况动态地收缩或扩展计算节点的数量。但目前对于有状态计算节点的弹性扩展还有技术难点没有突破。

上面解决了扩展性中的数据流分割问题后,后面就需要有对应的计算节点与数据流分割对应。即数据发生变化后,数据流完成分割,计算节点需要启动或停止,以对应分割后的数据流变化。

计算节点分布式部署与迁移:首先要解决的就是如何启动、停止及迁移计算节点,然后就需要解决在何处启动、停止或迁移计算节点以保证某些计算资源的负载均衡。这两个问题总结起来就是由谁来发起节点的部署、如何迁移计算节点、负载均衡时的考虑对象是什么、以及负载均衡策略实施算法的类型。

部署或迁移发起者:中央控制,即由一个管理组件保持对全局状态的管控,完成节点的启、停及迁移;分布式协商,即各个计算节点通过分布式算法协商得出启、停及迁移。虽然中央控制面临单点问题,但由于分布式协商的复杂高,工程实现困难且难维护,多数流式计算系统都采用中央控制完成。与此同时,通过添加热备解决中央控制组件单点问题。

迁移策略:当节点发生迁移时,需要解决新旧节点计算状态衔接,有两种策略:停止旧->迁移计算状态->启动新;迁移计算状态->启动新->同步->停止旧。

负载资源类型:CPU、网络延迟、计算延迟等。这会根据不同的流式计算系统及具体的业务场景选择以何种或几种资源类型组合作为负载均衡的判断依据。

负载均衡算法:离线;在线

2、容错机制

在发生计算节点故障及计算辅助组件故障(传输组件、中间状态存放组件)时,流式计算需要容错机制确保这些故障对系统使用方透明、或者至少做到提供给用户相应的容错接口。

数据完整性:目前完整性技术有ACK机制与事务机制两种,其中ACK机制以STORM的XOR技术最为抢眼;事务机制包括计算节点的事务机制(处理与提交分离)与中央控制节点的事务机制(TM Update机制)。

状态一致性:状态一致性保证都需要通过将状态”持久化“,以确保在节点发生故障后新节点能从'持久化“的状态中恢复计算状态。其中有两种方式:主动同步多份状态,以实现大概率上的”持久化“(热备一般这样做);备份状态到磁盘完成状态的持久化(即checkpoint机制)

三、未来的发展方向

1、强大的事件管理语义提供简洁计算编程框架

2、垂直方向弹性,以实现“削峰填谷”

3、需求定制的动态负载均衡

4、优雅的容错机制,即在容错机制触发时尽量减少性能的损失

 

发表评论