最近公司发生了一起线上事故。
起因是这样,app首页需要展示首页推荐,而每个商品的具体信息又只有单个查询的接口。
这样一次访问首页就是20个接口的访问起,一次接口光数据库的一次查询就上百ms,而且线程池被挤满。这样累计下来,流量将首页卡的除了固定背景什么都显示不出来。
这么持续一段时间之后,流量少了下来才自己转好。
因为我是刚进公司没几天,这次事故和我没关系,处在一个局外人的角度来看这个问题。
- 这次的事故明显是因为流量直接打到数据库上导致的,如果将首页推荐提前缓存起来,说不定问题不会这么大。当然,这也只是我还没完全了解业务的情况下的想法,推荐商品是根据用户位置来推荐的,可能并不适合提前缓存。
- 如果是先获取到20个商品id,再根据商品id去一个一个查询商品详情,能否做一个批量查询的接口,一次请求全部拉取20条信息。
- 手机上一屏肯定没法显示全部20件商品,能否仿照淘宝那种,拉到下面才开始加载后面的推荐。做到一种懒加载的效果。
- 访问数据库的速度能否提升。
- 为什么访问速度已经被挤下来了,熔断器没有做出反应。我认为让一部分人失去体验要比全部人失去响应好得多。
以上只是我一个从同事口中只言片语得出的一些结论和思考。
ToC的项目果然危险的多,而且会有意思的多。