通过Redis的Pub/Sub实现对服务器群的监控管理
需求:
为了准确监控每个服务器的内部状态,而且也不影响现有业务逻辑的情况,需要快速部署一个简单的服务器集中监控系统。经过考虑,可以使用Redis的Pub/Sub功能来实现一个监控系统是非常好合适的。当然我们也可以通这个来做批量的管理。
Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能可以用作实时消息系统。
发布和订阅机制
当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher)。
而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE 命令接收信息的时候,我们称这个客户端为订阅者(subscriber)。
为了解耦发布者(publisher)和订阅者(subscriber)之间的关系,Redis 使用了 channel (频道)作为两者的中介 —— 发布者将信息直接发布给 channel ,而 channel 负责将信息发送给适当的订阅者,发布者和订阅者之间没有相互关系,也不知道对方的存在
下面这个图适合批量管理,每个客户端的服务器都要有个redis-cli ,安装redis自然就有了,然后定义sub ,在管理端就可以通过pub发布一些个指令,客户端收到后,可以执行,也可以做些相应别的操作。
下面这个适合监控,把自己的业务指标pub过去,服务端可以进行相应的处理, 可以是写到mysql里面,可以是和页面进行交互。
其实说白了,用socket也是可以实现的,但是redis已经是较成熟的产品,内部实现采用epoll封装,有多路复用特性,非阻塞IO,而且绝大部分请求是纯粹的内存操作。有这些个特性,咱们没必要还费劲给socket写个并发异步的重构,逼近太麻烦了。
那咱们现在就搞吧~
这个是订阅者
这个是发布者