这样用技术,程序猿更幸福

作为久经职场而又富有责任心的猿外,每天上班的第一件事,便是连上生产服务器,top free ps 一顿命令热身猛如虎,然后汇总出业务服务的状态、系统指标等,看到一切正常,心里才算踏实。

不知道有多少尽职尽责的朋友们,每天都重复的做着如此机械而又简单的事情。说句实话,其实和机械狗没啥区别。本着做事认真、追求极致的态度,那我们为什么不能打造一款这样的机械狗呢?

关注过猿外的朋友们都应该知道,在之前的文章中,猿外曾经提到过,守护服务的监控应用——看门狗。不错,要打造的机械狗,就是看门狗

接下来就给大家简单聊一聊,看门狗的背景来源以及实现思路,希望能给正在寻找守护服务监控解决方案的朋友们,一点实现思路。下面的内容十分烧脑,请大家坐稳扶好。

1. 什么是看门狗?

在由单片机构成的微型计算机系统中,由于单片机的工作,常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,称“看门狗”——摘自“百度百科”。

相信有不少朋友,看到上面一段非人话的描述,就想直接删了此篇熊文,溜之大吉。大家,心莫慌,猿外再举个贴近生活的栗子解释一下。

猿外家养了一条 dog ,经常陪孩子玩,孩子时不时的撒一把狗粮给 dog;
如果孩子睡着,长时间未撒狗粮,dog 就主动把孩子叫醒;
继续让孩子撒狗粮,然后 dog 吃到孩子撒的狗粮,就高兴的狂吠;
如果 dog 跑走了,孩子也不撒狗粮了,孩子也就可以睡觉了。

剥开栗子,内行看门道,外行看热闹,把上面内容翻译一遍:

原话:猿外家养了一条 dog,经常陪孩子玩,孩子时不时的撒一把狗粮给 dog;
翻译:存在两个进程:子进程(应用服务)、父进程(守护进程),子进程和父进程两个进程间一直保持心跳通讯;

原话:如果孩子睡着,长时间未撒狗粮, dog 就主动把孩子叫醒;
翻译:子进程与父进程心跳通讯中断,父进程则负责启动子进程,完成子进程的服务守护;

原话:继续让孩子撒狗粮,然后 dog 吃到孩子撒的狗粮,就高兴的狂吠;
翻译:子进程与父进程实时通讯,父进程实时监控子进程的状态,并实时进行报警通知;

原话:如果 dog 跑走了,孩子也不撒狗粮了,孩子也就可以睡觉了。
翻译:父进程down了,子进程与父进程的通讯也就无法保持了,子进程也一并退出。

不知道朋友们通过上面的栗子剖析,对看门狗了解了多少呢?为了更清晰的给你们说清楚,猿外再给大家上个一目了然的图吧。

这样用技术,程序猿更幸福

如上图所示,猿外主要把看门狗定位为:集服务守护、指标采集、日志归集、自动化报警于一体的监控系统。说白了,有了看门狗,妈妈再也不用担心我的应用服务出问题了。

洋洋洒洒铺垫这么多,那到底该如何实现呢?

2. 如何实现?

猿外先给大家画个脑图,主要分五步走,希望朋友们跟着猿外的脚步,莫掉队。

这样用技术,程序猿更幸福

相信绝大部分朋友通过猿外的脑图,已经对看门狗应用了解个八九不离十。猿外再稍微阐述一下:

实现方式:看门狗应用在实现过程中也走了一些弯路。刚开始技术选型的时候,考虑到看门狗应该对应用零侵入、低耦合,于是采用javaagent植入方式进行实现,但是万万没想到的是开发、调试过程比较麻烦,一遇到问题,小伙伴就排查半天,在第一版上线后,猿外迅速带领小伙伴,采用插件化方式进行第二版迭代。

服务守护:采用 J2SE 1.5 java.lang 包中新添加的 ProcessBuilder 类来完成子进程的启动、停止、重启(完成子服务的守护功能)。

指标采集:通过 JMX 方式连接子服务,获取子服务的内存占用、CPU 使用、线程数等指标。

日志归集:主要站在 flume 的肩膀上,集成到项目中并进行二次开发,存储采用 elasticsearch。

报警通知:主要提供邮箱通知、QQ 通知、微信实时通知。

其中每个实现细节猿外就不再进行深入展开了,感兴趣的朋友欢迎关注微信公众号四猿外(si-yuanwai),后台留言进行交流。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdyfw.html