在写开源项目的时候,想到了要支持多种redis部署方式,于是对于这块的生产环境的架构选型展开调研
#一 、引擎版本
推荐使用更新的引擎版本以支持更多的特性
##Redis 6.0新特性说明
##Redis 5.0新特性说明
##二 架构
您需要根据业务需求选择:
集群架构可轻松突破Redis自身单线程瓶颈,满足大容量、高性能的业务需求。
主从架构,提供高性能的缓存服务和数据高可靠。
读写分离架构提供高可用、高性能、高灵活的读写分离服务,解决热点数据集中及高并发读取的业务需求,最大化地节约用户运维成本。
##2.1 主从架构-双副本
采用主从(master-replica)模式搭建。主节点提供日常服务访问,备节点提供HA高可用,当主节点发生故障,系统会自动在30秒内切换至备节点,保证业务平稳运行。
可靠性
使用场景
##2.2 主从架构-单副本
可以在没有数据可靠性要求的纯缓存场景充分发挥性能优势。
使用场景
单副本版本只有一个数据库节点,节点出现故障时,系统会重新拉起一个Redis进程(没有数据),当节点故障业务自动切换完成后,应用程序需要将数据重新预热,以免对后端数据库产生访问压力冲击。
单副本架构不能提供数据可靠性,如果发生节点故障,您需要重新对业务进行预热,因此,在对数据可靠性要求较高的敏感性业务中,建议选用双副本架构。
由于Redis原生采用单线程机制,CPU为单核能力,性能在8万QPS的业务建议使用。如果需要更高的性能要求,请选用集群版配置。
由于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 jedisClusterNode = new HashSet();
jedisClusterNode.add(new HostAndPort(host, port));
JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT,
DEFAULT_REDIRECTIONS,password, "clientName", config);
}
针对读多写少的业务场景,提供高可用、高性能、灵活的读写分离服务,满足热点数据集中及高并发读取的业务需求,最大化地节约运维成本。 读写分离版主要由主备节点、只读节点、Proxy(代理)节点和高可用系统组成。
1.通过自研的高可用系统自动监控所有数据节点的健康状态,为整个实例的可用性保驾护航。主节点不可用时自动选择新的主节点并重新搭建复制拓扑。某个只读节点异常时,高可用系统能够自动探知并重新启动新节点完成数据同步,下线异常节点。
2.Proxy节点实时感知每个只读实例的服务状态。在某个只读实例异常期间,Proxy会自动降低该节点的服务权重,发现只读节点连续失败超过一定次数以后,会停止异常节点的服务权利,并具备继续监控后续重新启动节点服务的能力。
读写分离版采取链式复制架构,可以通过扩展只读实例个数使整体实例性能呈线性增长,同时基于源码层面对Redis复制流程的定制优化,可以最大程度地提升线性复制的系统稳定性,充分利用每一个只读节点的物理资源。
使用场景
标准版Redis无法支撑较大的QPS,如果业务类型是读多写少类型,需要采用多个只读节点的部署方式来突破Redis单线程的性能瓶颈。Redis集群版提供1个、3个、5个只读节点的配置,相比标准版可以将QPS提升近5倍。
对Redis协议兼容性要求较高的业务
读写分离版完全兼容Redis协议命令,可将自建Redis数据库迁移至读写分离版,同时支持从Redis标准版(双副本)一键平滑升级至读写分离版。
建议与使用须知
#小结
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以免费送给我的读者朋友们
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!有需要的朋友戳这里即可免费获取
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了,各位读者朋友们快来免费获取吧
R2dB)**
[外链图片转存中…(img-lAekZnJT-1623418698151)]
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了,各位读者朋友们快来免费获取吧
[外链图片转存中…(img-nntVJ3ZD-1623418698152)]