数据处理系统重构

数据处理系统是一个复杂庞大的系统,涵盖了数据采集、清洗、计算、加载,数据挖掘,数据可视化等环节,每个环节都是一个复杂的系统,也有各种各样的技术实现,整个系统由各个环节串联而成,任何环节都可能影响整个系统的可靠性,稳定性和处理能力,所以选择合适的技术和方案很重要。

重构原因

原有的数据处理系统大概架构,如图 1。其中:
Amazon S3: Amazon Simple Storage Service, 亚马逊云存储服务。
Amazon Redshift: 亚马逊基于PostgreSQL开发的数据仓库服务。

图片链接

如图1 所示,整个系统主要有采集、清洗、计算,存储,上层应用等主要环节,主要基于Redshift做离线计算。
这个系统主要的问题:

  • 数据处理速度慢
    随着业务增长,数据量越来越大,基于Redshift的计算越来越慢,一个job跑完花费几个小时,报表生成滞后严重,影响相关人员的使用。

  • 监控不完善
    监控不足,导致数据异常后,不能及时发现,发现了也很难排查和定位问题,需要很高的人力成本。

  • 数据时效性低
    由于整个系统没有实时计算,导致数据的时效性低,不能实时了解线上业务运行状况。

综上原因,老的数据处理系统,已经不能满足业务发展需求,因此开始了整个系统的重构。

新数据处理系统

新的数据处理系统主要引入了Kinesis,Spark等相关技术,同时开发了新的数据可视化系统。新数据处理系统包括多个业务功能,整体数据流架构如图2,其中:
Amazon Kinesis Stream/Firehose: 亚马逊的Kafka,又在功能上进行了扩展。
Kstash/Ksplit/Kupload: 实时数据清洗、处理、分发应用。

说明

如图所示,整个大数据处理过程包括数据源、数据通道、数据计算处理、数据存储、应用等环节。各个环节都具有弹性,出现性能瓶颈时,很容易扩展。数据流向的各环节有监控,出现异常能及时报警。整个系统的计算有两种:离线计算、实时计算。

下面说明下大数据处理系统各个阶段的实现及原因。

  1. 数据采集

本公司的游戏各个产品主要面向欧美和亚洲用户,横跨多个时区,为了节省成本、提高效率,公司的各个系统偏向使用亚马逊提供的云服务,包括服务器,数据库,存储等等。

由于业务越来越多,数据源也越来越多,包括老的游戏gameserver记录的数据,API server采集的客户端或SDK的数据,第三方平台的发送的数据等等,数据位置也分散在世界各地,数据源的复杂性,使得实现快速、稳定的数据采集系统有很大的挑战。

经过技术调研,最终选择Amazon Kinesis作为数据通道,将各种数据源统一接入,在各个数据源处,部署Kinesis Agent,自动将数据采集到Kinesis中。Amazon Kinesis 实时、可靠、易用、成本低,可随时根据需要动态调节数据流的吞吐量,使用它,使整个采集系统更可靠,容易维护。

  1. 数据处理与加载

老系统是基于SQL的,各个指标的计算逻辑都是使用SQL实现的,使用MapReduce或其他方式来重新计算各个指标,工作量实在太大。所以首选支持SQL的大数据方案。经过比较,最终选择使用Spark,它提供了SQL计算引擎,Spark SQL,只需较少的代价,就可替代老的SQL计算逻辑。同时,Spark 还提供了Spark Streaming、Spark ML,只需一种框架就能实现实时计算、机器学习等功能,大大降低了使用成本。

Kinesis中的数据多种多样,有结构化的数据,也有非结构化的数据。对结构化的数据,可以直接供spark计算。对于非结构化的数据,先经过清洗、处理,生成结构化的数据,再供spark计算,以便减轻spark集群的压力,提高计算速度。

经过计算处理后的数据,按不同的业务需求,加载到不同存储中,比如每日报表、实时指标加载到Redshift,线上应用实时日志加载到Elasticsearch中,用户画像系统数据加载到Hbase中。

  1. 数据流程监控

监控功能涵盖了数据采集、计算、加载各个环节,监控指标包括各个游戏数据量、指标的计算和加载状态、job状态、时长等,一旦有异常及时报警。

  1. 数据应用

老系统使用第三方BI工具,不够灵活。所以对每日报表和实时指标,重新开发了一套完善的可视化系统。线上实时日志检索和分析,使用Kibana。用户画像产生的数据,供运营系统使用。

难点

开发新系统遇到了很多的难点,其中最大的是Spark的使用。刚开始的Spark 程序运行很慢,不能满足需求,逐步优化,最终,离线处理时间降到了一小时内。

总结

新大数据处理系统经过近一年的开发、部署、测试,完全替代了老的系统,并稳定运行。
新系统带来了很大的改进:

  • Spark 集群规模不到Redshift集群一半,离线计算速度却提高了5倍以上
  • 实时数据帮助实时监控线上产品运行状况
  • 更加完善的数据体系让产品运营更加方便、更加高效、更加精准
改变自己,改变世界,支持我吧!