(一)从零到一:设计通用型埋点方案的实践与思考

2024-08-25 15:28

本文主要是介绍(一)从零到一:设计通用型埋点方案的实践与思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

埋点,顾名思义即是在业务代码逻辑中上报某一标识和该标识相关的数据,与业务流程解耦,用于监控或者数据分析。在现代软件开发中,埋点已成为优化用户体验、支持业务决策的关键工具。

本文将从「业务需求初期设计埋点」到「后期重构」的角度,阐述如何设计通用型的埋点方案,希望能为读者提供实用的参考和避坑指南。

1. 起步阶段:初始埋点设计

1.1 业务流程

在业务发展初期,我们的流程相对简单,主要包含两个阶段:stage1和stage2。我们需要记录这两个阶段的耗时、结果,以及整个流程的总耗时。

在这里插入图片描述

1.2 数据结构设计

为了存储埋点数据,我们在数据库中设计了如下的数据表结构:

字段类型说明
idbigInt数据库主键
business_idbigInt业务ID
stage1_timeint阶段1处理时长(单位:毫秒)
stage1_successint阶段1是否成功,枚举值:1:成功、0:失败
stage2_timeint阶段2处理时长(单位:毫秒)
stage2_successint阶段2是否成功,枚举值:1:成功、0:失败
answer_successint请求是否成功(超时或者异常视为失败,返回即算成功),枚举值:1:成功、0:失败

这种设计简单直接,适合初期业务规模较小时使用。

2. 业务发展带来的挑战

2.1 架构变化

随着业务发展,我们采用了链路编排的方式执行请求。整个流程由多个node节点组成,每个node节点包含多个handler执行器,按照不同的策略类型处理具体的业务逻辑。

在这里插入图片描述

2.2 埋点方式的调整

考虑到埋点不在核心业务链路上,我们采用了事件驱动的异步上报方式记录埋点信息,但仍然使用MySQL数据库存储。

2.3 数据结构的膨胀

随着链路编排节点的增多,埋点数据也随之增加。新的数据结构变得更加复杂,包含了更多的监控参数:

字段中文解释归类
businessId业务ID业务基础参数
question问题
answer最终答案
qa_intervals调用总时长
answer_success调用是否成功
dialog_time对话时间
traceId追踪ID监控基础参数
userIP用户IP
serverIP服务器IP
fail_reason失败原因
stage1_start_time阶段一开始时间阶段一监控参数
stage1_end_time阶段一结束时间
stage1_answer阶段一答案
stage1_time阶段一时长
stage1_success阶段一是否成功
stage2_start_time阶段二开始时间阶段二监控参数
stage2_end_time阶段二结束时间
stage2_response_time阶段二响应时间
stage2_answer阶段二答案
stage2_time阶段二总时长
stage2_success阶段二是否成功

2.4 现有方案的局限性

此时,大家可以明显发现,随着业务发展,编排节点增多,埋点数量呈现线性增长,如果继续采用这种数据结构存储,每在编排中接入一个节点到埋点中,数据表就新增若干个字段,这是最直接的致命缺点,数据表将野蛮无限增加字段。

现有方案有以下缺点:

  1. 数据表字段呈线性增长,每增加一个编排节点就需要新增多个字段,不可持续。
  2. 监控代码侵入业务逻辑,难以适应流程编排的灵活性。
  3. 数据库字段设计不通用,链路节点记录不详细,难以快速定位问题。
  4. 链路监控无法降级,难以应对高流量场景(如618/双十一大促)。
  5. 事件驱动异步方式可能存在性能瓶颈,未经过压测验证。

代码参考:
请添加图片描述
请添加图片描述
请添加图片描述

3. 重构:设计新的埋点方案

3.1 埋点的定位与要求

在设计新方案前,我们明确了全链路埋点的定位:

(1)链路闭环:监控埋点虽与外部存在调用关系,但调用逻辑和链路编排由自身控制,可自己形成闭环,无需第三方回执确认

(2)用户群体:链路埋点面向产研和运营观看数据,不对外面向商家和用户使用。

(3)大促降级:埋点监控不影响主流程执行,不侵入业务逻辑代码,尽最大努力保证埋点记录。但必要情况下,可通过细粒度开关和全局开关进行埋点降级,影响是数据看板和数据分析会缺失降级后的数据。

(4)快速定位问题:埋点监控需要记录详细的调用留痕,链路编排存在多个node节点,每个node节点会存在一个或多个handler,埋点监控需要记录到handler级别,且每一步发生的错误和异常需要记录,且留存现场,方便排查。

(5)数据分析:可供运营、产品进行多指标数据分析,如耗时、成功率、PV、UV等。

3.2 新方案设计

基于以上定位和之前方案的缺点,我们设计了新的埋点方案:

在这里插入图片描述

  1. 流程编排自动/手动上报
  • 利用node编排时自动在handler执行前后进行埋点上报。
  • 保留手动上报入口,以应对特殊情况。
  1. 异步上报
  • 通过消息队列(MQ)统一发送和消费,利用MQ的积压和并行消费能力实现异步解耦。
  1. 数据存储
  • 使用Elasticsearch按季度创建索引模板。
  • 只保留近6个月数据,每日离线推送至大数据平台备份。(假设每条请求对应20条链路日志,每日用户提问1W条,每日链路日志总数则为20W条,每季度约1800W)

3.3 新的数据结构

新方案采用通用字段设计,实现横向扩展而非列向扩展:

中文说明字段说明
接入方式accessType
接入系统accessSystem
追踪IDtraceId
业务IDbusinessId
埋点标识(如类名)eventTrackSign唯一标识当前埋点
埋点状态eventTrackStatus开始、结束或为空
节点类型handlerType枚举:串行、并行
节点超时设置handlerTimeOut
埋点结果eventTrackResult枚举:成功、失败
失败原因failReasonCode枚举:code码
现场信息context_info
埋点类型eventTrackType枚举:手动、自动
时间time毫秒级时间戳

新方案与旧方案相比有很多优点,对比如下:

方面旧方案新方案
扩展性列向扩展,字段增长快横向扩展,通用字段设计
灵活性固定字段,难以适应业务变化通用字段,易于适应不同业务场景
性能可能存在性能瓶颈使用MQ和Elasticsearch,性能更好
数据分析直接查询即可需要额外的数据处理步骤,但更灵活
降级能力支持细粒度和全局降级
问题定位难以快速定位问题详细记录每个handler,易于问题定位
代码侵入性高,散布在业务逻辑中低,主要通过自动上报实现
存储成本随业务增长线性增加通过定期清理和离线备份控制成本

到这里,重构后的方案就介绍完了,这里有一点值得注意,新的数据结构由于是通用字段设计,对于原始数据需要多一步数据处理的步骤进行数据分析与统计,不过这并不是太大问题,只要有原始数据存在,就可以针对业务所需要的数据指标做灵活的聚合统计。

4. 结论和最佳实践

经过从初始设计到系统重构的全过程,我们总结出了以下几点关键的最佳实践,希望能为同行提供有价值的参考:

  1. 设计通用字段 通用字段设计是提高埋点系统灵活性和可扩展性的关键。它让我们能够适应不断变化的业务需求,而不必频繁修改数据结构。
  2. 异步解耦 利用消息队列进行异步上报是一个明智之选。这不仅能显著减少对主业务流程的影响,还能提高系统的整体性能和稳定性。
  3. 分层存储策略 采用Elasticsearch进行实时存储,辅以大数据平台进行离线备份,是一种平衡查询性能和存储成本的有效方法。这种策略让我们能够快速检索近期数据,同时保证长期数据的完整性。
  4. 推进自动化埋点 尽可能实现自动化埋点,可以大幅减少代码侵入性。这不仅提高了开发效率,还降低了人为错误的可能性。
  5. 预留降级机制 为高流量场景预留降级开关是非常必要的。这确保了在极端情况下,核心业务不会受到埋点系统的影响,从而保证了整体服务的可靠性。
  6. 全面详细的记录 记录足够详细的信息是快速定位和解决问题的基础。在实践中,我们发现全面的日志记录能够大大缩短问题排查的时间。
  7. 定期评估与优化 随着业务的不断发展,定期评估埋点系统的效果和性能变得尤为重要。我们建立了一个季度评估机制,确保埋点系统能够及时进行优化和调整。

通过这次从初始设计到重构的过程,我们不仅解决了当前面临的问题,还为未来的业务扩展奠定了坚实的基础。这个过程让我们深刻认识到,一个优秀的埋点系统应该是灵活的、高效的、可扩展的,同时又不应该对主业务造成明显影响。

感谢阅读~


在这里插入图片描述

感谢大家的观看!!!创作不易,如果觉得我写的好的话麻烦点点赞👍支持一下,谢谢!!!
相关文章已在掘金发布,体验更佳!!

这篇关于(一)从零到一:设计通用型埋点方案的实践与思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105931

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机