DataReporter 是一款跨平台的数据上报框架,能够保证对业务性能无影响。同时保证上报数据不丢失,即使上报过程 App 出现了crash,数据也不会丢失,App下次重启会再次上报。
适用于 android 和 iOS 平台。目前得到App在使用。每天百万日活,没有出现数据丢失问题。
相比其他 log 上报软件的设计,DataReporter 更适合的是用户数据上报。因为用户数据的上报是准实时需求,有网情况要尽可能快的报到服务端,同时要保证数据不丢失。而 log 上报框架对于数据实时性上报要求并不高,所以对于数据的准实时上报,使用DataReporter上报框架更适合一些。
特点:
- 跨平台,DataReporter是跨平台实现,适用于Android和iOS。
- 准实时上报,网络状态好,直接上报,网络状态不好在网络转好后上报,同时上报顺序不乱序。
- 不丢数据,采用mmap实现缓冲区。即使发生应用crash或者进程被杀,数据不会丢失,下次启动会再次上报。
- 低功耗,采用c++实现,整个上报共用一个线程,多实例多业务场景共用同一线程,当数据全部上报完成后,线程休眠。
- 高效率,可配置一次上报数据条数。增加上报效率。有效利用网络。减少链接次数。同时采用native方式实现,性能方面更优秀。
原理
数据通过调用接口进入DataReporter,先缓存到数据缓冲区,缓冲区实现是mmap,即使发生crash数据不丢失。然后启动线程进行上报。上报开始调用上报接口。成功后调用者通知上报完成,开始进行下一批数据上报。当上层调用过快,缓冲区数据达到指定阈值,数据开始下沉写入文件。写文件缓冲区同样采用mmap实现,防止数据丢失。上报优先级是先取文件数据,然后再取内存数据。保证数据顺序与调用顺序相同。