Redis- 生产架构选型解决方案,java 开发架构师
新增日志管理功能,支持审计日志、运行日志和慢日志,您可以通过日志管理查询读写操作、敏感操作(如 KEYS、FLUSHALL)和管理类命令的使用记录以及慢日志。
新增基于快照的缓存分析功能。
新的定时器(Timers)、集群( Cluster)和字典(Dictionary)模块的 API。
RDB 中增加 LFU 和 LRU 信息。
集群管理器从 Ruby (redis-trib.rb)移植到了 redis-cli 中的 C 语言代码。
新增有序集合(Sorted Set)命令 ZPOPMIN、ZPOPMAX、BZPOPMIN 和 BZPOPMAX。
升级 Active Defragmentation 至 v2 版本。
增强 HyperLogLog 的实现。
优化内存统计报告。
为许多有子命令的命令增加了 HELP 子命令。
提高了客户端频繁连接和断开连接时的性能表现。
升级 Jemalloc 至 5.1 版本。
新增命令 CLIENT ID 和 CLIENT UNBLOCK。
新增了为艺术而生的 LOLWUT 命令。
弃用 slave 术语(需要 API 向后兼容的情况例外)。
对网络层进行了多处优化。
进行了一些 Lua 相关的改进。
新增动态 HZ(Dynamic HZ)以平衡空闲 CPU 使用率和响应性。
对 Redis 核心代码进行了重构并在许多方面进行了改进。
##二 架构您需要根据业务需求选择:
集群架构可轻松突破 Redis 自身单线程瓶颈,满足大
容量、高性能的业务需求。
主从架构,提供高性能的缓存服务和数据高可靠。
读写分离架构提供高可用、高性能、高灵活的读写分离服务,解决热点数据集中及高并发读取的业务需求,最大化地节约用户运维成本。
##2.1 主从架构-双副本采用主从(master-replica)模式搭建。主节点提供日常服务访问,备节点提供 HA 高可用,当主节点发生故障,系统会自动在 30 秒内切换至备节点,保证业务平稳运行。
可靠性
服务可靠采用双机主从(master-replica)架构,主从节点位于不同物理机。主节点对外提供访问,用户可通过 Redis 命令行和通用客户端进行数据的增删改查操作。当主节点出现故障,HA 系统会自动进行主从切换,保证业务平稳运行。
数据可靠默认开启数据持久化功能,数据全部落盘。支持数据备份功能,用户可以针对备份集回滚实例或者克隆实例,有效地解决数据误操作等问题。
使用场景
Redis 作为持久化数据存储使用的业务标准版提供持久化机制及备份恢复机制,极大地保证数据可靠性。
单个 Redis 性能压力可控的业务由于 Redis 原生采用单线程机制,性能在 10 万 QPS 以下的业务建议使用。如果需要更高的性能要求,请选用集群版本。
Redis 命令相对简单,排序、计算类命令较少的业务由于 Redis 的单线程机制,CPU 会成为主要瓶颈。如排序、计算类较多的业务建议选用集群版配置。
##2.2 主从架构-单副本
可以在没有数据可靠性要求的纯缓存场景充分发挥性能优势。
使用场景
纯缓存类业务场景
单副本版本只有一个数据库节点,节点出现故障时,系统会重新拉起一个 Redis 进程(没有数据),当节点故障业务自动切换完成后,应用程序需要将数据重新预热,以免对后端数据库产生访问压力冲击。单副本架构不能提供数据可靠性,如果发生节点故障,您需要重新对业务进行预热,因此,在对数据可靠性要求较高的敏感性业务中,建议选用双副本架构。
单个 Redis 性能压力可控
由于 Redis 原生采用单线程机制,CPU 为单核能力,性能在 8 万 QPS 的业务建议使用。如果需要更高的性能要求,请选用集群版配置。
Redis 命令相对简单,排序、计算类命令较少
由于 Redis 的单线程机制,CPU 为主要瓶颈。如排序、计算类较多的业务建议选用集群版配置。##2.3 集群版-双副本可轻松突破 Redis 自身单线程瓶颈,满足大容量、高性能的业务需求。双副本集群版实例采用集群架构,每个分片服务器采用主从(master-replica)双副本模式。集群版支持代理和直连两种连接模式,您可以根据本章节的说明,选择适合业务需求的连接模式。
代理模式
集群架构的本地盘实例默认采用代理(proxy)模式,支持通过一个统一的连接地址(域名)访问 Redis 集群,客户端的请求通过代理服务器转发到各数据分片,代理服务器、数据分片和配置服务器均不提供单独的连接地址,降低了应用开发难度和代码复杂度。代理模式的服务架构图和组件说明如下。
直连模式因所有请求都要通过代理服务器转发,代理模式在降低业务开发难度的同时也会小幅度影响 Redis 服务的响应速度。如果业务对响应速度的要求非常高,您可以使用直连模式,绕过代理服务器直接连接后端数据分片,从而降低网络开销和服务响应时间。直连模式的服务架构和说明如下。
public static void main(String args[]){JedisPoolConfig config = new JedisPoolConfig();// 最大空闲连接数, 根据业务需要设置,不能超过实例规格规定的最大的连接数 config.setMaxIdle(200);// 最大连接数, 根据业务需要设置,不能超过实例规格规定的最大的连接数 config.setMaxTotal(300);config.setTestOnBorrow(false);config.setTestOnReturn(false);
// 开通直连访问时申请到的直连地址 String host = "r-bp1xxxxxxxxxxxx.redis.rds.aliyuncs.com";int port = 6379;// 实例的密码 String password = "xxxxx";
Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();jedisClusterNode.add(new HostAndPort(host, port));JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT,DEFAULT_REDIRECTIONS,password, "clientName", config);}
评论