记一次服务优化
最近公司有个项目,再某一次活动时,流量暴增,达到了1万QPS,因数据库、服务扩容不及时,停止服务近5分钟,受影响用户近20W。所以有了这一次优化。
目标:
1、支持最大40000 QPS
2、能够及时动态扩缩容。
分析原因:
- 流量在特定时间点暴增达到服务上面,流量来的太突然,没有提前预警。
- 这个服务之前流量较小,MySQL机器配置较低,无法承受大并发写入。
- 服务某些接口,没有接入缓存,直接查库。
优化思路:
- 限流。服务的网关层进行限流。
- 数据库升级配置,主库配置32C64G(此配置经压测大约可以支持2QPS的写),从库扩容多个节点。
- Redis集群扩容。将一些数据库缓存到Redis中,扩容节点分散储存。
- 添加本地缓存。
- 削峰,将一些封必要的写入操作,使用Kafka削峰,延迟写入。
- 优化Tomcat配置
- 优化数据库连接池配置
- 优化JVM参数,调整GC配置
- 调整流量报警监控。
- 调整自动扩容机制。
最终结果:
MySQL 32C64G 1主10从。 实例POD,2C4G * 60台支持5WQPS