给定一个日活 500 万的 APP,如何在一周内完成流量模型梳理并输出典型日、高峰日模型
解读
面试官想知道三件事:
- 能否在极短时间内把“500 万日活”拆成可落地的流量画像;
- 是否熟悉国内数据渠道(埋点、网关、运营商、CDN、灰度平台)并快速清洗出“业务-接口-并发”三层映射;
- 能否用工程化手段把模型变成压测脚本可直接消费的“时序-并发-带宽”输入,并区分“典型日”与“高峰日”两种 SLA 场景。
回答必须体现“速度”与“精度”的平衡:一周交付,误差≤10%,后续可回滚验证。
知识点
-
国内数据口径
- 埋点:阿里埋点规范、腾讯灯塔、字节 Ranger,需解决 5%-8% 的丢失率;
- 网关日志:Nginx/Envoy/Kong,含 UA、IP、X-Forwarded-For,需按省份+运营商补全;
- 灰度平台:美团 Shark、京东 Jaeger,可拉取用户分桶数据;
- 监控:阿里云 SLS、腾讯云 CLS、华为云 LTS,支持 SQL 直查;
- 合规:脱敏《个人信息保护法》,用户 ID 取 hash+salt,IP 取省粒度。
-
流量分层模型
业务层 → 场景 → 接口 → 并发度 → TPS/RPS → 带宽。
场景权重 = 该场景 UV / 日活 UV;
并发度 = 场景 UV × 人均会话数 × 平均会话时长 / 86400 × 峰值系数。 -
时序去噪
用“分位数+节假日标签”双维校准:- 去掉双 11、618 异常日;
- 用 P99 分位做峰值,P50 做典型;
- 用 STL 把趋势、周期、残差拆开,残差>3σ 标记为异常。
-
高峰日识别
国内高峰通常出现在:- 电商:6·18 零点、双 11 预售、年货节;
- 短视频:春晚红包、国庆红包雨;
- 出行:春运放票、五一/十一前三天;
- 支付:每月 1 号信用卡还款日。
取近 12 个月峰值 TOP3 做加权平均,再上浮 20% 做“设计峰值”。
-
快速验证
- 离线:用去年同周期生产流量回放,误差=(预测-实际)/实际;
- 在线:切 5% 灰度,用 TCP-Copy 引流到影子集群,看 CPU/TP99 是否吻合。
答案
Day1 数据拉齐
- 中午前输出《数据需求清单》:埋点表、网关日志、订单表、推送日志、客服热点;
- 下午与数据平台、运维、安全开 30 分钟对齐会,明确脱敏规则、拉数权限、SLA(T+0 出数)。
Day2 原始数据清洗
- 写 PySpark 脚本跑在阿里云 EMR,按 user_id 做 hash 分桶,去重 5%;
- 补全缺失省份:用 IP 库+运营商接口,准确率 99.2%;
- 输出《数据质量报告》:丢失率、重复率、异常状态码占比。
Day3 业务-接口映射
- 用埋点事件名与 swagger 接口做 fuzzy match,人工复核 Top50 接口;
- 输出《接口权重表》:事件 code → URI → 方法 → 占比;
- 把读/写接口分开,写接口按幂等 token 去重。
Day4 模型初稿
- 典型日:取最近 4 个普通周二,按小时聚合,用 P50 做基准;
- 高峰日:取去年双 11,小时级 P99,再上浮 20%;
- 用 Excel+Python 画“小时-并发”曲线,并发公式:
并发 = 小时 UV × 人均点击 18 次 × 平均停留 230 s / 3600 × 1.8(峰值系数); - 输出《流量模型 V0.9》给核心开发 review。
Day5 交叉验证 & 修正
- 用 TCP-Copy 把昨日 10% 流量镜像到压测环境,回放 30 分钟,对比 TP99 误差 7%,在阈值内;
- 发现“首页推荐”接口预测 QPS 比实际低 12%,因推荐算法灰度 30% 流量,立即把灰度比例补进模型;
- 更新为《流量模型 V1.0》。
Day6 模型固化 & 脚本生成
- 用 JMeter DSL+Taurus 把 Top30 接口写成 yaml,参数化省粒度、网络类型、版本号;
- 写 bash 脚本一键生成“典型日”“高峰日”两套场景,支持动态调速到 120% 过载;
- 输出《压测脚本包》《参数池》《环境隔离 checklist》。
Day7 评审与交付
- 上午拉运维、架构、业务、安全四方评审,确认:
– 高峰日并发 48 万,是日活 9.6%,符合行业 8%-12% 区间;
– 带宽峰值 2.3 Tbps,CDN 已按 95 计费,无需扩容; - 下午邮件发送《典型日&高峰日流量模型报告》《脚本包》《验证记录》,抄送 TL 与 PMO,完成交付。
拓展思考
-
如果数据平台 T+1 怎么办?
可让运维在网关层实时写 Kafka,用 Flink 每 10 分钟滚动一个窗口,当天就能跑出“准实时”小时级分布,误差约 3%,满足一周交付。 -
如何兼容大促版本迭代?
把模型拆成“不变量”(日活、留存、转化率)与“变量”(新功能埋点),变量用灰度桶提前 2 周放量 5%,收集 3 天数据即可外推全量。 -
后续持续治理
- 每月第一个工作日自动对比上月的“预测/实际”偏差,>10% 触发模型重训;
- 把流量模型接入 CICD,每次上线前跑 10 分钟 smoke,防止新接口遗漏。