记一次线上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: ...
随机推荐
- Oracle虚拟机与主机共享设置
VM中linux与主机的文件共享 1.打开 Oracle VM VirtualBox 点击 [控制] [设置] [数据空间] 添加你所希望共享的文件夹
- 怎么在CAD表格中画斜线?CAD表格斜线一分为二绘制步骤
在Excel表格中经常能看到用一条斜线将单元格一分为二,那么,你知道怎么在CAD表格中画斜线吗?本文小编就以浩辰CAD软件为例来给大家分享一下CAD表格斜线一分为二的绘制步骤,一起来看看吧! CAD表 ...
- css 特殊性 权重排列
首先类似于二进制的理解. 0010大于0001. id = 0,1,0,0; class, [属性值],:伪类 = 0,0,1,0: <元素>,伪元素 = 0,0,0,1: 伪元素: : ...
- Win10使用打印机0x0000011b错误 如何处理(没有KB5005565补丁如何解决??)
1.排查问题 win10连接打印机共享错误显示0x0000011b怎么解决?很多用户在更新了windows系统的最新补丁后,突然发现自己打开打印机的时候提示"无法连接到打印机,错误为0x00 ...
- Java中的左移、右移详细分析
转自csdn--https://blog.csdn.net/weixin_42408447/article/details/125914449 前提:<<(左移),>>(右移) ...
- linux-添加磁盘-MBR分区-挂载
[root@localhost ~]# lsblk 查看当前磁盘 [root@localhost ~]# fdisk /dev/sdb 磁盘分区 所有的硬件都在/dev下面存放 欢迎使用 fdisk ...
- Maxim遍历测试工具(monkey升级版)
Maxim 对应GitHub地址:https://github.com/zhangzhao4444/Maxim,其是对Android monkey的改进工具.是基于遍历规则和高性能要求. 条件准备: ...
- centos7 部署 DNS 主从
centos7 部署 DNS 主从 环境 名称 ip地址 cpu 内存 yz-dns-master 10.148.100.81 4c 8G yz-dns-slave 10.148.100.82 4c ...
- vue仿QQ聊天室|vue聊天实例,直播聊天室
图片压缩 百亿站点 基于vue2.0+vue-cli+vuex+vue-router+webpack+es6+wcPop等技术开发的仿微信聊天界面|仿微信聊天室vue-chatRoom,实现了微信聊天 ...
- 【MYSQL】group_concat长度问题分析
今天在生产环境发现一个ArrayIndexOutOfBounds的问题,经过排查,发现是group_concat拼接的字符串太长,超过了1024,导致报错. 我们可以通过 : SET [SESSION ...