主流大数据系统在后台的层次角色及数据流向

以上两者是典型的缓存系统,在中等数据规模下表现较好,对于更大数据规模就会比较吃力,这时就需要使用HBase或者Cassandra等支持实时场景的大容量存储系统。同时,由于HBase和Cassandra支持超大规模数据的持久化存储,它们也可以用在离线存储领域。

大数据的计算层平台按照时效性划分,也分为离线计算和在线计算(或叫实时计算)两种类型,而各个计算间的数据传递工作一部分由存储系统完成,另一部分由数据管道系统(如消息队列系统等)完成。离线计算平台通常用来处理数据量巨大,耗时长的计算任务,适用于对大量数据的统计分析和深度挖掘。

典型的离线计算平台有:

1、作为通用并行计算模型的hadoop MapReduce、Spark;

2、高性能并行计算的MPI;

3、数据仓库式计算的Hive、Impala、Shark;

4、图模型计算的Pregel、Bagel、GraphX等。

在线计算/实时计算平台通常用来处理流式数据,适用于计算量一般较轻,且时效性需求高或永不间断的计算场景。

常见的实时计算平台有:Storm、S4、Spark Streaming等。消息队列平台一般用于上下游计算的数据衔接,特别是时效性要求较高的计算流程,每个计算步骤的输出结果写入消息队列平台后,下游计算可立即感知并启动计算,缩短反应时间。业界用得较多的平台包括轻量级的Kestrel,以及重量级、容错性好的Kafka。

业务逻辑层承载着各个业务具体的计算逻辑,一般来说有日志处理、离线分析、深度挖掘、分类聚类、预测建模等离线业务,也有实时挖掘、实时监控等实时处理业务。

最外的服务层就是直接对外提供服务的各个业务的线上服务器集群。

位于后台的各个大数据平台,为了容灾、资源复用、例行维护的考虑,其服务访问入口可能会发生变化,因此往往需要一个资源定位系统来获取各个平台当前最新的服务访问入口。通过资源定位系统提供的自动定位服务能力,各个平台服务接口的迁移就可以对使用者透明。

在大数据各平台的整体层次结构中,最不可或缺的配套系统就是自动监控运维系统。海量数据的处理,对存储和计算的压力都是非常巨大的,所以各个平台出现硬件异常和软件异常的概率急速上升,因此需要一套自动监控运维系统来不断监控各个服务器的硬件状况,操作系统层面的CPU、内存、IO、网络等各个指标,大数据平台层面的运作情况,业务逻辑层面的服务状态等。

另外一方面,虽然各个大数据平台都具有一定的容错能力,但是并不是所有类型的错误都能够容忍,并且当出现了可容忍的小错误时,往往预示着更致命的错误隐藏在背后,若不及时发现,就很可能导致非常严重的后果。因此需要监控运维系统将这些小问题提前预警出来,以便将事故扼杀在萌芽中。自动监控运维系统一般具有系统状态检测、性能分析、监控报警、自动发布与回滚等能力。尤其是自动发布与回滚能力,对于海量用户的业务来说,是必不可少的,可以大大减轻运维的工作量,消除容易出错的人工环节,增加业务的稳定性。

前面给出了各个大数据系统在后台的层次结构,接下来介绍一下业务数据在各个平台之间的流向关系。

大数据

如上图所示,数据的来源一般有三种:第一种是线上的实时日志流;第二种是定期批量收集和更新的数据;第三种是长期不变的静态数据。前两种数据通常发布到订阅发布系统当中,以通知下游消费者进行消费。静态数据一般直接保存在离线存储系统中,供需要时访问。

发布订阅系统负责管理数据的发布和收集下游的订阅需求,将数据分发给对应的消费者,一部分数据会发送到在线计算平台,另一部分数据会落入离线存储平台。发布订阅系统可分为持久式和非持久式,可根据业务的特性选用。

对于在线处理部分,在线计算平台所需的数据一部分来自从发布订阅系统中获取实时数据,另一部分来自在线存储系统。在线计算平台常见的计算类型有在线服务、流式计算、实时回馈等,分别服务于数据抓取、实时统计、实时监控、在线分析、实时推荐等应用。在线存储平台中的数据一般分为临时缓存数据和持久化数据,这些数据通常来自在线计算平台和离线计算平台。在线存储平台承载的应用有:KV缓存、数据库缓存、流式数据、字典服务等。