全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
流计算

天猫双十一大屏

更新时间:2017-06-07 13:26:11

双十一大屏是每年天猫双十一购物狂欢节的亮点应用,整个阿里集团对外实时交易总额的披露均是通过这块大屏完成。曾经天猫双十一大屏后台流式计算使用开源的Storm来进行开发,须考虑各种异常情况、故障情况,使得整个大屏开发时间长达一个月左右。而后阿里数据事业部选择使用阿里云流计算StreamSQL,将整个双十一大屏的开发周期缩短到三天,并且由于阿里云流计算底层完全屏蔽了故障处理、执行优化,最终上线的双十一大屏全链路实际上比Storm作业更快、更高效。

问题描述

双十一的大屏流式数据来源是天猫的交易订单表。为简化问题,我们将源源不断的天猫交易数据抽象简化为如下二维表(tmall_trade_detail):

字段名 类型 注释
tid bigint 交易订单ID
buyer_uid bigint 买家ID
seller_uid bigint 卖家ID
gmtdate timestamp 交易时间
payment double 订单金额

针对上述流式数据表,我们需要计算两个指标,包括截止到当前时间点的交易总笔数以及交易总金额。这两个数据指标经过流计算写入在线的RDS系统,并通过大屏页面展示出来。RDS的表设计如下(tmall_trade_state):

字段名 类型 注释
gmtdate varchar(16) 交易日期
trade_count bigint 交易总数
trade_sum double 交易总量

下面我们就是用阿里云流计算,在10分钟之内搭一套全链路双十一大屏。

前置准备

在流计算作业编写开始前,我们需要创建上下游相关存储系统,这里主要是DataHub和RDS两类存储系统,下面分别叙述:

  1. 创建DataHub Topic

    进入DataHub WebConsole界面,选择进入具体的Project,点击”创建Topic”,进入Topic创建页面,如下图:

    进入DataHub

    创建的schema示意图如下:

    创建DataHub

  2. 创建RDS表

    由于流计算目前仅在上海地域部署,请尽量选择华东2地域的RDS。

    进入RDS WebConsole界面,点击进入”登录数据库”,进入数据库的管理页面,如下图:

    RDS界面

    根据上述RDS表结构设计表,如下图:

    DataHub表设计

    准备就绪,开始进入实际的SQL编写了。

  3. 上传DataHub数据

    所谓”巧妇难为无米之炊”,在实际的流计算业务开发中,开发者第一个面临的问题就在于如何将数据上传进入DataHub系统。利用DataHub的数据上传功能用户可以轻松上传数据。进入[DataHub界面],选择上述创建完成的DataHub Topic进行数据上传,用户点击侧边导航栏的”数据采集” -> “文件上传”功能。这里为了简化用户的操作,我们提供测试数据,点击下载后利用DataHub的文件上传工具即可完成数据采集。

    注: PDF版本文档中《双十一大屏案例数据》无法通过链接下载,流计算作为附件文件打包提供了测试数据,请咨询您的系统管理员索要测试数据。

    上传数据

    实际生产应用中,我们很少有机会利用文件上传工具进行数据采集工作。更多数据采集工具的使用请参考使用手册中有关数据采集的章节。

注册存储

使用阿里云流计算内置的数据存储功能可以方便的添加DataHub的Topic信息。在”开发”中点击”数据存储”,选择DataHub的Project注册到流计算,这样可以方便后续做Topic/表创建、或者引用数据存储,具体参考如下章节:DataHub的注册。如下图:

注册存储

datahub注册

其中,DataHub的连接信息为:

注意: 上述DataHub连接信息仅限于公共云的环境,专有云情况下请咨询相关的系统管理员。

同样,我们选择使用RDS(Mysql)为数据做可视化展现的存储,并在流计算注册RDS的连接信息。具体参考如RDS的注册。如下图:

RDS注册

开发

一旦完成数据采集工作,我们就可以专心来研究StreamSQL的编写工作。同样,为方便新手用户上手流计算,我们在【数据开发】新手作业中提供了双十一大屏的教学作业: tmall_d11。点击这个作业,可以查看StreamSQL情况。

  • 引用数据存储。编写SQL第一步,我们应该为流计算声明数据的输入表(这里是DataHub)以及数据的输出表(RDS)。在【开发】页面选择【数据存储】,分别找到对应的DataHub的Topic和RDS的表信息,选择引用:

    DataHub的Topic作为我们数据输入源,点击选择”作为输入表引用”,流计算将自动解析Topic的Schema,并自动添加对应的SQL到IDE:

    DataHub引用

    RDS的表作为我们的数据结果输出,点击选择“作为结果表引用”,流计算将自动解析RDS的表Schema,并自动添加对应的SQL到IDE。

    RDS引用

  • 编写StreamSQL。如果我们严格按照上述教程说明的Topic/表名称进行创建工作,那么tmall_d11作业中包含的StreamSQL已经能够直接运行,否则请根据你实际建表情况调整中tmall_d11作业中有关DataHub Topic、RDS Table名称。代码如下:

  1. --注意,以下表、字段信息请根据实际情况进行修改
  2. replace into tmall_trade_state
  3. select
  4. from_unixtime(FLOOR(tmall_trade_detail.gmtdate/1000), 'yyyy-MM-dd') as gmt_date,
  5. count(tid) as trade_count,
  6. sum(payment) as trade_sum
  7. from
  8. tmall_trade_detail
  9. group by
  10. from_unixtime(FLOOR(tmall_trade_detail.gmtdate/1000), 'yyyy-MM-dd');
  • 调试StreamSQL。我们提供[双十一大屏测试数据],下载后使用调试功能上传该测试数据进行数据调试。如下图:

    调试作业

  • 作业上线。调试完成后,经验证逻辑无误后,在数据开发中点击”上线作业”,用户即可完成作业上线工作。上线作业操作将当前用户的改动提交到数据运维中,用户即可在生产环境下进行作业启动等生产运维工作。如下图:

上线作业

运维

在数据运维页面,选中上述”tmall_d11”这样的作业,点击启动后流式作业即可启动。注意,流计算作业启动时候需要你指定启动时间,实际上就是从源头数据存储的指定时间点开始读取数据。这里我们需要指定的时间需要在上述上传之间,例如设置启动时间为一个小时之前,如下图:

启动作业

当前时间点是13点50分,前面数据上传时间是在10分钟前,因此我们这里设置启动时间为13点正,如下图:

设置时间

流计算作业即可被生产集群调度起来。一旦作业启动成功,作业的界面将变为绿色,同时会有流动线条提示计算正在运行:

数据运维

运行起来后,我们到RDS数据库去查看最终数据输出,我们的构造数据是5笔交易,总交易额为500RMB,和最终流式计算结果一致。这样从端到端验证了我们业务代码的正确性。RDS数据查看如下图:

数据查看

数据展示

为了更好展示大屏业务,我们选择使用DataV进行可视化大屏的编辑。DataV专精于业务数据与地理信息融合的大数据可视化,通过图形界面轻松搭建专业的可视化应用,满足客户日常业务监控、调度、会展演示等多场景使用需求。我们这里选择最简单的双十一大屏作为大屏模板进行编辑。

  • 注册数据存储

    在上节采集数据中我们已经配置过了RDS的数据存储,但由于流计算和DataV分属于两个不同的产品,因此这里用户还需要在DataV中注册我们流计算结果的RDS连接信息,如下:

    • 在DataV主控制台页面下方点击添加数据存储按钮:

      DataV添加

    • 打开数据存储配置界面,配置数据存储:

      DataV配置数据存储)

      特别注意的是,这里的RDS Host一栏需要配置该数据库的连接信息,例如这里的是rm-xxxxxxxxxxx.mysql.rds.aliyuncs.com格式的域名。

  • 编辑大屏

    • 在DataV主控制台页面下方点击添加大屏按钮,选择双十一大屏模板,顺便给大屏起一个好听的名字吧:

      DataV添加大屏

      DataV选择大屏

    • 在进入的大屏中,点击大标题下面的翻牌器数据,这个就是我们成交总额数字的显示地方。在编辑栏中选择“数据”的编辑Tab,选择数据类型为数据库,并选择上述我们注册的数据库名称:

      DataV选择数据存储

    • DataV本身提供可视化大屏效果,但无法自动识别业务数据展示逻辑。这里我们需要告之DataV,我们的翻牌器数据应该来自于哪里,同时使用SQL语句告之DataV应该展示什么内容:

      DataV翻牌

      上述SQL为:

      1. select
      2. trade_sum as value
      3. from
      4. tmall_trade_state

      注意,DataV需要用户在SQL里面告之展示的字段,方法是利用SQL语句中的别名命名为value即可。如果一切配置顺利,上述的状态检查应该为绿色。这里为橙色,代表数据存储配置仍然有误,可以点击”查看数据响应结果”查看SQL执行结果是否正确。

    • 查看大屏。当前DataV提供两类大屏预览方式,在当前页面右上角,支持预览观看大屏和共享观看大屏,根据业务是否共享选择点击不同大屏展示方式。

      DataV大屏展示

本文导读目录