Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >APP日志上报,我是这么把用户手机流量刷爆的! | 架构师之路

APP日志上报,我是这么把用户手机流量刷爆的! | 架构师之路

作者头像
架构师之路
发布于 2024-12-24 04:29:39
发布于 2024-12-24 04:29:39
1960
举报
文章被收录于专栏:架构师之路架构师之路

为了统计APP内用户行为,或者需要收集某些产品数据,APP往往需要进行日志上报,如何设计APP日志上报,才能把用户手机流量刷爆呢?

知识体系化非常重要,今天系统性和大家聊聊APP日志上报。 问题一:APP可不可以不上报日志,只从服务器日志统计用户的行为和产品数据? 不行,有些用户行为不会与服务器进行交互,例如“卡片切换”,服务器日志无法完成所有统计。

问题二:APP一般如何上报日志? 常用方法有这么几种。

(1)使用类似于Google Analytics的第三方工具;

优点:无需开发

缺点:不能做个性化统计

(2)自己制订私有协议进行上报;

优点:节省流量

缺点:开发成本高

画外音:例如,TCP二进制协议,可定制化,又省流量。

(3)使用HTTP协议,通过GET参数传递需要上报的数据。

问题三:如何通过HTTP协议进行上报?

可以在Web-Server下放置一个文件,APP发起HTTP请求访问这个文件,通过GET参数传递数据,并通过分析access日志来得到想要的数据。

问题四:如何通过GET参数传递数据?

一般又有两种方式:

(1)约定格式法;

(2)KV法。

问题五:什么是“约定格式法”?

约定格式法:约定分隔符,约定占位符,约定每个字段的含义,例如:

http://kuaigou.com/up?[bj][20240907][1939][1][login]

约定如下:

(1)被访问文件是up;

(2)分隔符是[];

(3)第一个字段[bj]代表城市,第二个字段代表日期,第三个字段代表时间,第四个字段代表用户id,第五个字段代表行为。

该方法缺点是:扩展性较差,有时候某些字段没有值,也必须在相应的位置保留占位符,因为每个字段的含义都是事先约定好的,要想新增统计项,只能在GET后面新增[]。

问题六:什么是“KV法”?

KV法:通过GET参数自解释的KV方式来上报数据。

上面的例子用KV法来上报,则上报形式为:

http://kuaigou.com/up?city=bj&date=20240907&time=1939&uid=1&action=login

该方法的优点是:扩展性好。

缺点是:上报数据量比较大,非常消耗流量。

问题七:为什么会这么消耗流量呢?

之所以消耗流量,主要有这样一些原因:

(1)无效流量多,HTTP报文有很多无效数据; (2)URL冗余,每次都要上报URL; (3)KEY冗余,每次都要上报KEY; (4)上报频度高,用户每次操作都要日志上报的话,上报量很大。

问题八(重点):怎么把用户的手机流量刷爆呢?

了解了消耗流量的上述1-4点,就能够针对性恶心用户了。

方向1:尽量增加HTTP请求内无效数据。

实施方案:避免手动构造HTTP请求,尽可能保留HTTP中的无效数据。

画外音:

举例,使用第三方库构造HTTP请求,可能会带上你并不需要的UA数据。

自己构造,则可以只保留GET /up HTTP/1.1和GET传递的必须数据;

通过这种方法,把HTTP报文增大0.2K。

方向2:尽量使用长URL来冗余数据。

实施方案:使用尽可能长的域名来接收上报的日志,例如:

http://www.woshiyuming/rizhishangbao

画外音,不要使用这种:s.kg.cn/a

通过这种方法,把HTTP报文增大0.1K。

方向3:上报尽可能冗余的KEY。

实施方案:使用尽可能长的KEY来标识数据,日志收集方不要统一规范KEY,尽量让每次需求都重复上报。

例如,城市上报要使用:

chengshi=beijing

不要优化为c=bj。

再例如,不要做基础数据规范,可以不同项目中重复埋点,上报多次:

name=shenjian&user_id=123&uid=123&user_name=shenjian

而上述name、user_id、uid、user_name都可以不同项目重复上报。

通过这种方法,把HTTP报文增大0.5K。

方向4:增加上报频率。

实施方案:不要将数据保存到APP本地存储,定时上报,不要对于PV类,SUM类,AVG类统计在端上做预处理。

例如,要统计登录按钮的点击次数,三次点击,可以上报三次: http://kuaigou.com/up?date=20240907&uid=1&action=login http://kuaigou.com/up?date=20240907&uid=1&action=login http://kuaigou.com/up?date=20240907&uid=1&action=login

通过这种方法,把HTTP上报频率增大20倍。

不要预处理,不要增加参数只上报一次,这样太省流量:

http://kuaigou.com/up?date=20240907&uid=1&action=login&count=3

非实时上报,应该在什么时机进行日志上报呢?

如果进行合并上报,或者批量上报,数据的时效性会有一定的影响。

画外音:如果策略合理,数据误差会非常小。

可以在这样的一些时间点进行上报: (1)特殊时间点上报:例如,APP打开,关闭,后台转入活跃时; (2)按时间批量上报:例如,每隔10分钟才上报一次; (3)按数据量批量上报:例如,每收集10条记录才上报一次;

还有其他什么恶心用户的方案? 不要批量上报,不要数据压缩。

综合下来,上报一次几K流量没了,玩半小时手机,几百兆流量没了,爽!

恶心用户并不难,思路比结论重要。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
无线APP日志上报优化实践
昨天,和大家讨论了无线APP时代如何进行DNS速度优化,今天和大家一起讨论一下无线时代的日志上报流量优化。 缘起:无线时代,APP流量敏感,为了统计APP内用户行为,或者需要收集某些产品数据,往往需要进行日志上报,日志上报往往又非常费流量,有没有一些好的节省流量的优化方法呢,这是本文将要讨论的问题。 ---- 一、APP可不可以不进行日志上报,而单纯从服务器日志统计用户的行为和产品数据? 答:不行,有些用户行为是不会与服务器进行交互的(例如TAB的点击),从服务器日志无法完成所有统计。 ---- 二、A
架构师之路
2018/03/01
1.6K0
用户中心,1亿数据,架构如何设计?
用户中心,几乎是所有互联网公司,必备的子系统。随着数据量不断增加,吞吐量不断增大,用户中心的架构,该如何演进呢。
架构师之路
2020/07/16
5.4K0
谁家的加密密钥,写死在代码里?(说的就是你)
系统设计,协议先行。 大部分人不了解协议的设计细节,更多使用已有协议进行应用层设计,例如: (1)使用HTTP,设计 get/post/cookie 参数,以及json包格式; (2)使用dubbo,而不用去深究内部的二进制包头包体细节; 无论如何,了解协议设计的原则,对深入理解系统通信非常有帮助。 一、协议的分层设计 所谓“协议”,是双方共同遵守的规则,例如:离婚协议,停战协议。协议有语法、语义、时序三要素: (1)语法,即数据与控制信息的结构或格式; (2)语义,即需要发出何种控制信息,完成何种动作以
架构师之路
2022/06/29
6300
谁家的加密密钥,写死在代码里?(说的就是你)
MapReduce经典设计,给了我们哪些架构启示?(第85讲,超长文)
它不是一个产品,而是一种解决问题的思路,它有多个工程实现,Google在论文中也给出了它自己的工程架构实现。
架构师之路
2025/08/11
1750
MapReduce经典设计,给了我们哪些架构启示?(第85讲,超长文)
架构设计中的后台任务:3种场景,2.5种触发模式,3个重点考量? | 架构师之路(11)
举例:用户上传头像场景,上传完原图之后,需要生成大图,中图,小图。这个过程非常占用磁盘IO,且比较耗时,不应该让用户在上传页面等待,故可以启动一个后台任务来执行。
架构师之路
2024/12/24
1820
架构设计中的后台任务:3种场景,2.5种触发模式,3个重点考量? | 架构师之路(11)
单KEY业务,数据库水平切分架构实践 | 架构师之路
提醒,本文较长,可提前收藏/转发。 本文将以“用户中心”为例,介绍“单KEY”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践: 如何来实施水平切分 水平切分后常见的问题 典型问题的优化思路及实践 一、用户中心 用户中心是一个非常常见的业务,主要提供用户注册、登录、信息查询与修改的服务,其核心元数据为: User(uid, login_name, passwd, sex, age, nickname, …) 其中: uid为用户ID,主键 login_name, passwd,
架构师之路
2018/03/01
1.2K0
单KEY业务,数据库水平切分架构实践 | 架构师之路
80后聊架构:增加线程到底能不能提升吞吐量? | 架构师之路
昨天聊了,啥时候应该优化延时(Latency),啥时候应该优化吞吐量(Throughput)。
架构师之路
2024/12/24
1630
80后聊架构:增加线程到底能不能提升吞吐量? | 架构师之路
计数系统架构实践一次搞定 | 架构师之路
提醒,本文较长,可提前收藏/转发。 一、需求缘起 很多业务都有“计数”需求,以微博为例: 微博首页的个人中心部分,有三个重要的计数: 关注了多少人的计数 粉丝的计数 发布博文的计数 微博首页的博文消
架构师之路
2018/03/02
2.8K2
计数系统架构实践一次搞定 | 架构师之路
1对多业务,数据库水平切分架构一次搞定 | 架构师之路
本文将以“帖子中心”为例,介绍“1对多”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践: 如何来实施水平切分 水平切分后常见的问题 典型问题的优化思路及实践 一、什么是1对多关系 所谓的“1对1”,“1对多”,“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体之间的映射关系。 1对1 一个用户只有一个登录名,一个登录名只对应一个用户 一个uid对应一个login_name,一个login_name只对应一个uid 这是一个1对1的关系。 1对多 一个用户可以发
架构师之路
2018/03/02
1.2K0
1对多业务,数据库水平切分架构一次搞定 | 架构师之路
1对多业务,数据库水平切分架构一次搞定 | 架构师之路
1对多业务,数据库水平切分架构一次搞定 | 架构师之路
Java架构师必看
2021/09/26
7090
1对多业务,数据库水平切分架构一次搞定 | 架构师之路
京东App秒级百G日志传输存储架构设计与实战
在日常工作中,我们通常需要存储一些日志,譬如用户请求的出入参、系统运行时打印的一些info、error之类的日志,从而对系统在运行时出现的问题有排查的依据。
天涯泪小武
2021/12/09
8950
京东App秒级百G日志传输存储架构设计与实战
系统设计题(1) 连续5天登录用户(快手)
但是,由于每一行的 id%100 的结 果是无序的,所以我们就需要有一个临时表,来记录并统计结果。
早起的鸟儿有虫吃
2020/07/14
9910
架构师必经之路:分布式的坑
如果只有一家小超市(可理解为 “单机系统”),遇到周末人挤人,收银台排成长队(出现性能瓶颈);万一突然停电,整个超市直接瘫痪(发生单点故障),谁都买不了东西。
方才编程_公众号同名
2025/08/03
980
架构师必经之路:分布式的坑
搭建前端监控,采集用户行为的 N 种姿势
上一篇我们详细介绍了前端如何采集异常数据。采集异常数据是为了随时监测线上项目的运行情况,发现问题及时修复。
杨成功
2022/09/22
1.5K0
数据运营平台-数据采集[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说数据运营平台-数据采集[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/07/06
5.6K0
数据运营平台-数据采集[通俗易懂]
架构师眼中的高并发架构
高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等。
java思维导图
2018/07/26
1.6K0
架构师眼中的高并发架构
架构师养成记之全局架构视角下的百万级流量到千万级流量用户的系统设计
        目前,我们尚能在纵向扩展时解决这些问题。不幸的是,解决这些问题的代价变得相当昂贵,并且原来的系统并不能允许在 MySQL 数据库 和 Web 服务器 的基础上进行独立扩展。
睡前大数据
2025/06/23
1160
架构师养成记之全局架构视角下的百万级流量到千万级流量用户的系统设计
51 张图助你彻底掌握 HTTP 协议
如果说 TCP/IP 协议是互联网通信的根基,那么 HTTP 就是其中当之无愧的王者,小到日常生活中的游戏,新闻,大到双十一秒杀等都能看到它的身影,据 NetCraft 统计,目前全球至少有 16 亿个网站、2 亿多个独立域名,而这个庞大网络世界的底层运转机制就是 HTTP,可以毫不夸张的说,无 HTTP 不通信!
kunge
2021/01/13
7490
如何开发门店业绩上报管理系统中的统计报表板块?(附架构图+流程图+代码参考)
门店业绩上报管理,看起来是把数字做漂亮的可视化,但真正有价值的是把分散的数据口径统一、自动化统计并能落地为运营动作。很多公司数据来源多、口径不统一、对账麻烦,最终让运营决策滞后或失真。统计报表板块不是炫酷图表堆砌,而是要能回答三个问题:今天哪家店没达标?哪个商品贡献最大?本月目标还能不能完成?本文带着实操思路、架构建议、业务流程、开发技巧和三大整合代码块(DDL+ETL、后端、前端)一步到位,方便你拿去改造或直接做为项目交付参考。
用户5667915
2025/08/22
2380
如何开发门店业绩上报管理系统中的统计报表板块?(附架构图+流程图+代码参考)
亿级流量网站架构核心技术【笔记】(一)
3.在有限资源的情况下,一定是先解决当下最核心的问题,预测并发现未来可能出现的问题,一步步解决最痛点的问题,即满足需求的系统是不断迭代优化出来的 A.高并发原则 1.无状态:比较容易进行水平扩展,应用无状态,配置文件有状态 2.拆分:在系统设计初期,是做一个大而全的系统还是按功能模块拆分系统,这个需要根据环境进行权衡
硬核项目经理
2019/08/06
2.2K0
亿级流量网站架构核心技术【笔记】(一)
推荐阅读
相关推荐
无线APP日志上报优化实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档