2023的线上事故复盘总结(OOM,数据库崩溃)持续更新中~
项目场景:
智慧门禁系统,公司研制的一个saas系统,基于Springcloud框架,主要是面向高校对老师学生的通行方式做统一的管理,可通过卡、码、脸等多种方式进出,可实现不同人员进出不同的场所,例如宿管人员不可进入图书馆。
在此也告诫我们,coding其实很简单,但是要考虑接口对数据库中间介的影响和接口可支持的并发量,你无法预测项目未来的用户量。
问题1: 项目OOM
有一场景是通过门禁系统对面板机进行下发人脸,项目OOM。
原因分析:
低级问题,进行数据下发,设备要求执行的协议是进行下发照片base64数据,想当然的对照片批量进行转换Base64(OOM)List体过大。
解决方案:
改为for循环,一张张照片转换下发,下发完成及时清理。
问题2: 项目OOM
有一场景是通过门禁系统对面板机进行下发人脸,后续调用业务系统OOM。
原因分析:
iot系统进行统一合并至物联网关后,业务线进行统一下发物联网关,不允许直接对接操作设备,由于同步人脸数量过多,整个学校的人员,大概两万多张。哈哈哈哈哈~并发过高,大量的Base64流打过去,物联网关系统down了。
解决方案:
1. 网关增加限流处理。
2. 由于图片是从阿里云取的,改为传递url,但是要注意图片有效期
问题3: mq疯狂堆积
有一场景是通过门禁系统对面板机进行下发人脸,发送mq进行异步处理,然后自消费下发到设备,线上mq疯狂堆积和重试,对公司所有业务线都造成了严重影响。
原因分析:
我特喵~我也是接盘的。
1. 发送mq没有考虑过这种场景是否适合使用mq,下发2w个人脸,直接mq怼怼怼了两万条进去,其中信息中还包含着base64流,一张照片1M算的话,2w张照片*设备数量,诸位自行体会mq的磁盘占有量。
2.没有考虑超时未回复ack的情况,在频繁重试。
3.异常处理不到位,对业务异常和代码异常都进行重试处理,如果是业务异常,照片不符合规范重试也没用。
解决方案:
1. 临时紧急发版,消费代码全部删除,全部进行消费。
2. 取消mq的使用,考虑下发人脸的场景既不涉及支付又无关痛痒,改为异步线程处理,LIst中含两万个名单,本身对内存占有率影响不大。
问题4: 数据库拖死
设备会实时的进行通行记录的上传,某某某同学通过哪个设备进入了哪里,由于校方有台设备长期处于离线过程中,某一天它突然上线了,开启离线上传,可谓是一瞬间怼过来了8w条数据,由于整个公司的业务线都是一个数据库上,导致其它业务线都受影响。
原因分析:
我特喵~我也是接盘的~也是之前哥们给我留的小惊喜
1. 主要还是接口的并发量过高。
2. 接收通行记录后,推送了一个大屏,没有人连接大屏的socket,也进行推送了,推送的代码中查询了通行记录这张表,这张表的数据量已经超级多了,也相当于查询了8w次,大批量慢sql。
解决方案:
1. 接口增加限流处理。
2. 项目问题太多了,影响到其它业务线了,把我们撵出来了....单独购买了一个数据库。
3. 不是当日的数据,不进行推送,无人连接socket,不进行推送。
4. 通行记录表索引优化。
复盘总结:
问题还有很多,正在整理过程中。
1.? 在coding过程中,一定要做好代码评审环节。
2.? 及时发现问题,钉钉告警群等,出问题第一时间知道,而不是用户反馈。
3.? 运维工具要跟上,比如实时接口限流工具,出现问题接口直接阻断,进行流量打入。
4.? 编码的性能和优化最终还是落在了我们mysql上,前期一定要规划好索引,查询语句要规划好,后期真的欲哭无泪。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!