【发布时间】:2014-03-18 03:26:43
【问题描述】:
我目前正在开发一个系统,该系统大量使用 redis 来提供一系列 Web 服务。
该系统的关键标准之一是快速响应。
目前布局(忽略负载均衡器等)如下:
- 2 个前端播放框架 2.x 服务器
- 2 个作业处理/持久性播放框架 2.x 服务器
- 1 x MySQL 服务器
- 2 x Redis 服务器,1 个主服务器,1 个从属服务器
在此设置中,redis 提供 2 个任务 - 作为共享缓存和消息总线。
目前,前端服务器托管一个与 Redis 完全交互的服务。
前端服务器尝试在读取服务器池(当前是主服务器和 1 个从服务器)之间平衡读取,但作为 Redis,它们需要向主服务器进行写入。他们通过在队列上发送消息来处理缓存更新等,这些消息由作业处理服务器接收。
作业处理服务器对 Redis 写入服务器进行阻塞侦听 (BLPOP),并在必要时处理任务。它们与 MySQL 有唯一的连接。
目前,只读副本服务器是专用服务器 - 如果当前主服务器出现故障,则可以将其切换为写入主服务器。
我正在考虑在每个前端服务器上放置一个 redis 的读取副本从属服务器,这意味着读取延迟会更短,并且写入(队列的消息)会通过单独的连接推送到写入服务器。
如果我需要扩展,我可以添加更多带有读取从属服务器的前端服务器。
这对我来说听起来像是双赢,因为即使写入服务器暂时退出,前端服务器仍然可以至少从其本地从属服务器读取数据并采取相应措施。
谁能想到这可能不是一个好主意的原因?
【问题讨论】:
标签: redis scalability