上篇文章:《记一次JVM Full GC 引发的线上故障,真是坑!》,给大家讲了一个线上系统因为JVM FullGC异常宕机的case。
这篇文章,我们继续给大家聊聊另外一个线上系统在生产环境遇到的问题。
一、背景介绍
背景情况是这样:线上一个系统,在某次高峰期间MQ中间件故障的情况下,触发了降级机制,结果降级机制触发之后运行了一小会儿,突然系统就完全卡死,无法响应任何请求。
给大家简单介绍一下这个系统的整体架构,这个系统简单来说就是有一个非常核心的行为,就是往MQ里写入数据,但是这个往MQ里写入的数据是非常核心及关键的,绝对不容许有丢失。
所以最初就设计了一个降级机制,如果一旦MQ中间件故障,那么这个系统立马就会把核心数据写入本地磁盘文件。
额外提一句,如果有同学不太清楚MQ中间件的概念,建议看一下之前发的一篇文章《做了几年开发,你知道自己的系统为什么要用消息中间件吗?》,先对MQ中间件这个东西做一个基本的了解。
但是如果说在高峰期并发量比较高的情况下,接收到一条数据立马同步写本地磁盘文件,这个性能绝对是极其差的,会导致系统自身的吞吐量瞬间大幅度下降,这个降级机制是绝对无法在生产环境运行的,因为自己就会被高并发请求压垮。
因此当时设计的时候,对降级机制进行了一番精心的设计。