给定一个日活 500 万的 APP,如何在一周内完成流量模型梳理并输出典型日、高峰日模型

解读

面试官想知道三件事:

  1. 能否在极短时间内把“500 万日活”拆成可落地的流量画像;
  2. 是否熟悉国内数据渠道(埋点、网关、运营商、CDN、灰度平台)并快速清洗出“业务-接口-并发”三层映射;
  3. 能否用工程化手段把模型变成压测脚本可直接消费的“时序-并发-带宽”输入,并区分“典型日”与“高峰日”两种 SLA 场景。

回答必须体现“速度”与“精度”的平衡:一周交付,误差≤10%,后续可回滚验证。

知识点

  1. 国内数据口径

    • 埋点:阿里埋点规范、腾讯灯塔、字节 Ranger,需解决 5%-8% 的丢失率;
    • 网关日志:Nginx/Envoy/Kong,含 UA、IP、X-Forwarded-For,需按省份+运营商补全;
    • 灰度平台:美团 Shark、京东 Jaeger,可拉取用户分桶数据;
    • 监控:阿里云 SLS、腾讯云 CLS、华为云 LTS,支持 SQL 直查;
    • 合规:脱敏《个人信息保护法》,用户 ID 取 hash+salt,IP 取省粒度。
  2. 流量分层模型
    业务层 → 场景 → 接口 → 并发度 → TPS/RPS → 带宽。
    场景权重 = 该场景 UV / 日活 UV;
    并发度 = 场景 UV × 人均会话数 × 平均会话时长 / 86400 × 峰值系数。

  3. 时序去噪
    用“分位数+节假日标签”双维校准:

    • 去掉双 11、618 异常日;
    • 用 P99 分位做峰值,P50 做典型;
    • 用 STL 把趋势、周期、残差拆开,残差>3σ 标记为异常。
  4. 高峰日识别
    国内高峰通常出现在:

    • 电商:6·18 零点、双 11 预售、年货节;
    • 短视频:春晚红包、国庆红包雨;
    • 出行:春运放票、五一/十一前三天;
    • 支付:每月 1 号信用卡还款日。
      取近 12 个月峰值 TOP3 做加权平均,再上浮 20% 做“设计峰值”。
  5. 快速验证

    • 离线:用去年同周期生产流量回放,误差=(预测-实际)/实际;
    • 在线:切 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,完成交付。

拓展思考

  1. 如果数据平台 T+1 怎么办?
    可让运维在网关层实时写 Kafka,用 Flink 每 10 分钟滚动一个窗口,当天就能跑出“准实时”小时级分布,误差约 3%,满足一周交付。

  2. 如何兼容大促版本迭代?
    把模型拆成“不变量”(日活、留存、转化率)与“变量”(新功能埋点),变量用灰度桶提前 2 周放量 5%,收集 3 天数据即可外推全量。

  3. 后续持续治理

    • 每月第一个工作日自动对比上月的“预测/实际”偏差,>10% 触发模型重训;
    • 把流量模型接入 CICD,每次上线前跑 10 分钟 smoke,防止新接口遗漏。