Android Developer

寺库Android数据智能上报

特点

  • 及时,近乎实时上报
  • 批量上报,同时规避大数量单次上报
  • 很好的解决埋点数据大量密集涌入的情况
  • 耗时操作剥离主线程,不影响用户的正常操作
  • 处理线程异常,增强应用稳定性
  • 利用RxJava和OKHttp已有线程池,不显式增加新线程
  • 重试机制支持,增加重试时机,保证之前失败数据达到数据平台

实时上报机制

先举一个例子

  • 将埋点数据比作乘客
  • 将数据平台比作目的地
  • 而App的上报请求就是客车
  • App则是负责发车的调度这

当调度者(App) 发现有一个乘客(埋点数据)时,就安排这个乘客上车,然后开始计时

  • a.如果超过5分钟(举例需要),没有新的乘客乘车,就立即发车,被送达到目的地
  • b.如果5分钟内,有新的乘客过来,就重新计时,按照a,b情况去匹配操作
  • c.特殊情况,如果发车时,乘客过多,调度者会安排多辆客车立即发车(不再走a,b情况处理)。

调度者通过反复上面的操作,就会将乘客源源不断地送达到目的地

分批切块逻辑

  • 为了规避大量数量(洪水般)数据单次批量上报可能出现数据量过大的问题,我们队数据进行分批切块处理
  • 分批切块处理后的每块的数据顺序保持原数据的顺序,比如[1,2,3,4,5,6,7,8,9,10] 以3为一块的容量,可以分为[1,2,3][4,5,6][7,8,9][10]

失败处理

  • 无网络时收集的请求会写入文件
  • 请求失败的数据会写入文件
  • 网络请求恢复用户进入前台应用启动时会上报失败的数据

不足与问题

  • 极端情况下,可能会造成某些数据丢失(之前的实现方式也有问题,相对之前有明显改进)
  • 分批切块的阈值(15条)缺少实践验证是否为最佳数值
  • 实时上报检测时间阈值(3秒)可能并非最佳