Redis 多机功能导论
从单台 Redis 服务器过渡至多台 Redis 服务器
问题
到目前为止,本课程介绍的所有内容都是以单机 Redis 为背景的,也即是,我们考虑的事情只和一台Redis 服务器有关。但是在生产环境中实际地使用 Redis 的时候,只使用一台 Redis 服务器一般来说是没办法满足我们的需求的,限制主要来自于两个方面:
- 内存容量不足:Redis 使用内存来储存数据库中的数据,但是对于一台机器来说,硬件的内存容量是有限的,当我们需要储存的数据量超过机器的内存容量时,一台服务器就没办法满足我们的要求了。
例子:要储存 128 GB 数据,但机器最大只支持 64 GB 内存;要储存 1 TB 数据,但机器最大只支持 128 GB 内存;诸如此类。
- 处理能力不足:和内存数量限制类似,因为服务器硬件的限制(包括机器配置和网 络资源等),一台服务器能够处理的命令请求数量也是有限的,当我 们需要处理的命令请求数量超过机器能够处理的命令请求数量时,一台服务器就没办法满足我们的要求了。
例子:每秒钟要处理 20 万次请求,但机器每秒钟只能处理 10 万次请求;每秒钟要处理 100 万次请求,但机器每秒钟只能处理 30 万次或者 50 万次请求;诸如此类。
解决方法
为了解决前面提到的内存容量不足和 处理能力不足的问题,我们需要使用 Redis 的多机功能,这些功能的核心目的是将整个数据 库分散部署到多台服务器上面,并使用多台服 务器来处理命令请求。
将系统从一台服务器扩展至三台服务器,系统储存的数据量和处理的命令请求数量都会有所提高。
具体实现
Redis 提供的多机功能包括:
- 复制(replication),扩展系统处理读请求的能力;
- Sentinel(哨兵),为系统提供高可用特性,减少故障停机出 现;
- 集群(cluster),扩展系统的数据库容量以及系统处理读写请求的能力,并提供高可用特性;
另外 Twitter 也开源了一个名为 twemproxy(也称 nutcracker)的代理服务器,它支持 Redis 和Memcached 协议,可以扩展系统的数据库容量以及系统处理读写请求的能力。