这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
响应太慢
火了,但也慢了
我的 API 在社区里火了。
用户开始抱怨:
- “你的 API 太慢了!”
- “有时候要等 3 秒才能返回”
- “能不能优化一下?”
每一条反馈我都看在眼里。那时候的我意识到:再不优化,这个产品就真的要死了。
调查
我决定调查问题原因。首先加了日志,记录每个请求的时间分布,然后在管理后台界面直观的展示出来。
运行一天后,我查看管理后台:
请求耗时分析
一次天气查询为什么要等 2 秒?
总耗时
2000ms
外部 API 调用 1800ms
主要等待点
网络开销 150ms
可优化但不是主因
数据处理 50ms
平台内部开销较低
耗时占比
外部 API 调用:90%
网络开销:7.5%
数据处理:2.5%
瓶颈找到了:外部 API 太慢!
更糟糕的消息
我查了一下外部 API 的文档,发现:
https://weather-api.com/docs/pricing-and-limits
免费版限制
- 每分钟调用次数:100 次
- 每天调用次数:10000 次
计算一下当前使用情况:
- 日调用量:10 万次
- 每分钟平均:10 万 / 24 / 60 ≈ 70 次/分钟
已经接近限制了!如果用户再增长,就会被限流。
那一刻我真的慌了。
思考
关键问题:同一个城市的天气,多久变化一次?
我查了一下气象数据:
- 温度:每小时变化 1-3 度
- 天气状况:几小时内基本不变
- 湿度:变化缓慢
结论:同一个城市,1 小时内的天气数据基本相同!
那为什么要重复调用?
数据分析
我分析了过去 24 小时的请求日志:
请求数据分析:
- 总请求数:100,000 次
- 不同城市数:50 个
- 平均每个城市:2000 次请求/天
最热门的城市:
- 北京:15000 次
- 上海:12000 次
- 深圳:10000 次
如果北京在 1 小时内被请求了 1500 次,我调用了 1500 次外部 API,但返回的是同样的数据!
这是巨大的浪费!
解决思路
我应该将数据缓存下来。
核心思想:
- 第一次请求:调用外部 API,缓存结果
- 后续请求:直接返回缓存,不调用外部 API
- 缓存过期:1 小时后自动失效