1.什么是京东小程序?
京东小程序平台能够提供开放、安全的产品,成为品牌开发者对接京东内部核心产品的桥梁,并致力于服务好每一位信任我们的外部开发者,为不同开发能力的品牌商家提供合适的服务和产品,让技术开放成为品牌的新机会。“一次运行”,一个小程序可以在多个APP上运行,抹平了引擎层的差异,一套代码,同一个页面,云端发送,多端运行。
可能大家对于我们京东小程序还不是很了解,那么京东小程序是什么?它和微信小程序有什么区别呢?首先要明确的是,京东小程序并不是运行在微信上的京东商城购物小程序,而是运行在京东APP上、基于京东小程序引擎的一套京东小程序。
它是一种京东风格的小程序,可与支付宝小程序或微信小程序相媲美。
举个例子,大家可以去尝试一下,比如在主站搜索宝格丽,通过搜索会直接跳转到宝格丽小程序,我们可以在这里购买奢侈品,也可以在首页同一个城市标签页浏览很多家居店小程序,总之,京东小程序覆盖的业务还是极其广泛的!
当然,京东小程序不仅可以运行在京东APP上,还可以运行在各种宿主APP上,只要宿主在运行时依赖我们的小程序SDK引擎即可。比如在京东小家APP上,你可以通过小程序控制智能IOT设备,在京ME APP上,你可以远程操作打印机,实现一键打印。小程序作为一种轻量级、即用型的工具,拥有广泛的用户群体,已经覆盖了我们生活的方方面面。
京东小程序是连接商家与京东内部核心产品的重要桥梁,也是帮助商家实现流量增长和业务发展的重要途径。
那么,小程序平台如何保障商家业务稳定健康发展,服务好这些外部商家呢?这里非常重要的就是我们平台对小程序基础流量的运营和监控。如何防止商家小程序在线上裸奔?如何帮助商家对自身小程序流量的激增与下降有一个直观的掌握和监控?如何引导商家基于海量数据进行精细化运营?其实京东小程序数据中心就扮演着这样一个小程序数据问题终结者的角色,充分利用各种数据手段来解决这些痛点。
2. 京东小程序数据中心建设里程碑
京东小程序数据中心的建设主要经历了四个阶段,从最初从0到1的基础数据能力的建立,到各项数据指标的丰富扩充,再到下钻分析用户帮助商家实现基于用户的精细化运营,再到现在的小程序数字化建设。在小程序整个迭代建设过程中,从各个维度为小程序的业务开展提供了保驾护航。
3. 京东小程序数据中心业务全景
目前京东小程序数据中心的功能已经非常丰富,我们正在根据业务发展的需要,不断完善整个京东小程序数据中心的功能架构。
从呈现方式来看,包括开发者控制台、管理后台、手机应用助手、实时数据大屏、开放能力等;
其次,从功能区域来看,主要包括运营数据分析和监测数据分析。
运营数据分析,包括基于小程序的PV、UV等用户行为分析;
通过源分析可以分析小程序在各个广告渠道的营销转化效果;
用户画像分析可以分析出浏览过小程序的人哪些是高净值用户,以及性别、年龄等基础用户画像数据。
监控数据分析主要针对上线运行的小程序的崩溃异常、网络请求异常、启动性能数据分析、用户流失率实时监控等,能够在小程序发生异常时第一时间通知开发者。
4. 京东小程序数据中心技术架构图
对于整体的架构设计,我认为数据分析主要解决三个问题,第一个是如何上报数据,第二个是如何存储数据,第三个是如何分析数据。
1、京东小程序数据中心的数据上报主要包括三个渠道,包括客户端埋点、服务端埋点或者其他外部数据源。客户端埋点主要使用,服务端埋点主要在我们的服务之间进行数据采集,并在服务之间进行数据消费和同步。
2、数据要存放在哪里?这个需要根据我们业务对这些数据的实时性要求来决定。是实时的还是离线的,然后使用不同的数据源来存储。数据指标需要是秒级的,还是分钟级的,还是T+1类型的?实时性要求不同,自然就会导致存储数据源的不同。
3.如何分析数据其实就是我们的业务逻辑,设计的时候也要充分考虑数据模型的可重用性和可扩展性。
对于来自子午线客户端的埋点数据,小程序数据中心以离线方式构建自己的业务数据仓库,对数据进行逐层降噪、清洗和计算,并将聚合后的维度数据推送到关系型数据库,方便业务快速接入。对于自建渠道的实时数据和外部系统的埋点数据,通过统一的上报服务将数据上报到消息队列,并对流量数据进行异步处理和峰值平滑处理。使用专门的消费服务将上报的数据消费并存储在ES和数据库中,方便平台进行多维度的明细或汇总数据查询;同时还会对消息队列中的数据进行流式实时计算,实现流量异常波动的报警和分析。
5.借鉴他人经验,借助群数据工具构建小程序业务数据仓库
痛点:
1、京东小程序数据来源多样,数据量巨大,如何利用业务数据,实现数据价值最大化,帮助商家实现精细化运营?
2、如何复用主站现有的数据模型和能力,让更多的小程序商家参与到京东主站的流量领域,让数据驱动商家精准营销?
3、业务指标复杂多样,如何沉淀提炼出通用的数据模型,减少重复工作?
怎么解决:
基于集团BDP平台,京东自上而下构建小程序业务数据仓库,借助BDP平台丰富的数据产品工具,多维度构建小程序数据能力,离线计算+实时计算相结合,小程序业务数据+集团模型数据相结合。
1、数据分类:将小程序流量进行主题划分,拆分成点击、浏览、曝光、订单等大维度的主题模型,方便数据定位,增加业务理解;
2.数据分层:同一个流量主题下,按照ODS->DWD->DWS->ADS的层级结构对数据进一步分层,方便数据血缘追踪,减少重复数据模型的开发;
3、数据多样化:下游系统可以从小程序数据仓库拉取符合业务需求的领域数据,如数据旋转、搜索推广等系统,利用下游系统成熟稳定的数据能力,全面赋能商家营销;
在京东小程序业务数据仓库构建过程中,主要应用了集团BDP大数据平台提供的丰富的产品工具和通用能力。
几个典型的用例是:
1、将离线hive表数据同步到jed等关系型业务库中,使用任务中的算子;
2、业务产生的实时MQ数据同步到hive数据仓库,利用DTS以及实时数据传输任务,可以将业务数据同步到数据仓库;
3、需要在数仓中构建业务维度表,比如针对小程序的基础信息构建维度表。业务数据需要同步到hive表中,可以使用数据直通车。在表记录生成方面,可以根据业务需求采用全量表、增量表、快照表、拉链表或者流表等不同的记录生成方式。
京东小程序客户端统一上报的经脉,需要从原有的GDM层底表中提取小程序自身的业务数据。原始底表数据非常庞大,不可能每次都直接查询原始底表,消耗计算资源,效率低下。因此我们尝试提高底层数据模型的复用性,对数据进行分类分层。
所谓分类,就是将小程序流量划分主题,拆分成点击、浏览、曝光、订单等大维度的主题模型,方便数据定位,增加业务理解;
所谓分层,是指在同一个交通主题下,按照ODS->DWD->DWS->ADS的层级结构,对数据进行进一步的分层,这样有利于数据血缘的追踪,减少重复数据模型的开发。
所谓多样化,是指复用程度,处理后的数据可以被下游团队访问和使用,比如尚智、黄金眼、数方等。以小程序广告为例,我们在小程序数据仓库中构建了各类用户群体,并在数方注册了用户群体标签,比如关注用户、粉丝用户、提单用户等,下游的广告精准传播体系会根据这些标签圈出人群,进而实现小程序广告的投放。
总之,根据业务的特点,我们可以充分利用集团的BDP数据工具来帮助我们构建数据仓库。
6、基于实时计算的小程序异常崩溃监控工具
痛点:京东小程序上线运行时,需要实时监控小程序业务代码崩溃异常、性能数据波动、网络请求时长消耗等情况,一旦出现异常崩溃,需要保证能够第一时间通知商户开发者,帮助商户及时止损。
怎么解决:
1、报警规则可配置,小程序自定义的报警规则存储于分布式配置中心,实时监控规则节点变化,当节点数据发生变化时实时汇总到业务流中。
2、自定义滑窗。每个小程序的报警窗口大小不一样,扩展实现根据用户动态规则确定报警窗口的开始和结束时间;
3、广播变量机制,将报警配置信息广播到各个Task内存中,广播变量是公共共享变量,数据集广播后,节点上不同Task都可以获取到,每个节点只存储一份,否则每个Task都会复制一份数据集,造成内存资源的浪费。
对于小程序的实时监控能力,我们采用实时计算框架,在小程序上线运行时,需要实时监控小程序业务代码崩溃异常,此类异常很可能导致小程序白屏或者崩溃,当检测到异常崩溃时,需要保证第一时间通知商户开发者,帮助商户及时止损。
这里的难点在于报警规则是可以由用户自定义的,比如可以配置观察异常数据的时间窗口,达到异常阈值就触发报警,判定为异常。这里需要把报警规则配置的主动权交给用户。在这种背景下,
1、我们将报警规则放到分布式的统一配置中心,实时监控节点规则的变化,将业务流和规则流合并为两个流程;
2、然后根据报警规则,生成定制的动态计算窗口,实现窗口动态化;
3.最后通过广播变量机制,当报警规则发生变化时,可以高效的将报警配置广播刷新到各个Task的内存中,提高资源利用率,保证计算时效性。
7.探索OLAP领域的黑马,立足构建自定义数据分析引擎
痛点:如何畅通分析小程序内部的数据波动?京东内部业务直接基于轨迹报告,业务团队内部分析;外部开发者需要依赖、GA等外部分析系统,无法将数据回传给京东,复用京东现有的流量工具进行精细化运营。
怎么解决:
选择合适的表存储引擎:使用多副本保证较高的查询性能和数据存储可用性;
数据按分区存储:BY:分区键,BY到(),不同分区中的数据会分开存储,合理的分区建立可以加快查询速度;
统一上报协议:生成全局唯一的事件ID,与业务数据绑定;
动态数据解析:基于函数解析JSON动态业务数据;
查询脚本下推:SQL引擎生成查询SQL并下推,完成查询;
如何畅通分析小程序内部的数据波动?京东内部业务可以直接基于上报,业务团队可以内部进行分析。但并不对外开放,外部开发者如果想分析小程序本身内部数据,需要依赖、GA等外部数据分析系统。这样一来,小程序的数据无法回流到京东,京东现有的流量工具也无法复用到小程序的精细化运营中。
在此背景下,我们实现了小程序自定义分析引擎,底层采用适合即席查询的OLAP引擎来存储小程序上报的数据。
为什么要用它?因为它是列式存储,查询性能非常高,几十亿的数据都能秒级响应,适合做在线OLAP。
同时ck支持水平扩展,适合海量数据的存储,支持按天对数据进行分区存储,在创建表的时候按照创建时间进行划分,查询数据的时候可以只查询某些分区的数据,这样也可以加快查询效率。
包括本地表和分布式表,本地表运行在具体的数据节点上,分布式表负责数据的转发和路由。写入数据时只写入本地表,速度为50-200M/S,对于大规模数据更新非常实用。
在小程序自定义分析引擎中,数据上报协议是标准化的,首先用户配置需要上报的事件ID和业务指标,按照协议调用前端上报业务数据。在自助查询区,当用户触发查询时,规则引擎首先根据自定义事件ID生成查询规则SQL脚本,将规则下推到服务端执行引擎,执行引擎从CK中获取业务数据,完成对业务数据的自定义查询。
8. 利用特征让用户行为分析变得更容易
痛点:需要实时分析小程序的PV、UV、新增用户数、累计用户数、关注用户数等用户行为指标,帮助小程序商家了解自身小程序的用户波动情况。
怎么解决:
实时性,从小程序用户行为数据上报到接入,支持秒级响应;
全文检索,基于倒排索引,支持根据小程序不同业务维度进行灵活的搜索分析、聚合分析,满足不同的业务需求;
运维简单,小程序日均活跃用户数百万级,可按日、月等维度建立索引,方便进行热点冷门数据分析。
创建 ES 模板:
每天定期创建ES索引:
利用索引主键碰撞实现新增&累计用户统计:
语法:
语法:PUT /_doc/1
语法:PUT //1
语义:
自动生成id,多次创建则会生成多个id。
如果同一个id被索引多次,则会删除重建,并且版本号++,删除之前的版本,保留最新的版本。
自动生成id,多次创建则会生成多个id。
如果重复创建指定文档id的内容,第二次创建会报错(主键冲突),而不是版本号++;
小程序如何进行实时的用户行为分析?行为分析需要实时计算小程序的PV、UV、新增用户数、累计用户数、关注用户数等用户行为指标,帮助小程序商户了解自家小程序的用户波动情况。我们将这些数据放到ES中进行查询,主要是考虑到ES支持灵活的搜索分析,并且支持按照不同维度进行聚合分析,保证了数据查询的灵活性和实时性要求。
在创建索引时,我们不会将所有数据都堆放到一个索引中,而是按天创建,根据索引模板,定期创建ES索引,保证索引查询的效率。
在构建小程序新增用户指标时,采用了ES索引碰撞原则,操作类型设置为,语义为重复创建指定文档id的内容,第二次创建会报错(主键碰撞),这样就保证了新增用户的记录在ES索引中只出现一次。
九、不足与展望
小程序行业数据解决方案沉淀
积累车企、保险、3C家电等行业数据,形成统一的京东小程序行业数据解决方案
技术积累与再利用
未来京东小程序的数据分析技术方案可以扩展到其他技术栈,比如RN等平台系统。
智能建筑
思考如何基于机器学习、人工智能等技术手段加强京东小程序数据的智能化建设,如何结合机器学习、深度学习、人工智能AI等技术手段,继续实现京东小程序数据中台的智能化建设。
小程序的智能报警是基于时间序列预测算法等算法,做一些报警预测,提高报警的智能化和精准度;
在小程序预下载场景中,可以利用协同过滤算法确定小程序偏好群体,并针对每个个体实现预下载,从而减少网络带宽,节省资源成本。
如何利用这套AI智能模型来分析理解海量数据,自动提取、分类数据,让小程序数据运维更加高效、精准?