【网站架构】Redis多核CPU没用?调优需要注意哪些配置

大家好,欢迎来到停止重构的频道。从本期开始,我们开始讨论对单个服务软件的性能调优。

本期,先讨论Redis的性能调优

增加CPU核心数,是否会增加Redis的性能?

设置Redis时,应该注意哪些配置项?

我们按这样的顺序介绍 

  1. 明确性能指标 

  2. 服务器硬件选择 

  3. ​单个Redis服务性能调优 

  4. 集群方案 

明确性能指标

在调优之前需要先明确性能指标,根据往期的《性能指标》, 整体系统的性能指标是并发量、吞吐量、错误率、响应时间。

 在调试单个服务时,根据往期《调优基本思路》的结论, 只需要明确单个服务的目标吞吐量即可。

如果整个系统的目标吞吐量为1000rps, 则Redis的读操作吞吐量最好为2000rps ,写操作的吞吐量最好为1000rps。

里需要说明的是, 单台redis服务的吞吐量极限在十几万rps左右,如果需要更高的吞吐量 ,则需要额外设计数据分区等编程机制规避性能局限。

错误率最好为0%响应时间不需要特别关注,但如果出现一些响应时间特别长的数据操作还是要优化的。

最大并发量是设置的, 设置的值可以低于整体系统的最大并发值。

服务器硬件选择

Redis的硬件选择一般是重点选择内存大小,需要估算所需要的内存空间。

至于CPU核数,由于Redis基本上是单线程操作数据的,所以一般单核即可。

​CPU核数增多,基本不会增加Redis的性能。当然,为了防止一些基础软件抢占Redis的资源,可以选用2核或4核的CPU

单个Redis服务性能调优

接下来是对单个Redis服务调优,在这之前, 需要先调优服务器内核参数,调优方法可以参考往期《内核参数调优》。

 

其实Redis的性能基本上是不需要调优的,Redis的吞吐量大概在10万-20万rps左右,再怎么修改配置,这个吞吐量也不会有太大的变化。

所以Redis服务调优的目的,并不在于提高性能 ,而在于防止一些问题发生。

Redis服务调优需要关注以下几点:

首先是设置最大请求数,也就是Redis服务的最大并发值。

这里推荐的是使用Redis的服务个数X2即可,例如 只有后端服务使用Redis且有5个后端服务,则设置为10即可。

当然,为了以后扩展方便,也可以设置得稍大一些,如200。

值得一提的是这个值设置再大都不会提升性能, 因为Redis大体上是单线程操作数据的。另外,后端与Redis的链接池也不需要设置太大,设置为2即可。

然后是最大内存空间,一般设置为服务器内存空间的80%,当然,如果一台服务器运行多个Redis服务, 则需要做更精准的划分。

接下来是淘汰机制,淘汰机制是当存储满了后淘汰数据的机制。

淘汰机制是需要根据数据场景而定的,但尽量不要保持默认配置。

默认配置是超出最大存储空间会报错拒绝新请求,这会引起很多问题 ,如果是存储Session的话, 那么后端服务可能也会直接报错,导致接口总是报500的错误。

至于磁盘存储的话,一般关闭即可。

但是一些场景如统计数据等场景仍然是需要开启的,保存的策略尽量放宽一些。

 其他一些优化的配置如图所示,如优化慢查询、开启多io线程等。

测试Redis性能可以使用其自带的Redis-benchmark, 一般Redis的吞吐量大概为10万rps以上 ,且增加CPU核数并无太大区别。

集群方案:主从模式

​Redis有3种集群模式,第一种是主从模式, 从服务器会自动复制主服务器的数据。

从服务器是只读的,不接收写数据操作 主从模式的最大作用是备份数据以便容灾恢复等。

当然,主从模式也可作为读写分离的方案,不过主服务器和各从服务器有不同的IP。

所以最好再增加一个Redis, proxy程序(一类软件)作为负载均衡, 对外提供单一IP。

 

 

主从模式有一个误区 ,就是作为高可用方案, 以为加上了keepalived服务之后,当主服务器宕机后,虚拟IP会自动切换到从服务器。

实际上,请求确实能切换到从服务器 ,但是从服务器会依旧拒绝写数据请求 ,这是起不到高可用的目的的。

 

集群方案:哨兵模式

第二种是哨兵模式,哨兵模式是主从模式的升级版。主服务器宕机后,其中一个从服务器会自动升级为主服务器。

但相对应的,也要额外运行Redis的哨兵程序,请求也是先发送到哨兵程序再转发到Redis服务。

如果有高可用需求,或读写分离需求,哨兵模式是比较好的。

集群方案:cluster集群模式

第三种是cluster集群模式,这种模式是可以将数据分开存储在多个服务器的。

一般cluster模式是部署3主3从或以上,cluster模式也具备哨兵模式从机升级为主机的功能。

cluster模式的好处是数据容量的扩展是相对容易的,但也会让系统结构更为复杂,增加运维成本,建议等数据量起来后再考虑此模式。

总结

哨兵模式和cluster集群模式的读写分离可以使用一些基础框架实现,springboot的话可以使用lettue。​

除了提到的点,还有一些提升Redis性能的方法:

过期时间加上一小段随机时间防止雪崩,因为大量相同时间过期的数据会造成很大的性能压力。

​不同场景的数据独立存储在不同的Redis服务或集群中,因为一个Redis服务一般认为只有1个线程在工作。

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值