背景
1.10号下午发现一个场景,在商品服务中没有进行库存判断,让商品同学加上了对应的判断。晚上进行了发布。发布过后,到了10点,突然收到了一个项目的http告警(Tomcat的活跃线程超过40会有告警),发现一个很稳定的http接口,RT达到了500ms。
应对手段
收到该消息后,由于以前也处理过类似的问题,所以第一时间查看了RDS的CPU,结果显示RDS CPU被打满,已经是100%的情况了。
查看发布情况,6点多商品同学有过一次发布,要求先进行回滚,该同学响应速度较慢,以前未遇到过不知道该如何快速回滚,还得重新拉分支. 重新走流程. (未使用过公司提供的快速回滚功能),此时已经是10.30了。
10.10就开始影响到另外一个核心业务了。
10.30,我介入对服务进行了回滚,2分钟后,回滚完成,但是CPU迟迟下不来。
确定问题可能不是这里引起的,由于RDS CPU100,一时间也找不到源头在哪里。(如果第一时间联系DBA,当时可以避免这个问题)
随后用户反馈,很卡,他们正在李佳琦直播间搞活动。要求快速解决一下。
10.50,活动进入尾声,RDS CPU开始下降。
检讨
- 日常问题
- 流程激增的时候没有主动通知,不能主动感知流量激增。
- 日常培训不足,发布系统功能不了解,遇到问题不能使用已有的手段去解决。
- 开发同学响应不足,知道就知道,不知道就不知道,已读未回,5分钟后说不知道是不可以的。
- SQL日常水位较高,平时的优化没有持续进行。
- 应急情况响应机制不足
- RDS 100的情况下,查看SQL并未发现慢SQL,此时应该呼叫DBA介入。
- 项目缺乏限流机制,无法对多应用进行多维度限流。
如何应对
- 日常问题
- 新增流量监控,如果每秒超过3000条订单写入,进行预警。
- 针对新同学做工具、技能培训,出现问题能够合理的利用已有工具解决。
- 此处属于态度问题。
- 日常SQL需要优化
- 添加索引: 解决慢sql
- 使用缓存: 降低SQL TPS
- 索引优化
- 解决慢sql后,需要对sql的索引进行管理优化,避免出现索引容量大于RDS表容量的情况
- 引入限流机制,从多个方面维持应用的可用性
- 应急响应
- 建立应急响应机制。
- 如果自己解决不了,应该及时呼叫相关同学介入。
- 如果定位到问题,短时间内解决不了,应该联系同学回滚。