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