从应用架构看大数据

如果每个人的心中都有一把青冥剑,那么每个人的眼中有自己大数据。这是一个所谓大数据的年代,但是从应用架构的层面看,大数据应用一般都是数据密集型的应用,可以从分层的角度来看数据密集型应用的架构。

该架构可以被分成5层:
• 基础设施层
• 持久化层
• 集成层
• 分析层
• 参与层

从下往上,遍历一下各层的主要用途.

基础设施层(Infrastructure layer)

基础设施层主要关注虚拟化,扩展性和持续集成。在实践中, 虚拟化一词这里指的是开发环境 的VirtualBox以及Spark 和Anaconda 的虚拟机环境。 如果扩展它,可以在云端创建类似的环境。创建一个隔离的开发环境,然后迁移到测试环境,通过DevOps 工具,还可以作为持续集成的一部分被部署到生产环境,例如 Vagrant, Chef, Puppet, 和Docker。Docker 是一个非常流行的开源项目,可以轻松的实现新环境的部署和安装。

持久化层(Persistence layer)

持久化层管理了适应于数据需要和形态的各种仓库。它保证了多元数据存储的建立和管理。 这包括关系型数据库如 MySQL和 PostgreSQL;key-value数据存储 Hadoop, Riak, 和 Redis ;列存储数据库如HBase 和 Cassandra; 文档型数据库 MongoDB 和 Couchbase; 图谱数据库如 Neo4j. 持久化层还管理了各种各样的文件系统,如 Hadoop’s HDFS. 它与各种各样的存储系统交互,从原始硬盘到 Amazon S3. 它还管理了各种各样的文件存储格式 如 csv, json, 和parquet(这是一个面向列的格式).

集成层(Integration layer)

集成层专注于数据的获取、转移、质量、持久化、消费和控制。基本上由以下的5C来驱动: connect, collect, correct, compose和consume.这五个步骤描述了数据的生命周期。它们聚焦于如何获取有兴趣的数据集、探索数据、反复提炼使采集的信息更丰富,为数据消费做好准备。因此, 这些步骤执行如下的操作:

  • Connect: 目标是从各种各样数据源选择最好的方法.如果存在的话,这些数据源会提供APIs,输入格式,数据采集的速率,和提供者的限制
  • Correct: 聚焦于数据转移以便于进一步处理,同时保证维护数据的质量和一致性
  • Collect: 哪些数据存储在哪,用什么格式方便后面阶段的组装和消费
  • Compose: 集中关注如何对已采集的各种数据集的混搭, 丰富这些信息能够构建一个引入入胜的数据驱动产品。
  • Consume: 关注数据的使用、渲染以及如何使正确的数据在正确的时间达到正确的效果。
  • Control: 这是随着数据、组织、参与者的增长,早晚需要的第六个附加步骤,它保证了数据的管控。
    下图描述了数据获取以及提炼处理的迭代过程:

分析层(Analytics layer)

分析层是处理数据的地方, 通过各种模型, 算法和机器学习管道从而得出有用的见解。简而言之,使它足够强大以致于在单个同一平台完成多种范式的分析处理,允许批处理, 流处理和交互式分析。在大数据集上的批处理尽管有较长的时延,但同时能够提取模式和见解,也可以在流模式中处理实时事件。交互和迭代分析更适合数据探索。 Spark 提供了Python 和R语言的绑定API,通过SparkSQL 模块和Spark Dataframe, 它提供了非常熟悉的分析接口.

参与层(Engagement layer)

参与层完成与用户的交互,提供了 Dashboards,交互的可视化和告警,可以在使用PyData 生态系统提供的工具如Matplotlib, Seaborn, 和Bokeh.

5