首页 > 其他分享 >记一次线上DB被打挂

记一次线上DB被打挂

时间:2022-11-19 00:34:02浏览次数:39  
标签:一次 DB 实例 线上 鸡架 QPS 日志 faas

这周刚新上了需求,在慢慢写代码的时候,突然报警群的消息多了,组长让我看看咋回事。

一开始没当回事,因为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,实例,线上,鸡架,QPS,日志,faas
From: https://www.cnblogs.com/cd4everyoung/p/16905305.html

相关文章

  • 记一次goby-poc的编写
    记一次goby-poc的编写......
  • InfluxDB(1):安装
    InfluxDB使用场景InfluxDB是一种时序数据库,时序数据库通常被用在监控场景,比如运维和IOT(物联网)领域。这类数据库旨在存储时序数据并实时处理它们。比如。我们可以写一个......
  • db2创建nickname
    参考:https://copyfuture.com/blogs-details/20201231224307473yhttps://blog.csdn.net/u013914485/article/details/38265129?utm_medium=distribute.pc_relevant.none-ta......
  • InfluxDB(2):行协议
    InfluxDB行协议认识InfluxDB行协议InfluxDB行协议是InfluxDB数据库独创的一种数据格式,它由纯文本构成,只要数据符合这种格式,就能使用InfluxDB的HTTPAPI将数据写......
  • ADB命令详解 - 获取android手机系统相关信息
    adb获取android手机系统版本,已对应的api版本和硬件相关信息:https://blog.csdn.net/l_vaule/article/details/79866396https://www.cnblogs.com/hyf20131113/p/11887981.h......
  • mysql导出 TIDB导入
    tiupdumpling-h10.10.14.229-P22066-uroot-p123456-t16-r200000-F256MiB-Btest_db-o's3://dsideal/HuangHai/TiDB?access-key=AK&secret-access-key=SK......
  • sqlserver查看每个活跃会话使用了多少TempDB
    ;WITHtask_space_usageAS(--SUMalloc/dellocpagesSELECTsession_id,request_id,SUM(internal_objects_alloc_page_count)ASa......
  • MySQL8.0新特性—InnoDB增强
    1.自增变量持久化在MySQL8.0之前的版本中,自增列计数器置于内存中,并不会持久化到磁盘,当数据库重启后,会根据selectmax(id)+1fromxxx重新计算当前自增列值,这种现象在某些......
  • GaussDB CN服务异常实例分析
    摘要:先通过OPS确认节点状态是否已经恢复,或登录后台执行cm_ctlquery-Cv确认集群是否已经Normal。本文分享自华为云社区《【实例状态】GaussDBCN服务异常》,作者:酷哥。确......
  • WPF 控制程序只能启动一次
    publicpartialclassApp:Application{System.Threading.Mutexmutex;publicApp(){this.Startup+=newStartupEventHan......