记一次线上DB被打挂
这周刚新上了需求,在慢慢写代码的时候,突然报警群的消息多了,组长让我看看咋回事。
一开始没当回事,因为faas任务的错误日志一直很多,但是发现新的日志和以前大不相同,显示的是上游faas实例的连接被mesh拒绝。
我也没啥好办法,只能先去看看实例数量,再看看DB的QPS。
监控DB单实例QPS才3K多,平时刷数据一直这个量,所以我就觉得没问题 。
又看了看DB的CPU和io吞吐,也没到高水位,那想必不是DB问题,我就截了个日志图丢小群里继续写代码,毕竟faas任务也不是我管的(笑)。
后来faas任务的错误日志越来越多,终于吃饭时候主机房DB挂了,这会大家都急了,直接拉DBA,一看DB实例代理的CPU已经完全打满,连接数触目惊心,我才发现原来我司每台DB的端口都是有代理的。
然后DBA重启代理+扩容,终于恢复了主机房可用性。因为我们的faas任务横跨两个库,另一个大团队的通用库也打挂了,导致一小段时间整个业务写请求全部受到影响,但是幸好日常写请求不多,而且异地机房的从库很正常,所以大家也没发现。
最后小群里归因复盘,主要原因有几个:1.当天其他部门上游产出的领域事件比日常多很多,导致下午都没有消费完,平时只限于早上的高峰,问题暴露不明显;2.鸡架的领域事件设了无限重试,导致消费失败后的毫秒级重试,最后引起雪崩。这个最后是关闭重试,因为相关数据状态第二天数仓也会做同步,所以影响业务不大;3.那天调整了数据库连接池,将线程使用连接后放回连接池的时间延长了六倍,导致不得不重复创建连接,最后把代理打满;4.鸡架的限流设置并没有什么用,上游限流值设置完全失效;5.当天其他部门产出了重复的领域事件,为此当天还产生了数据库死锁的问题
所以如何解决问题,说实在作为一个组内地位最低的搬砖仔我也没啥好办法,感觉这就是管理和架构设计问题。
我们用的faas动态扩缩容,通过触发器实现消费,可以说是较多实例和较小QPS的方式,最后来批处理大量的数据,这种和传统批处理比有优有劣。
显而易见的坏处就是多实例可能会同时创建大量的连接,而不是选择复用连接,资源占用的高峰和低谷都很明显。
靠触发器而不是定时任务,以后会随着需求越来越多,占用资源的峰谷更加不稳定,带来更大的问题。
然后就是不好管理,如果鸡架稳定性不行,新创建的实例可能在每次初始化的时候都会有问题,这点不如单独部署若干台机器长期待机。
关于数据库死锁也提一嘴,批处理的时候尽量避免事务和同时更新同一行数据,如果要用事务也要尽量把同时更新的数据切小,不要同时锁住大量的行。
大厂的隔离级别一般都是读已提交,这种情况下MVCC依然有效,只是没有了间隙锁,读也是当前读,只要不是同时更新相同的大批量行问题还是不大的。
记一次线上DB被打挂的更多相关文章
- 记一次线上bug排查-quartz线程调度相关
记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...
- 解Bug之路-记一次线上请求偶尔变慢的排查
解Bug之路-记一次线上请求偶尔变慢的排查 前言 最近解决了个比较棘手的问题,由于排查过程挺有意思,于是就以此为素材写出了本篇文章. Bug现场 这是一个偶发的性能问题.在每天几百万比交易请求中,平均 ...
- 记一次线上MySQL数据库死锁问题
最近线上项目报了一个MySQL死锁(DealLock)错误,虽说对业务上是没有什么影响的,由于自己对数据库锁这块了解不是很多,之前也没怎么的在线上碰到过.这次刚好遇到了,便在此记录一下 ...
- 记一次线上Curator使用过程JVM栈溢出解决
为了同学们看起来一目了,特按如下思路进行讲解. 1.出现的场景 2.分析及解决的过程 3.总结 最近公司要使用zookeeper做配置管理(后面简称ZK),然后自己就提前用虚拟机进行 ...
- 记一次线上coredump事故
1.事故背景 上周三凌晨,我负责的某个模块在多台机器上连续发生coredump,幸好发生在业务低峰期,而且该模块提供的功能也不是核心流程功能,所以对线上业务影响比较小.发生coredump后,运维收到 ...
- 记一次线上事故的JVM内存学习
今天线上的hadoop集群崩溃了,现象是namenode一直在GC,长时间无法正常服务.最后运维大神各种倒腾内存,GC稳定后,服务正常.虽说全程在打酱油,但是也跟着学习不少的东西. 第一个问题:为什么 ...
- 记一次线上gc调优的过程
近期公司运营同学经常表示线上我们一个后台管理系统运行特别慢,而且经常出现504超时的情况.对于这种情况我们本能的认为可能是代码有性能问题,可能有死循环或者是数据库调用次数过多导致接口运行 ...
- 记一次线上Kafka消息堆积踩坑总结
2018年05月31日 13:26:59 xiaoguozi0218 阅读数:2018更多 个人分类: 大数据 年后上线的系统,与其他业务系统的通信方式采用了第三代消息系统中间件Kafka.由于是 ...
- 记一次线上由nginx upstream keepalive与http协议"协作"引起的接口报错率飙高事件
年前接到个任务,说要解决线上一些手机客户端接口报错率很高的问题.拿到了监控邮件,粗略一看,各种50%+的错误率,简直触目惊心.这种疑难杂症解决起来还是挺好玩的,于是撸起袖子action. 最终的结果虽 ...
- 记一次线上dubbo服务超时和线程池满问题排查
线上某dubbo服务A调用dubbo服务B的接口X方法,调用端A日志中出现了很多超时的情况,提供端B该接口X超时时间设置为60s: 查看提供端B的日志,报了很多线程池满的异常: Caused by: ...
随机推荐
- py09函数简介
函数的返回值 # def func():# return 'asfjsfda'# res = func()# print(res) # 函数内要想返回给调用者值 必须用关键字return"& ...
- ctp认证权限
现象: /sys/firmware/dmi/tables/smbios_entry_point: Permission denied/dev/mem: Permission denied/sys/fi ...
- IIS添加MIME类型实现未知文件下载
application/octet-stream 无需重启
- Npoi.Mapper 日期转换
问题:Excel文档里有一些列是日期类型的数据,使用Mapper默认的转换,发现生成的实体,在有的系统环境下能正常转换,但是在有的系统环境下,转换的日期出现中文. 猜想是Excel文档里,日期列的单元 ...
- call bind的实现以及数组常用方法
1.call 实现(apply 类似) Function.prototype.call= function(context){ context = context || window; ...
- h5:vue3 + ts + vite + vuex + axios + vant4 + scss + postcss+mockjs+element-plus
模板地址:https://gitee.com/zhang_meng_lei/mobile-template-h5-vue3/tree/master 1.安装element-plus:yarn add ...
- 记录坑:Chrome谷歌浏览器最小化和页面遮挡后JS代码不稳定
问题:用定时器 setInterval()做个滚动通知的动画,浏览器最小化时,定时器 setInterval()失效了,导致滚动条重叠了 可能原因: js代码不稳定 Chrome谷歌浏览器最小化和页面 ...
- Github快速访问
Github快速访问 1. 国内访问github慢 github是国外网站,用国内的网络很难访问到,也就无法使用github,作为程序猿的我们,无法使用github可太难受了,那么我们有什么办 ...
- tomcat 3 - 默认连接器
Tomcat 中使用的容器连接器必须满足以下要求: 实现 org.apache.catalina.Connector 接口 负责创建实现了 org.apache.catalina.Request 接口 ...
- el-dialog 嵌套子组件数据不刷新
<!-- 展示通道测量值 --> <el-dialog :title="analogTitle" :visible.sync="analogOp ...