一次go协程不够的线上问题

2023-08-07  本文已影响0人  鸿雁长飞光不度

1. 事故产生:

昨天晚上线上出现了一次事故,payment服务瞬间收到了大量的退款请求,是上游业务方执行批量脚本引起的,payment收到退款请求以后发送异步消息,payment自己会消费这个异步消息,在消费的过程中会用grpc请求调用tpw服务发起退款,但是tpw服务的因为数据库配置不高,并且请求qps过大,峰值达到了500qps,导致payment的退款异步消息处理超时,进入了死信队列,同时因为payment异步消息处理超时,导致goroutine被阻塞了,同时也影响到了其他的异步任务的执行。

2. 反思和改进:

2.1 限流

缺乏合理的限流策略

2.2 队列

2.3 监控报警

此前已经基于日志配置了消息消费监控,能够清楚的观察到消息的消费速度、平均耗时,正是基于已有的监控迅速定位了具体耗时的消息类型。

上一篇下一篇

猜你喜欢

热点阅读