聊聊军演压测中热key导致Redis实例CPU100%的问题

        在Redis集群中,热key指得是那些在某一段时间内访问特别高的键值。热key的问题在于,大量访问流量集中到某一个Redis实例中,达到单个实例处理上限,可能会导致该实例CPU使用率100%,或者网卡流量达到上限等,对集群以及应用系统的稳定性和可用性造成影响,更为严重出现服务器宕机。 

可造成的影响

1、热key会导致流量集中,redis缓存与数据库被击穿,从而引发系统雪崩(大量请求失败,直接访问数据库等)。

2、请求分配不均,存在热key的节点面临较大的访问压力,可能导致该数据分片的连接数被耗尽甚至宕机,如{hashTag}在大流量场景下较易出现这种情况,对于热点的hashTag请求集群于某一个节点实例。

对于热key,增加redis的分片是无能为力的,也违背了降本的初心。

如何发现热key

最有力的手段还是监控、监控、监控。监控过程中发现redis的get使用率有所降级,出现了ConnectionFailureException异常,新的redis连接不能创建。

下面分享一个在军演压测过程中的热key监控图。

对上面的第一个实例查看热key,发现某个key的请求次数远超过其他key。

解决方案

1、多级缓存,如增加本地缓存。

对于本地缓存,需要考虑的点:防止本地缓存过大,影响系统性能;本地缓存与Redi集群数据的一致性问题。

2、热key备份,即将该热key通过添加一些前/后缀,将热key分散到不同的实例中,请求时分散请求不同的key,从而实现访问量均衡到不同的实例。

3、使用读写分离架构,这种方案我本人不太推荐

当然,避免热key这个问题,根本上还是在架构设计上去思考,提前预测系统存在的风险点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在将 Redis 实例迁移后,如果您的 Spring Boot 应用程序的 CPU 负载增加并且 RT 上升,可能是由于以下原因之一导致的: 1. 网络延迟:Redis 实例迁移后,如果新实例的网络延迟高于旧实例,则可能导致 Spring Boot 应用程序的性能下降。您可以使用 ping 命令试新 Redis 实例的网络延迟,并尝试优化网络连接。 2. Redis 配置:新 Redis 实例的配置可能与旧实例不同,例如,新实例的最大连接数、最大内存限制等可能不同。您可以检查新实例的配置并尝试将其与旧实例保持一致。 3. Redis 服务性能:新 Redis 实例可能性能不如旧实例。您可以使用 Redis 自带的性能试工具 redis-benchmark 进行性能试,查看新实例与旧实例的性能差异。 4. 应用程序代码:Redis 迁移可能会影响应用程序的代码。您可以检查应用程序代码,特别是与 Redis 相关的代码,以查找潜在的问题。 在确定问题后,您可以采取以下措施来解决问题: 1. 优化网络连接:确保网络连接稳定,并尝试使用更快的网络连接或减少网络通信量。 2. 调整 Redis 配置:将新实例的配置与旧实例保持一致,或根据应用程序的需要进行调整。 3. 优化 Redis 性能:如果新实例性能不如旧实例,您可以尝试对 Redis 进行优化,例如增加 Redis 实例的数量、使用更高性能的硬件等。 4. 优化应用程序代码:检查应用程序代码,查找潜在的问题,并尝试优化代码以提高性能。 ### 回答2: 当进行Redis实例迁移时,可能会出现Spring Boot应用CPU过高和接口响应时间(RT)上升的问题。这是因为Redis实例迁移可能会导致应用程序无法访问或连接Redis服务器,从而导致应用程序无法正常执行与Redis相关的操作。 当Redis实例被迁移时,应用程序需要重新配置连接Redis的相关参数,如主机地址、端口号、密码等。如果应用程序没有正确配置这些参数,将无法与新的Redis实例建立连接,从而导致出现高CPU使用率和接口延迟的问题。 解决此问题的方法有以下几种: 1. 检查应用程序的Redis配置:确保应用程序的配置文件包含正确的Redis连接参数,如主机地址、端口号、密码等。如果配置文件的参数与实际Redis实例的参数不匹配,需要进行调整。 2. 检查网络连接:确保应用程序可以正常访问新的Redis实例。可以使用telnet命令或其他网络连接工具试与Redis服务器之间的连接是否正常。 3. 重新启动应用程序:在进行Redis实例迁移后,重新启动应用程序可能会解决问题。重新启动应用程序将使其重新加载配置文件和建立与Redis的新连接。 4. 优化代码和查询:高CPU使用率和接口延迟可能是由于Redis操作频繁或查询效率低下造成的。检查应用程序的代码,优化Redis操作和查询,减少不必要的操作和查询次数,提高应用程序的性能。 通过以上方法,可以解决由Redis实例迁移导致的Spring Boot应用程序CPU过高和接口RT上升的问题,确保应用程序与新的Redis实例正常连接和运行。 ### 回答3: 当redis实例迁移导致springboot应用CPU过高和各个接口RT上升时,可能存在以下原因和解决方法: 1. 网络延迟:由于redis实例迁移,新的redis实例可能位于不同的网络环境导致网络延迟增加。解决方法是检查网络连接是否正常,优化网络配置,例如使用更快速的网络连接或使用专用网络。 2. 频繁的连接/断开操作:redis实例迁移可能导致大量的连接/断开操作,这会影响应用的性能。解决方法是使用连接池管理redis连接,并调整连接池的配置参数以适应新的redis实例。 3. 数据同步:在redis实例迁移期间,可能需要将数据从旧的redis实例同步到新的redis实例。如果数据量过大或同步方式不当,会导致CPU过高和RT上升。解决方法是优化数据同步的方式,例如使用增量同步或分批同步数据,避免一次性同步大量数据。 4. 内存不足:新的redis实例可能配置不足的内存,导致频繁的数据交换和缓存失效,从而引起CPU过高和RT上升。解决方法是检查新的redis实例的内存配置,适当增加内存以满足应用的需求。 5. 缓存失效:由于redis实例迁移,应用可能无法正常访问缓存,导致频繁的数据库访问和计算。解决方法是检查应用的缓存配置,确保缓存正常可用,并优化缓存策略和过期时间,以减少缓存失效的情况。 在处理以上问题时,可以通过监控工具或日志分析来确定导致CPU过高和RT上升的具体原因,然后针对具体问题进行适当的调优和优化,以恢复应用的正常性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值