# 《并发设计模式》第12章-保护性暂挂模式-基于护性暂挂模式实现监控报警系统

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:掌握保护性暂挂模式的使用场景,理解保护性暂挂模式的核心原理与实现方式,掌握保护性暂挂模式在监控报警系统中的实际应用,并能够结合自身实际业务场景将保护性暂挂模式灵活应用到自身实际项目中。

大家好,我是冰河~~

在互联网项目中,一般都会有专门的监控系统来监控业务服务器的运行情况,比如监控服务器的CPU、内存、磁盘、IO等,一旦使用率超过阈值,就会触发报警。在这种架构模式下的监控系统中,会有专门部署在业务服务器上的监控探针,会有专门的监控中心,监控探针检测到业务服务器的CPU、内存、磁盘和IO等超过了设置的阈值,就会向监控中心发送报警消息。

# 一、故事背景

小菜学完保护性暂挂模式之后,在老王的指导下,基于保护性暂挂模式对交易系统进行了优化。但是,对于勤奋好学的小菜来说,想更进一步了解保护性暂挂模式在实际业务场景下的应用。于是,小菜便向老王进一步请教保护性暂挂模式在实际项目中的应用。对于老王这个大好人来说,那肯定是有求必应,耐心的为小菜进行讲解。

# 二、探求真相

虽然小菜在老王的指导下,基于保护性暂挂模式对交易系统进行了优化,但是小菜一直在思考着一个问题:保护性暂挂模式除了在交易系统中可以使用外,还能在哪些场景使用呢?有没有更典型的场景呢?在其他的项目中,保护性暂挂模式是怎么使用的呢?这几个问题一直在小菜的脑海中挥之不去,甚至达到了茶不思饭不想的地步(小菜是真特么好学)。

实在是想不出来了,于是,小菜又开始请教老王了:“老大,保护性暂挂模式还有其他的应用场景吗?我感觉交易系统的这个场景不够明显,可以给我讲讲其他的应用场景吗?”。

“可以”,老王回应道。

“其实,对于保护性暂挂模式来说,一个很典型的使用场景就是在监控系统中的应用,当服务器的CPU、内存、磁盘和IO使用率达到阈值时,就会向监控中心发送告警消息。如果发送告警消息时,不满足条件,比如监控探针与监控中心之前的连接未建立时,则阻塞等待,当连接建立完成时,也就是满足条件时,则唤醒被阻塞的线程,继续发送监控告警消息。如果发送告警消息时,满足条件,比如监控探针与监控中心之间已经建立连接,则直接发送告警消息。这就是典型的保护性暂挂模式的使用场景,这么说明白吗?”,老王问小菜。

“额,不太明白”,小菜回应道。

“好,那我给你细致的讲讲”,老王继续说道。

于是,老王便给小菜细致的讲起了保护性暂挂模式在监控系统中的应用。

# 三、监控设计

首先,来看看监控系统的总体设计,于是,老王便画了一张监控系统的总体设计图,如图12-1所示。


可以看到,在监控系统的总体架构设计中,会分为监控探针和监控中心系统,监控探针会部署到业务服务器,实时监控业务服务器的CPU、内存、磁盘和IO的使用情况,并且监控探针会与监控中心之间建立一个长连接,当检测到业务服务器的CPU、内存、磁盘和IO使用率超过阈值时,就会触发报警,向监控中心系统发送报警消息。

当监控探针满足发送消息的条件时,比如发送消息时,监控探针与监控中心系统之间已经建立连接,则直接向监控中心系统发送报警消息。

当监控探针不满足发送消息的条件时,比如发送消息时,监控探针与监控中心系统之间的连接还未建立成功,则监控探针发送报警消息的线程就会阻塞等待。当监控探针与监控中心系统之间的连接建立成功,也就是满足监控探针发送报警消息的条件时,唤醒监控探针阻塞等待的线程,继续向监控中心发送报警消息。

“结合图例能够理解监控系统基于保护性暂挂模式的总体设计吗?”,老王看了一眼眉头紧锁的小菜问道。

“嗯,结合图例可以听懂”,小菜点头回应道。

“好,我们再来看看从代码层面如何进行设计”,老王继续说。

“好的”,小菜回应道。

于是,老王又从代码设计层面为小菜进行讲解。

# 四、代码设计

对于监控系统来说,为方便小菜更好的理解保护性暂挂模式在监控系统中的应用,老王为小菜模拟实现了一个简易版的监控系统,并为小菜讲解了代码的设计和实现。

模拟实现的监控系统的代码架构设计如图12-2所示。


画完这张图老王对小菜说:“这张类结构图能够看懂吧?”。

“嗯,这张图可以看懂”。

# 查看全文

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码