某天突然被问到系统QPS提高了,应该怎么办?
我答道:首先考虑系统设计,比如系统的设计是否符合实际的需求,具体可以从微服务架构等方面考虑。然后就是接口的响应时间是否能满足需求。还有就是系统的数据库设计是否需要做调整,如是否需要做读写库分离、表结构的水平拆分、垂直拆分。。。。。
今天,来完整梳理下QPS提高了,应该怎么办?
一、 紧急措施
1、限流保护:Nginx限流、Hystrix限流等
2、降级非核心功能:对于日志记录等非主要业务流程进行降级
3、扩容与负载均衡:是否需要增加服务器来分担热点服务的压力
二、短期计划
1、定位瓶颈:使用top命令等监控CPU
2、数据库优化:监控高频SQL、大SQL、长SQL,并根据执行计划进行优化
三、长期计划
1、架构调整
- 服务架构是否需要调整(是否需要增加服务器)
- 数据库是否满足需求(是否需要做读写库分离、表结构的水平拆分或者垂直拆分)
- 中间件等是否满足需求(Redis、Dubbo的架构是否需要做调整)
2、缓存策略:
- 热点数据本地缓存 + Redis 分布式缓存多级缓存
- 杜绝缓存穿透、击穿、雪崩,合理过期策略
- 查询优先走缓存,少查数据库
3、网络 & 资源
- 缩短超时时间,关闭无效连接
- 调高 JVM 堆、线程池合理阈值
- CDN 托管静态资源,减轻服务压力