大数据流式计算关键技术
流式计算关键技术
针对具有实时性、易失性、突发性、无序性、无限性等特征的流式大数据,理想的大数据流式计算系统应该表现出低延迟、高吞吐、持续稳定运行和弹性可伸缩等特性,这其中离不开系统架构、数据传输、编程接口、高可用技术等关键技术的合理规划和良好设计。
系统架构
系统架构是系统中各子系统间的组合方式,属于大数据计算所共有的关键技术。当前,大数据流式计算系统采用的系统架构可以分为无中心节点的对称式系统架构(如S4、Puma等系统)和有中心节点的主从式架构(如Storm系统)。对称式系统架构系统中各个节点的功能是相同的,具有良好的可伸缩性。但由于不存在中心节点,在资源调度、系统容错、负载均衡等方面需要通过分布式协议实现。例如,S4通过ZooKeeper实现系统容错、负载均衡等功能。
图1 对称式架构
图2 主从式架构
主从式系统架构系统存在一个主节点和多个从节点,主节点负责系统资源的管理和任务的协调,并完成系统容错、负载均衡等方面的工作;从节点负责接收来自主节点的任务,并在计算完成后进行反馈。各个从节点间没有数据往来,整个系统的运行完全依赖于主节点控制。
数据传输
数据传输是指完成有向任务图到物理计算节点的部署之后,各个计算节点之间的数据传输方式。在大数据流式计算环境中,为了实现高吞吐和低延迟,需要更加系统地优化有向任务图以及有向任务图到物理计算节点的映射方式。在大数据流式计算环境中,数据的传输方式分为主动推送方式(基于push方式)和被动拉取方式(基于pull方式)。
图3 数据流传输方式
主动推送方式是在上游节点产生或计算完数据后,主动将数据发送到相应的下游节点,其本质是让相关数据主动寻找下游的计算节点,当下游节点报告发生故障或负载过重时,将后续数据流推送到其他相应节点。主动推送方式的优势在于数据计算的主动性和及时性,但由于数据是主动推送到下游节点的,往往不会过多地考虑下游节点的负载状态、工作状态等因素,可能会导致下游部分节点负载不够均衡。
被动拉取方式是只有下游节点显式进行数据请求,上游节点才会将数据传输到下游节点,其本质是让相关数据被动地传输到下游计算节点。被动拉取方式的优势在于下游节点可以根据自身的负载状态、工作状态适时地进行数据请求,但上游节点的数据可能未必得到及时的计算。
大数据流式计算的实时性要求较高,数据需要得到及时处理,往往选择主动推送的数据传输方式。当然,主动推送方式和被动拉取方式不是完全对立的,也可以将两者进行融合,从而在一定程度上实现更好的效果。
编程接口
编程接口用于方便用户根据流式计算的任务特征,通过有向任务图来描述任务内在逻辑和依赖关系,并编程实现任务图中各节点的处理功能。
用户策略的定制、业务流程的描述和具体应用的实现需要通过大数据流式计算系统提供的应用编程接口。良好的应用编程接口可以方便用户实现业务逻辑,减少编程工作量,并降低系统功能的实现门槛。
当前,大多数开源大数据流式计算系统都提供了类似于MapReduce的用户编程接口。例如,Storm提供Spout和Bolt应用编程接口,用户只需要定制Spout和Bolt的功能,并规定数据流在各个Bolt间的内在流向,明确数据流的有向无环图,即可满足对流式大数据的高效实时计算。也有部分大数据流式计算系统为用户提供了类SQL的应用编程接口,并给出了相应的组件,便于应用功能的实现。
高可用技术
大数据批量计算将数据事先存储到持久设备上,节点失效后容易实现数据重放。而大数据流式计算对数据不进行持久化存储,因此批量计算中的高可用技术不完全适用于流式计算环境。我们需要根据流式计算的新特征及其新的高可用要求有针对性地研究更加轻量、高效的高可用技术和方法。大数据流式计算系统的“高可用性”是通过状态备份和故障恢复策略实现的。当故障发生后,系统根据预先定义的策略进行数据的重放和恢复。按照实现策略,可以细分为被动等待(passive standby)、主动等待(active standby)和上游备份(upstream backup)3种。
被动等待策略主节点B进行数据计算,副本节点B′处于待命状态,系统会定期地将主节点B上最新的状态备份到副本节点B′上。出现故障时,系统从备份数据中进行状态恢复。被动等待策略支持数据负载较高、吞吐量较大的场景,但故障恢复时间较长,可以通过对备份数据的分布式存储缩短恢复时间。该方式更适合精确式数据的恢复,可以很好地支持不确定性的计算应用,在当前流式数据计算中应用得最为广泛。
图4 被动等待策略
主动等待策略系统在为主节点B传输数据的同时,也为副本节点B′传输一份数据副本,以主节点B为主进行数据计算,当主节点B出现故障时,副本节点B′完全接管主节点B的工作。主副节点需要分配同样的系统资源。这种方式故障恢复时间最短,但数据吞吐量较小,也浪费了较多的系统资源。在广域网环境中,系统负载往往不是过大时,主动等待策略是一个比较好的选择,可以在较短的时间内实现系统恢复。
图5 主动等待策略
上游备份策略每个主节点均记录其自身的状态和输出数据到日志文件,当某个主节点B出现故障后,上游主节点会重放日志文件中的数据到相应的副本节点中,进行数据的重新计算。上游备份策略所占用的系统资源最小,在无故障期间,由于副本节点B′保持空闲状态,数据的执行效率很高。但由于其需要较长的时间恢复状态的重构,故障的恢复时间往往较长。当需要恢复时间窗口为30分钟的聚类计算时,就需要重放该30分钟内的所有元组。可见,对于系统资源比较稀缺、算子状态较少的情况,上游备份策略是一个比较好的选择方案。
图6 上游备份策略
此外,大数据流式计算系统也离不开其他关键技术的支持,比如负载均衡策略。实现对系统中的任务动态、合理地分配,动态适应系统负载情况,保证系统中的任务均衡和稳定地运行。数据在任务拓扑中的路由策略促进系统中负载均衡策略的高效实现、数据的合理流动及快速处理。