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上,前期一定要规划好索引,查询语句要规划好,后期真的欲哭无泪。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ChatGPT生成i项目需求文档模板

前言 我们在工作中需要编写的技术文档有多种形式,包括Word、Excel、PDF及一些在线形式。我们可以借助ChatGPT生成文本,然而,它不能直接生成Word、Excel、PDF等格式的文档。因此,我们需要利用其他工具来帮助我们生成一些模板&…

三、计算机理论-关系数据库-数据库的完整性与安全性,事务管理、并发控制、数据库的备份与恢复

数据库完整性 完整性是为了防止合法用户在使用数据库时向数据库中加入不符合语义的数据 实体完整性 实体完整性约束时通过主码的定义来实现的,使用PRIMARY KEY来定义,对于单个属性的主码可以使用列级完整性约束,若主码是一个属性组&#xff…

golang如何生成csv文件

在Go语言中,可以使用标准库中的"encoding/csv"包来生成CSV文件。下面是一个简单的示例代码,演示如何使用Go生成CSV文件: package mainimport ("encoding/csv""os" )func main() {// 创建一个新的CSV文件file,…

EtherCAT主站SOEM -- 14 --Qt-Soem通过界面采集从站IO进行显示

EtherCAT主站SOEM -- 14 --Qt-Soem通过界面采集从站IO进行显示 一 mainwindow.c 文件函数:1.1 自定义PDO配置1.2 主站初始化二 motrorcontrol.c 文件三 allvalue.h 文件该文档修改记录:总结一 mainwindow.c 文件函数: 1.1 自定义PDO配置 int IO_setup(uint16 slave) {int

YoloV7使用detect.py检测,结果图片不显示框

detect.py里画框部分默认是屏蔽的,需要自己打开。下图红框里屏蔽部分打开后,就显示框了。

QT上位机开发(日志调试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 程序开发中有很多的调试方法,比如说IDE调试,也就是设置断点、查看变量等等;比如说日志调试;比如说c…

PDF控件Spire.PDF for .NET【安全】演示:获取并验证 PDF 中的数字签名

在 PDF 中创建数字签名广泛用于保护 PDF 文件。因此,当您查看一些带有数字签名的PDF文件时,需要获取并验证数字签名。本文向您展示了一种通过使用Spire.PDF和 C# 代码来获取和验证 PDF 中的数字签名的解决方案。 Spire.PDF for .NET 是一款独立 PDF 控件…

【Linux】常用的基本命令指令①

前言:从今天开始,我们逐步的学习Linux中的内容,和一些网络的基本概念,各位一起努力呐! 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 💯代码…

CLIP is Also an Efficient Segmenter

表1 复现结果–Seed:70.7245673447014,dCRF:74.85437742935268 误差小于0.5个点,可以接受 表4 复现结果–训练300轮,Val:58.76741354153312,Test:59.18210 感想 VOC全部复现完成&…

基于SpringBoot的校园外卖服务系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的校园外卖服务系统,java…

小白入门基础 - tomcat

一:前言 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为&#x…

xxxView

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

【INTEL(ALTERA)】生产中使用多个目标设备,如何满足外部内存接口Intel Agilex® 7偏移匹配准则?

说明 对于外部内存接口Intel Agilex 7使用的引脚,不同的引脚兼容设备可能会有不同的封装延迟。如果您遵循《外部内存接口用户指南》中的“偏移匹配指南”部分所述的要求,您可能会发现无法同时满足多个器件的要求。用户指南仅适用于您计划在开发阶段使用…

【SpringBoot+dubbo+zk】实现服务之间rpc通信

0)前置准备&#xff0c;我们使用zk作为注册中心&#xff0c;先启动zk&#xff0c;也就是2181端口。 1)父工程pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http…

【软件测试】概述

《软件缺陷》 定义 &#xff08;从产品内部看&#xff09;软件产品开发或维护过程中存在的错误、毛病等各种问题&#xff08;从产品外部看&#xff09;系统所需要实现的某种功能的失效或违背 表现形式(1) 软件没有实现产品规格说明所要求的功能模块(2) 软件中出现了产品规格说…

SpringBoot2.7升级项目到Springboot3踩坑指南

文章目录 概要国内顶级开源项目升级情况适配SpringBoot3指南技术细节小结 概要 由于SpringBoot3.x全面拥抱JDK17,兼容jdk21&#xff0c;jdk17乃是大势所趋。这里是从SpringBoot2.7-->SpringBoot3.1踩坑指南。 提前阅读&#xff1a;jdk8升级JDK17避坑指南&#xff08;适用于…

Transformer-MM-Explainability

two modalities are separated by the [SEP] token&#xff0c;the numbers in each attention module represent the Eq. number. E h _h h​ is the mean&#xff0c; ∇ \nabla ∇A : ∂ y t ∂ A {∂y_t}\over∂A ∂A∂yt​​for y t y_t yt​ which is the model’s out…

写字母(文件)

请编写函数&#xff0c;将大写字母写入文件中。 函数原型 void WriteLetter(FILE *f, int n);说明&#xff1a;参数 f 为文件指针&#xff0c;n 为字母数目(1 ≤ n ≤ 26)。函数将前 n 个大写英文字母写入 f 所指示的文件中。 裁判程序 #include <stdio.h> #include &…

书生·浦语大模型实战营 Lesson 1

书生浦语大模型全链路开源体系 书生浦语大模型开源历程 书生浦语大模型系列 从模型到应用 数据 预训练 微调 部署

Raect中自定义hook

一、自定义Hook 自定义Hook&#xff1a;将一些常用的、跨越多个组件的Hook功能&#xff0c;抽离出去形成一个函数&#xff0c;该函数就是自定义Hook&#xff0c;自定义Hook&#xff0c;由于其内部需要使用Hook功能&#xff0c;所以它本身也需要按照Hook的规则实现&#xff1a;…