一,背景描述
某个系统提供并发百万级的用户实时在线业务,部署了几十台接入服务器,十几台业务处理服务器。
由于历史原因,都是手动配置这些服务器,除了能够监控到这些服务器的网络,带宽,磁盘,内存
等硬件设备信息外,对于每个服务器应用程序的内部状态信息,程序的统计信息无法采集,导致只能通过
外围的一些信息去判断评估问题所在,不准确,耗时耗力,很痛苦。
为了准确监控每个服务器的内部状态,而且也不影响现有业务逻辑的情况,需要快速部署一个简单的
服务器集中监控系统。经过考虑,可以使用Redis的Pub/Sub功能来实现一个监控系统是非常好合适的。
二,解决方案
1,关于Redis的Pub/Sub机制
Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值
进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能
可以用作实时消息系统。
2,系统结构
3,主要流程
3.1 应用服务器的初始化
- 所有应用服务器作为Redis的Client连接到Redis服务器,保持长连接。
- 每个应用服务器都会配置一个全局唯一的ServerID,每个应用服务器都会发布两个Channel,一个是状态的channel,名称为ServerID_State,另外一个是统计信息的 Channel,名称为ServerID_Statistic。
- 每个应用服务器也同时订阅一个属于自己的管理Channel,名字为ServerID_Manage,用于接收来自监控服务器的管理消息。
- 相应的Redis协议消息举例如下:
- PUBLISH AppSvr1_State "Server[AppSvr1] Keep-Alive"
- PUBLISH AppSvr1_Statistic "Online Server[AppSvr1] user total[10000], Calling user total[100]"
- SUBSCRIBE AppSvr1_Manage
3.2 监控服务器的初始化
- 监控服务器会订阅所有应用服务器的Channel,接收这些服务器的所有状态信息和统计信息,并且也可以通过ServerID_Manage
- 监控服务器的Redis协议消息举例如下:
- PSUBSCRIBE AppSvr*_State
- PSUBSCRIBE AppSvr*_Statistic
3.3 监控服务器收到的状态和统计消息举例如下:
- MESSAGE "Server[AppSvr1] Keep-Alive"
- MESSAGE "Online Server[AppSvr1] user total[10000], Calling user total[100]"
3.4 监控服务器可以向各应用服务器发布管理指令,比如重启,重新reload配置文件等等。
- 监控服务器向AppSvr1发出服务器重启命令
- PUBLISH AppSvr1_Manage “command=restart”
- 应用服务器收到后,执行重启过程,并向监控服务器报告自己的最新状态
- PUBLISH AppSvr1_State Server[AppSvr1] stop
- 应用服务器重启完毕后,会向监控服务器发布新状态
- PUBLISH AppSvr1_State Server[AppSvr1] startup
- 监控服务器先后收到的消息如下:
- MESSAGE Server[AppSvr1] stop
- MESSAGE Server[AppSvr1] startup
- MESSAGE Server[AppSvr1] Keep-Alive
3.5 通过WEB实时获取指定应用服务器的内部统计信息流程
- 收到WEB请求后通过phpredis发送如下消息
- PUBLISH AppSvr1_Manage command=get_user_online_stat
- 应用服务器收到该消息后,向phpredis的客户端发布对应的统计信息
- PUBLISH AppSvr1_Statistic Server[AppSvr1] online user total[10000]
三,方案总结
该方案不但实现了监控服务器对各应用服务器的状态监控和统计数据采集,而且通过双向订阅通道,也实现了向各应用服务器发起简单的管理维护命令。
基于该方案还可以深入开发更丰富的功能。
相关推荐
Redis是一种高性能的键值对数据存储系统,常用于缓存、数据库和消息中间件等场景。本学习笔记基于GitHub上的项目“Redis-stud”,由JiangRRRen分享,旨在深入理解Redis的设计与实现原理。 一、Redis概述 Redis是...
以上是对Redis入门实践PPT中的核心知识点进行了详细解析。通过这些知识点的学习,可以帮助初学者更好地理解Redis的基本概念、安装配置过程、主从配置方法、持久化机制以及常用命令等关键内容。对于进一步深入学习...
5. **发布订阅**:通过pub/sub模型,Redis实现了消息传递,允许客户端订阅特定频道,服务器端发布消息到这些频道。 安装Redis: 在多数Linux发行版上,可以通过包管理器安装Redis,例如在Ubuntu上使用`sudo apt-get...
2. **通知**:一旦发现某个实例出现问题,Sentinel会通过发布订阅(Pub/Sub)机制通知其他Sentinel以及应用客户端,让他们了解当前集群的状态变化。 3. **故障转移**:当主节点故障时,Sentinel会组织投票选举新的主...
此外,Redis还支持事务(Transactions)、发布订阅(Pub/Sub)、持久化(Persistence)等高级特性,这些都是开发高效数据存储解决方案的关键。 总结来说,Redis是一个强大的内存数据存储系统,适合多种应用场景,如...
5. **发布/订阅**:Redis的Pub/Sub(发布/订阅)模型允许客户端订阅特定的频道,当有消息发布到这些频道时,所有订阅者都会收到通知,实现解耦的消息传递。 6. ** GEO**:Redis 3.2引入了GEO(地理空间索引)功能,...
4. **发布/订阅**: Redis的Pub/Sub功能允许实现消息订阅与发布,是构建实时消息系统的重要组成部分。 5. **主从复制**: 通过复制技术,可以构建高可用的Redis集群,当主节点出现问题时,可以从一个或多个从节点中...
4. 发布订阅:Redis的pub/sub机制可以实现简单的消息传递,用于构建实时通信应用。 5. Lua脚本:Redis支持使用Lua编写脚本,实现更复杂的逻辑。 六、监控与优化 1. Redis监控:通过`info`命令查看服务器状态,包括...
- 客户端连接:使用`redis-cli`工具连接Redis服务器,进行测试或操作。 4. 使用Redis进行缓存: - 利用Redis的高效读写,可以将热点数据存储在内存中,减少对后端数据库的压力。 - 设置过期时间,自动清理不再...
4. Pub/Sub 消息队列:Redis 的 Pub/Sub 机制可以实现高效的消息队列,满足实时消息处理的需求。 Redis 的应用场景包括: 1. 缓存:Redis 可以作为缓存层,减少数据库的查询次数,提高系统的响应速度。 2. ...
4. **发布/订阅(Pub/Sub)模式**:Redis的发布/订阅功能允许客户端订阅特定频道,当有消息发布到这些频道时,订阅者会接收到消息,这一特性使其成为实现消息中间件的理想选择。 5. **主从复制**:Redis支持主从...
- 消息队列:通过`PUB/SUB`订阅发布机制实现简单消息传递。 7. 维护和监控: - 使用`INFO`命令获取服务器状态信息。 - 使用第三方工具如`redis-stat`、`RedisInsight`或集成到监控系统进行性能监控。 以上是...
这个主题涉及到Redis的订阅发布(Pub/Sub)模式和Keyspace Notifications功能。 1. Redis的订阅发布(Pub/Sub)模式: - **基本概念**:Pub/Sub是一种消息通信模型,允许发布者将消息发送到频道,而多个订阅者可以...
Redis是目前广泛应用于Web开发领域的高性能键值存储系统,尤其在缓存管理方面表现出色。在求职面试中,深入理解Redis及其应用场景对于成功获得技术岗位至关重要。以下是对Redis面试相关知识点的详细阐述: 1. Redis...
7. **消息订阅与发布**:Redis Pub/Sub 模块允许客户端订阅特定主题,发布者可以向这些主题发送消息,实现轻量级的消息队列功能。 接下来,关于“redis-desktop-manager-0.8.8.384.exe”文件,这是一个 Redis ...
- 发布/订阅:使用 PUB/SUB 实现消息推送,客户端可以订阅感兴趣的主题。 - LRU 策略:Redis 自带 LRU(Least Recently Used)淘汰策略,当内存不足时自动移除最不常用的数据。 - predis:对于 PHP 开发者,...
### 连接Redis服务器与基础命令实践 #### 连接到Redis服务器 在开始使用Redis之前,第一步通常是通过命令行工具`redis-cli`连接至Redis服务器。`redis-cli`作为Redis官方提供的命令行客户端,能够方便地执行各种...
3. 配置更新:当有配置更新时,配置中心通过修改Redis中的相应键值对,触发Pub/Sub机制,将更新通知到所有订阅的客户端。 4. 客户端接收:客户端接收到配置更新的通知后,会从Redis中拉取最新的配置信息并应用。 三...
2. **订阅/发布(Pub/Sub)**: Redis提供了一个简单的消息发布/订阅机制,可以实现进程间的通信。 3. **事务**: 虽然Redis的事务不如传统数据库那样强大,但仍然可以保证在一个操作序列中的所有命令要么全部成功,...