香港维港的“发光蛋”艺术展品,参观者轻触就会产生不同的光色和声效
一、产品为什么需要埋点
或许你不理解这个事实,你的公司其实是一台运作良好的赚钱机器。既然是赚钱机器,埋点必定和提升公司业绩挂钩。那我们要怎么通过埋点来帮助公司赚钱呢?
举个电商产品的例子。用户使用电商产品的主要路径为:首页访问 -> 商品列表页 -> 商品详情页 -> 加入购物车 -> 下单 -> 支付。在每个页面及页面的各个弹窗、按钮都添加进入页面、展示、点击的埋点,我们就可以获取PV(页面浏览量)、UV(独立访客数)及用户的行为数据,从而分析出每个页面、每个步骤之间的转换率。
公司的数据分析团队获得这个转换率后,就开始写需求优化,然后就出现了前端、客户端在抱怨:怎么需求变来变去,又改页面又要改代码。
另外埋点还有一个重要作用:弄清楚用户的留存情况。观察用户第一天访问后,他第七天第十四天后还会不会继续访问,这是访问留存率;观察用户第一天购买后,他第七天第十四天后还会不会继续复购,这是购买留存率。
二、埋点架构如何设计
那埋点架构要怎么设计?首先埋点是涉及各个部门的,包括不限于H5端、客户端、后端、运维,埋点的架构流程也分为多步。
先给出架构图给大家参考下。
首先数据分析团队会根据产品页面设计出埋点文档。
数据采集团队根据该埋点文档输出埋点对接文档,这个对接文档规定了H5端、客户端需要上传的数据格式。既然要上传用户行为,那上传的数据就需要包含用户标识、用户动作、上传端、触发时间。
接着H5端、客户端通过HTTP请求将埋点数据上传到数据上传服务。
如果是你,数据上传服务会不会直接把埋点入库呢?如果是,估计加个埋点得把公司服务搞垮。。。埋点是非常频繁的数据,每1个用户使用1分钟产品,可能触发的埋点行为有上百个。业务高峰下可能后台一分钟就收到上百万个请求。这时就需要拿出专为流式数据、为大数据量而生的消息队列老大哥Kafka。
数据上传服务把埋点行为作为消息上报到Kafka,后面再由数据采集服务监听Kafka消息,把埋点行为入库。
上面我给出的这套埋点架构其实是基于前后端埋点结合的方式来完成数据采集,大家可以有其他的选择。例如采用第三方移动应用统计公司提供的数据分析服务完成数据采集,不过这种采集方式也有几个缺点。第三方服务要照顾到所有接入的公司,所以提供的数据服务都是标准化的,我们能看到的数据很有限。如果非要加额外的数据分析,只能向第三方申请定制化开发,这又是一笔花费。
以下是百度移动统计官网。
三、埋点和APM有什么关系
APM,全称是Application Performance Management
,也就是应用程序性能管理。我们一般用APM做一个核心技术:调用链跟踪。
(1)调用链有什么作用?
大家在工作中都是希望它不起作用,除了日常的性能监控与观察,一旦用到它了说明又有bug要处理了。
例如商城里有一笔订单失败了,我们不知道是在下单服务节点失败的,还是在支付服务节点失败的,如果一个个节点去查日志所花费的时间是较长的。而技术Leader、产品Leader在后面催着你半小时内必须解决。
这种情况下,拥有一个分布式系统的全链路调用追踪平台就很有大作用了,我们可以很直接地跟踪错误订单的整个链路,确定失败的位置。
(2)那埋点和APM有什么关系?
上文介绍的是用户行为埋点,更多的是在用户端层面上,而APM侧重的是服务后台层面上的埋点。
例如用户点击支付订单按钮,后台触发的调用可能有:用户校验 -> 库存校验 -> 下单 -> 支付 -> 支付回调。一个用户行为可能触发后台这五个埋点,而这五个埋点构成的调用链就是APM的核心功能。
本文收录在我开源的《Java学习面试指南》中,一份覆盖Java程序员所需掌握的Java核心知识、面试重点。希望收到大家的 ⭐ Star ⭐支持。GitHub地址:https://github.com/hdgaadd/JavaGetOffer,相信你看了一定不会后悔。
创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️