zoukankan      html  css  js  c++  java
  • 四:大数据架构回顾-IOTA架构

       IOTA大数据架构一种基于AI生态下的全新的数据架构模式,2018年,易观首次提出这一概念。IOTA的整体思路是设定标准数据模型,通过边缘计算技术把所有的计算过程分散在数据产生、计算和查询过程当中,以统一的数据模型贯穿始终,从而提高整体的计算效率,同时满足计算的需要,可以使用各种Ad-hoc Query来查询底层数据。

      IOT大潮下,智能手机、PC、智能硬件设备的计算能力越来越强,业务要求数据有实时的响应能力,Lambda架构已经不能适应当今大数据分析时代的需求。IOTA架构如下图:

    IOTA架构 --- 数据流转过程示例

    Common Data Model


    • 贯穿整体业务始终的数据模型,这个模型是整个业务的核心,要保持SDK、cache、历史数据、查询引擎保持一致。
    • 对于用户数据分析来讲可以定义为“主-谓-宾”或者“对象-事件”这样的抽象模型来满足各种各样的查询。

    用户行为“主-谓-宾”模型示例:

    • 智能手表:X用户 – 进行了 – 游泳运动
    • 视频APP:X用户 – 播放 – 影片
    • 电商网站:X用户 – 购买 – 手机( 2018/12/11 18:00:00 , IP , GPS)

    用户行为“对象-事件”模型

    • 事件(Event):主要是描述用户做了什么事情,记录用户触发的行为,例如注册、登录、支付事件等等
    • 事件属性: 更精准的描述用户行为,例如事件发生的位置、方式和内容
    • 每一条event数据对应用户的一次行为信息, 例如浏览、登录、搜索事件等等

       --- 当然,根据业务需求的不同,也可以使用“产品-事件”、“地点-时间”模型等等。模型本身也可以根据协议(例如 protobuf)来实现SDK端定义,中央存储的方式。此处核心是,从SDK到存储到处理是统一的一个Common Data Model。

    Edge SDK


    •  这是数据的采集端,不仅仅是过去的简单的SDK,在复杂的计算情况下,会赋予SDK更复杂的计算,在设备端就转化为形成统一的数据模型来进行传送。

      示例:

    • 智能Wi-Fi采集的数据:从AC端就变为 “ X用户的MAC 地址 - 出现 -  A楼层(2018/4/11 18:00)” 这种主-谓-宾结构
    • 摄像头: 会通过Edge AI Server,转化成为 “ X的Face特征 -  进入 -  A火车站(2018/4/11 20:00)”
    • APP/页面:“ X用户 – 事件1 – A页面(2018/4/11 20:00) ” ,对于APP和H5页面来讲,没有计算工作量,只要求埋点格式即可。
    •  

    一个稳定的数据采集端需要有如下功能,存储、回数、控制、保护:

    • 存储:数据存储,校验当前存储数据合法性,及防止数据被第三方篡改
    • 回数:数据上报,加密上报数据,防止被第三方截取,保证不受 HOOK 等影响,防止 DNS 污染等。
    • 控制:控制发送策略,可以指定 3G / 4G / wifi 环境上传,可以调整上报时间频次、本地数据缓存规则全部可动态调整
    • 保护:有自保护机制。不要影响用户的正常使用,减少因逆向导致的数据异常

    显而易见,普通的采集端都具有这些功能。作为 IOTA 架构下的采集端进行了哪些优化呢?如下:

    • 统一模型:在 IOTA 架构下从数据采集到数据接收以及数据处理都是用一套数据模型。
    • 聚合:同样的数据进行边缘聚合计算,如某些用户访问路径可以直接由采集端来完成,生成对应类似漏斗的事件。一般这个计算是服务器下发策略来动态控制的,当然也可以随时做出调整,值得注意的是这是不可以逆的运算,并且这种模式只适用于适合间隔发送模式的数据
    • 校验:数据的完整和有效性可以放到采集端处理,确保 SDK 给 server 的数据不是被修改的,产生的数据是合理的,这就要求采集端加入防作弊的功能。这是一个成熟产品长期需要投入的项目,大部分公司的风控做的也有一部分这样的工作。
    • 实时:数据实时上报给服务器,这样才能让用户感觉到零延迟,实时计算。如12306购票,要立即的进行查看结果,不能等得到次日才看到结果。同样的带来另一个问题,
    • 高可控:高可控是对数据采集最基础,也是最重要的一个要求。不然面对攻击,服务器无法实时监控,动态调整,立即处理,可能会导致服务器的短时间无法正常工作(如数据处理延迟,严重的乃至宕机)

    Real Time Data


    •  实时数据缓存区,这部分是为了达到实时计算的目的,海量数据接收不可能海量实时入历史数据库,那样会出现建立索引延迟、历史数据碎片文件等问题。因此,有一个实时数据缓存区来存储最近几分钟或者几秒钟的数据。这块可以使用Kudu或者Hbase等组件来实现。这部分数据会通过Dumper来合并到历史数据当中。此处的数据模型和SDK端数据模型是保持一致的,都是Common Data Model,例如“主-谓-宾”模型。  

    Historical Data


    • 历史数据沉浸区,这部分是保存了大量的历史数据,为了实现Ad-hoc查询,将自动建立相关索引提高整体历史数据查询效率,从而实现秒级复杂查询百亿条数据的反馈。例如可以使用HDFS存储历史数据,此处的数据模型依然SDK端数据模型是保持一致的Common Data Model。
    • 当buffer区的数据量达到一定规模时,调度会启动DumpMR(Spark、MR任务)会将缓冲区数据flush到HDFS中去,因为还要支持数据的实时查询,我们采用R/W表切换方案,即一直写入一张表直到阈值,就写入新表,老表开始转为ORC格式。

    HDFS高效存储:

    • 按天分区
    • 基于用户ID,事件时间排序
    • 冷热分层
    • Orc存储
    • BloomFilter 
    • 稀疏索引
    • Snappy压缩

    小文件问题:

    • 不按事件分区
    • MergerMR定时合并小文件

    Dumper


    •  Dumper的主要工作就是把最近几秒或者几分钟的实时数据,根据汇聚规则、建立索引,存储到历史存储结构当中,可以使用map reduce、C、Scala来撰写,把相关的数据从Realtime Data区写入Historical Data区。

    Query Engine


    •  查询引擎,提供统一的对外查询接口和协议(例如SQL JDBC),把Realtime Data和Historical Data合并到一起查询,从而实现对于数据实时的Ad-hoc查询。例如常见的计算引擎可以使用presto、impala、clickhouse等。
    •  

    Realtime model feedback


    •  通过Edge computing技术,在边缘端有更多的交互可以做,可以通过在Realtime Data去设定规则来对Edge SDK端进行控制,例如,数据上传的频次降低、语音控制的迅速反馈,某些条件和规则的触发等等。简单的事件处理,将通过本地的IOT端完成,例如,嫌疑犯的识别现在已经有很多摄像头本身带有此功能。

    IOTA架构主要特点


    • 去ETL化:ETL和相关开发一直是大数据处理的痛点,IOTA架构通过Common Data Model的设计,专注在某一个具体领域的数据计算,从而可以从SDK端开始计算,中央端只做采集、建立索引和查询,提高整体数据分析的效率。
    • Ad-hoc即时查询:鉴于整体的计算流程机制,在手机端、智能IOT事件发生之时,就可以直接传送到云端进入real time data区,可以被前端的Query Engine来查询。此时用户可以使用各种各样的查询,直接查到前几秒发生的事件,而不用在等待ETL或者Streaming的数据研发和处理。
    • 边缘计算(Edge-Computing):将过去统一到中央进行整体计算,分散到数据产生、存储和查询端,数据产生既符合Common Data Model。同时,也给与Realtime model feedback,让客户端传送数据的同时马上进行反馈,而不需要所有事件都要到中央端处理之后再进行下发。

    架构示例 


    IOTA vs Lambda


    IOTA vs Kappa


     

    参考资料


  • 相关阅读:
    细说java中的类
    使用LayUI操作数据表格
    使用LayUI展示数据
    一步一步做搜索(一)
    试图加载格式不正确的程序
    自己实现spring核心功能 三
    SpringMvc请求处理流程与源码探秘
    设计模式之代理模式
    爬虫功能介绍
    爬虫监控帮助文档汇总
  • 原文地址:https://www.cnblogs.com/tgzhu/p/13938275.html
Copyright © 2011-2022 走看看