http://www.simutt.com

平台架构研究报告

近日, 国际开源界顶级会议LC3(LinuxCon + ContainerCon + CloudOpen)首次在国内举行,阿里云首席架构师唐洪作为特邀嘉宾出席并发表主题演讲。其中第二部分,主要分享了阿里云目前的技术架构和亮点,以及在此基础上形成的广泛的阿里云产品生态。

金准数据从数据来源、数据源结构、数据变化程度和数据规模等4个维度对数据源进行分类,来介绍大数据平台架构技术选型与场景运用。本文要分享的大数据平台架构技术选型及场景运用偏向于工程方面。

一、大数据平台

大数据在工作中的应用有三种:

与业务相关,比如用户画像、风险控制等;

与决策相关,数据科学的领域,了解统计学、算法,这是数据科学家的范畴;

与工程相关,如何实施、如何实现、解决什么业务问题,这是数据工程师的工作。

如图所示,大数据平台第一个要素就是数据源,我们要处理的数据源往往是在业务系统上,数据分析的时候可能不会直接对业务的数据源进行处理,而是先经过数据采集、数据存储,之后才是数据分析和数据处理。

从整个大的生态圈可以看出,要完成数据工程需要大量的资源;数据量很大需要集群;要控制和协调这些资源需要监控和协调分派;面对大规模的数据怎样部署更方便更容易;还牵扯到日志、安全、还可能要和云端结合起来,这些都是大数据圈的边缘,同样都很重要。

二、数据源的特点

数据源的特点决定数据采集与数据存储的技术选型,我根据数据源的特点将其分为四大类:

第一类:从来源来看分为内部数据和外部数据;

第二类:从结构来看分为非结构化数据和结构化数据;

第三类:从可变性来看分为不可变可添加数据和可修改删除数据;

第四类,从规模来看分为大量数据和小量数据。

1、内部数据与外部数据

内部数据:来自企业内部系统,可以采用主动写入技术(push),从而保证变更数据及时被采集。

外部数据:企业要做大数据的话肯定不会只局限于企业内部的数据,比如银行做征信,就不能只看银行系统里的交易数据和用户信息,还要到互联网上去拉取外部数据。

外部数据分为两类:一类是要获取的外部数据本身提供API,可以调用API获取,比如微信;另一类是数据本身不提供API,需要通过爬虫爬取过来。这两类数据都不是我们可控制的,需要我们去获得,它的结构也可能跟我们企业内部数据的结构不一样,还需要进行转换,爬虫爬取的数据结构更乱,因此大数据平台里需要做ETL,由ETL进行数据提取、转换、加载,清洗、去重、去噪,这个过程比较麻烦。爬虫爬过来的数据往往是非结构性的、文档型的数据,还有视频、音频,这就更麻烦了。

2、结构化数据和非结构化数据

结构化和非结构化数据在存储时的选型完全不同,非结构化数据偏向于文件,或者选择NoSQL数据库;考虑到事务的一致性,我们也可能选择传统的数据库。

3、不可变可添加数据和可修改删除数据

不变可添加数据:如果数据源的数据是不变的,或者只允许添加(通常,数据分析的事实表,例如银行交易记录等都不允许修改或删除),则采集会变得非常容易,同步时只需要考虑最简单的增量同步策略,维持数据的一致性也相对变得容易。

对于大数据分析来说,我们每天在处理的数据大部分是不可变更的。正如Datomic数据库的设计哲学就是数据为事实(fact),它是不可变的,即数据是曾经发生的事实,事实是不可以被篡改的,哪怕改一个地址,从设计的角度来说也不是改动一个地址,而是新增了一个地址。交易也是如此。

可修改可删除数据:银行的交易记录、保险单的交易记录,互联网的访客访问记录、下单记录等都是不可变的。但是数据源的数据有些可能会修改或删除,尤其是许多维表经常需要变动。要对这样的数据进行分析处理,最简单的办法就是采用直连形式,但直连可能会影响数据分析的效率与性能,且多数数据模型与结构可能不符合业务人员进行数据分析的业务诉求。如果采用数据采集的方式,就要考虑同步问题。

4、大数据量

大数据量:针对大数据量,如果属于高延迟的业务,可以采用batch的处理方式,实时分析则需要使用流式处理,将两者结合就是Lambda架构,即有实时处理、又能满足一定的大数据量,这是现在比较流行的大数据处理方式。

三、数据存储的技术选型

大数据平台特征:相同的业务数据会以多种不同的表现形式,存储在不同类型的数据库中,形成一种poly-db的数据冗余生态。

先把数据源进行分类,然后根据其特点判断用什么方式采集,采集之后要进行存储。数据存储的技术选型依据有三点:

第一点取决于数据源的类型和采集方式。比如非结构化的数据不可能拿一个关系数据库去存储。采集方式如果是流失处理,那么传过来放到Kafka是最好的方式;

第二点取决于采集之后数据的格式和规模。比如数据格式是文档型的,能选的存储方式就是文档型数据库,例如MongoDB;采集后的数据是结构化的,则可以考虑关系型数据库;如果数据量达到很大规模,首选放到HDFS里;

第三点是分析数据的应用场景。根据数据的应用场景来判定存储技术选型。

场景一:舆情分析

如图所示,爬虫将数据爬到Kafka里,在里面做流处理,去重去噪做语音分析,写到ElasticSearch里。会根据不同的场景选择不同的数据库,所以会产生大量的冗余。整个查询时间能控制在几秒以内。

场景二:商业智能产品

BI产品主要针对数据集进行的数据分析以聚合运算为主,比如求合、求平均数、求同比、求环比、求其他的平方差或之类的标准方差。我们既要满足大数据量的水平可伸缩,又要满足高性能的聚合运算。选择Parquet列式存储,可以同时满足这两个需求.

场景三:Airbnb的大数据平台

Airbnb的大数据来自两块:一是本身的业务数据,二是大量的事件。数据源不同,采集方式也不一样。日志数据通过发送Kafka事件,而线上数据则通过Sqoop同步。数据存储选择HDFS集群,然后通过Presto对Hive表执行即席查询。S3是一个独立的存储系统。

四、数据处理

数据处理分为三大类:

第一类是从业务的角度,细分为查询检索、数据挖掘、统计分析、深度分析,其中深度分析分为机器学习和神经网络;

第二类是从技术的角度,细分为Batch、SQL、流式处理、machine learning、Deep learning;

第三类是编程模型,细分为离线编程模型、内存编程模型、实时编程模型。

结合前文讲述的数据源特点、分类、采集方式、存储选型、数据分析、数据处理,我在这里给出一个总体的大数据平台的架构。值得注意的是,架构图中去掉了监控、资源协调、安全日志等。

左侧是数据源,有实时流的数据(可能是结构化、非结构化,但其特点是实时的),有离线数据,离线数据一般采用的多为ETL的工具,常见的做法是在大数据平台里使用Sqoop或Flume去同步数据,或调一些NIO的框架去读取加载,然后写到HDFS里面,当然也有一些特别的技术存储的类型,比如HAWQ就是一个支持分布式、支持事务一致性的开源数据库。

从业务场景来看,如果我们做统计分析,就可以使用SQL或MapReduce或streaming或Spark。如果做查询检索,同步写到HDFS的同时还要考虑写到ES里。如果做数据分析,可以建一个Cube,然后再进入OLAP的场景。

这个图基本上把所有的内容都涵盖了,从场景的角度来分析倒推,用什么样的数据源、采用什么样的采集方式、存储成什么样子,能满足离线、内存、实时、流的各种模型,都能从图中得到解答。

五、案例分析

阿里云首席架构师唐洪的部分演讲内容:

下图我们看到的是一个规模迅速扩张的阿里云基础设施分布图,它是什么样的呢?首先,我们数据中心是按照地域来组织,尤其是在具体地区里边有这样一个网络,我们管它叫做Transfer network转移网络。另外,还有一个骨干网络,这是一个数据中心之间的网络,我们怎么样和用户,用户如何和我们数据中心进行连接的这样一个骨干网。

今天的阿里云数据中心可用地区全球分布,在大陆我们有6个地区,华北区3个,华南区1个,还有华东区两个,此外我们还有11个海外地区,分布在北美、欧洲和东南亚等地;另外我们有超过600个PoP节点,总共20TB/s的带宽处理能力。下面这张幻灯片显示出我们阿里飞天超大规模云计算操作系统的架构图,最底层的就是我们各个地区的数据中心。

在数据中心之上我们还有四个红框标准出来的模块,这些是构建分布式系统的最基础的组件,比如说分布式协同,还有安全管理,日志收集、监控、预警、追踪、诊断等等都在这一层。在这层之上,我们有两大系统,其中一个叫做盘古,负责存储管理,另一个叫伏羲,负责分布式的资源管理。实际上通过这两大管理系统,所有的数据中心里的计算、存储和网络等资源都可以作为统一的资源,进行调度、管理和存储等操作。在右面还有一个叫天基,负责基础设施管理和服务管理,大家可以看到,这是飞天系统里非常底层但也是非常重要的一部分,因为它实际上上面连接应用层,下面管理最底层的数据中心等硬件设备。所以它的重要性就是负责服务部署,扩展及服务器监控等,比如一些服务器有问题的时候,可以迅速找到并马上关掉它,然后下线分离它并把它单独处理。

然后,在这个红色的基础设施管理和资源管理层之上,就是我们的租户管理系统,主要有认证,还有授权、监控和计费等功能。在这之上,则是打包好的各种应用系统服务和调用,包括四大类:计算、存储、数据库和网络;另外还有各种中间件、服务协同及Serverless 计算等;此外我们还提供一些高级的服务功能,包括各种数据智能化服务,比如BI、AI和机器学习等,另外还有一些安全的服务。再上边那些橘黄框里的功能,实际上是提供数据交互服务的,比如说数据迁移,数据库同步,还有内容分发(CDN),还有高速通道,这是构建混合云的核心组件,能够让租户的自有机房和他们在云上的虚拟私网打通 。

最后,大家可以把最上面绿色的那部分看作云的应用层,我们管它叫做“云市场”。我们把这个Apsara称作为一个超大规模的云计算操作系统,之所以叫做操作系统的原因就是,实际上Apsara和一个单机的PC操作系统其实是很相似的。 最底层都是硬件,红的那层对应的是内核,在内核之上,今天所有的PC都是多用户的,有账户管理模块。 所有的这些蓝色的云服务对应于一个PC操作系统的系统调用、系统服务和原生应用。最后大多数的现代的操作系统,都有一个应用(Apps)商店。

閮戦噸澹版槑锛氭湰鏂囩増鏉冨綊鍘熶綔鑰呮墍鏈夛紝杞浇鏂囩珷浠呬负浼犳挱鏇村淇℃伅涔嬬洰鐨勶紝濡備綔鑰呬俊鎭爣璁版湁璇紝璇风涓鏃堕棿鑱旂郴鎴戜滑淇敼鎴栧垹闄わ紝澶氳阿銆