数据埋点重构优化
2024-01-22 14:04:25 0 举报
AI智能生成
数据埋点重构优化
作者其他创作
大纲/内容
背景
告警指标准确度优化
https://confluence.shopee.io/pages/viewpage.action?pageId=2119043313
现行上报机制
统一在IM进程收集和处理
技术上报 (olap.report)
url: {host}/open/datareport/report_json
Live = 'https://api.haiserve.com',
LiveStaging = 'https://api.staging.haiserve.com',
Test = 'https://api.test.haiserve.com',
LiveStaging = 'https://api.staging.haiserve.com',
Test = 'https://api.test.haiserve.com',
在feature_toggle.json中enable=true的情况下执行
未开启定时上报逻辑
无本地缓存累加上报逻辑
初始化后内存中每累积到50条检查是否要上报一次
业务上报1 (/records/new)
每分钟上报一次,每次最多上报 1000 条。超过 1000 条的部分,等下一分钟
业务上报2 (mdap.capture)
TBD...
调用处
初始化ipc时, 注册了electron-report事件, 事件内 type=capture时触发
socketPush 解析回包在catch error处触发
messageDB toModel的catch error处触发
预期
内容
新增【异常请求指标】的业务上报
新增 tech_tcp_request_error
新增 tech_http_request_error
重构reporter到common包
上报 SDK 实时性优化
技术埋点 & 产品埋点统一,上报频率提升
上报频率调整为 10s,每次上报最大条数为 100 条,超过阈值时等待 10s 后再次上报。
去掉 Token 检测逻辑,确保不登录时可正常上报
确保在启动流程中,将上次未上报完成的数据,立即进行上报
上报频率调整为 10s,每次上报最大条数为 100 条,超过阈值时等待 10s 后再次上报。
去掉 Token 检测逻辑,确保不登录时可正常上报
确保在启动流程中,将上次未上报完成的数据,立即进行上报
调整采样率
参考上文《调整采样率》
新版本代码中去除原有的 Feature Toggle 控制采样率逻辑,改为本地代码实现
采样率控制遵循此文档 SeaTalk Tech Tracking Master File / 技术埋点 - Google Sheets
新版本代码中去除原有的 Feature Toggle 控制采样率逻辑,改为本地代码实现
采样率控制遵循此文档 SeaTalk Tech Tracking Master File / 技术埋点 - Google Sheets
排期 (工时共11D)
新增两个上报指标##3
调整onFetch请求
调整sendRequest请求
自测
调整采样率##1
维护本地变量替换json文件
自测
重构reporter
上报SDK实时性优化##6
去除token逻辑##1
频率调整##1
添加启动后将未上报的数据重新上报##2
技术上报(无)
业务上报(已有通过localstorage补偿机制,但需调整)
联调##1
自测##1
CR及代码优化##1
技术方案
独立report能力包
Reporter类
新建上报队列
业务上报队列
技术上报队列
设定队列消费机制
从localStorage初始化上次未消费完的数据
初始化业务上报数据
初始化技术上报数据
启动定时消费机制
setInterval, 10s触发
每次消费1000条数据
队列读写
读
一个定时周期后, 如果有数据的话, 分别将业务上报数据和技术上报的数据提交上报
写
增
调用api上报时往相对应的队列append一个数据
删
上报完成后, 从对应队列中删除一批量的数据
当im进程销毁时, 将未完成的队列数据存到localstorage中
将业务上报数据写入localstorage
将技术上报数据写入localstorage
采样率常量设定
上报机制
在im初始化时初始化reporter
上报api
通用的上报能力
多进程上报
方案一: 依据当前的pathname来选调用机制
在im进程新建一个ipc侦听事件, 用于跨进程上报
技术上报, 传送到im进程后, 调用技术上报api
业务上报, 传送到im进程后, 调用业务上报api
im进程pathname
直接调用业务/技术上报api
非im进程pathname
调用ipc通信的业务/技术上报api, 将数据透传到im进程, 调用技术/业务上报api
方案二: 依据初始化标记来选调用机制, 仅在im进程初始化reporter
在im进程新建一个ipc侦听事件, 用于跨进程上报
技术上报, 传送到im进程后, 调用技术上报api
业务上报, 传送到im进程后, 调用业务上报api
有初始化标记
直接调用业务/技术上报api
无初始化标记
调用ipc通信的业务/技术上报api, 将数据透传到im进程, 调用技术/业务上报api
方案三: 新建独立的上报数据进程
新建一个report进程, 同时新建一个ipc侦听事件, 用于跨进程上报
技术上报, 传送到im进程后, 调用技术上报api
业务上报, 传送到im进程后, 调用业务上报api
调用上报api时, 统一通过ipc到该进程进行处理业务/技术上报
方案四: im进程定时消费队列, 非im进程直接上报
TBD
缺少部分基础数据?
请求资源?
性能?
技术上报api
业务上报api
在im初始化: 传参初始化Reporter
基础数据
uid: credentialsDB.userId
plt: platform,
on: osname,
ov: osVersion,
dc: deviceCpu,
sla: languageISO[language].toLowerCase(),
svc: webVersion,
sva: svaVersion,
dl: credentialsDB.locationISO,
oid: [].concat(qrcodeUserInfo?.cids || qrcodeUserInfo?.oids || []).map(id => id?.toString()),
sbu: stBuild,
dts: getISODate(new Date()),
dtz: deviceTimezone,
dnr: getDeviceNetworkRTT(),
TBD...
0 条评论
下一页