本文分享自华为云社区《华为云GaussDB(for Redis)揭秘第31期:大key治理》,作者: 高斯Redis官方博客。

从DBA的视角看,大Key无疑是引起Redis线上问题的常见原因。为了解决大Key隐患,业务首先要遵守合理的开发规范,减少大Key的产生和访问依赖。但有时大Key是在程序运行过程中悄悄产生的,让人防不胜防。因此,一款可随时在线诊断,且能主动预警,防患于未然的Redis服务产品显得尤为重要。

GaussDB(for Redis):支持大Key在线诊断

GaussDB(for Redis)采用计算、存储分离的高可靠架构,每个计算节点上都部署有后台任务。GaussDB(for Redis)通过后台任务持续检测分析存储池中的大key情况,用户执行命令时直接取结果,不会影响线上业务,跟业界阻塞式全量扫描方式相比,更安全。

用户执行bigkeys命令后,将直接从节点上获取“答案”,不用全库扫描引起不必要的性能影响。

此外,GaussDB(for Redis)支持用户自定义大key标准,比如大于1MB的string、大于10000个元素的hash类型等。该功能一经推出,收获了很多客户和DBA小伙伴的认可及点赞。

GaussDB(for Redis):支持大key监控预警

分享两个真实案例:

1、业务周期性执行“lrange 0 -1”获取list key的所有元素。但由于程序bug,业务也同时在长期、缓慢地向这个key中持续追加,导致key越来越长。直到线上业务出问题,几经波折,才发现了这个危险的大Key。

2、业务长期稳定运行,有一天有新组件上线,线上业务开始不断超时。几经排查,发现新组件对Redis执行hmset f1 v1 f2 v2……,一条写入命令携带了长达2万个参数,严重影响了生产业务。

从DBA的角度,这类问题需要一个“大Key侦探”时刻盯防,一旦有对大Key的高危操作,立刻主动预警。

GaussDB(for Redis)设计了10+监控指标,提供“大Key侦探”的能力,例如:单个请求回包的最大元素个数(识别lrange 0 -1操作大key引起阻塞的场景)、单个请求携带的最大参数个数(识别hmset上万元素批导引起阻塞的场景)……DBA只需要根据多年经验,将这类指标订阅告警,即可在第一时间“抓住大Key案发现场”,将风险扼杀于萌芽状态。

GaussDB(for Redis):对大Key的承载能力更强

即使在大Key存在的一些业务场景,GaussDB(for Redis)的表现也是远优于开源Redis的。下面将介绍大Key经常引起的一些问题:

1、大key引发了CPU 100%,阻塞生产业务

在开源Redis中,大key容易引起CPU占用100%,使生产业务受损,引起线上问题。这是因为开源Redis本身就是单线程,尤其在这种比较脆弱的架构下使用大key,更容易引起线程阻塞,从而影响整个实例。

GaussDB(for Redis)的多线程架构天然就对大key更友好,不会有这个问题困扰。即使单个线程被个别大Key影响,整个GaussDB(for Redis)实例包含数十、上百个线程,整体业务基本都不会受到干扰。

2、大key因个别分片带宽高,被Redis频繁“流控”

目前市面上有一些开源Redis是基于一个大的容器混合部署很多租户的Redis进程,但在这种架构下,为了避免一个客户的Redis影响其他客户,往往会对客户的Redis进程进行流量控制,当某个客户业务中对大key有较为频繁的操作时,很容易触发给客户设定的该租户的带宽阈值并触发流控,从而导致线上业务受损。

相比之下,GaussDB(for Redis)的每个分片都是一个独立的容器,是客户的独享资源,更可靠,连接数、带宽等资源不设主动流控,尤其是节点带宽资源的“天花板”非常高。

3、大key导致倾斜,分片内存占用不均匀

开源Redis集群中,存储大key会导致内存空间不均匀、消耗不均衡,大key所在分片有OOM风险。

GaussDB(for Redis)采用高性能存储池,不会对某个节点分片造成数据量的倾斜,支持大key可靠存储,不会导致分片OOM。

4、Redis扩容时要搬迁数据,大key总引起问题

开源Redis扩容时,由于涉及数据跨片搬迁,扩容过程耗时久,存在访问阻塞的风险。如图所示,因此开源Redis在有大key的情况下,扩容必须谨慎!

GaussDB(for Redis)支持秒级无感扩容,不论扩容量,还是扩CPU,都不需要搬迁数据,因此也不受大Key影响,运维体验极佳。

本文介绍了GaussDB(for Redis)的大Key诊断、大Key预警特性,以及在大Key场景下如何解决开源Redis的稳定性痛点,为客户提供了高效可靠的大Key解决方案。未来,GaussDB(for Redis)将持续致力于开发更多好用的企业级特性,帮助客户轻松运维,高效开发。

附录

  • 本文作者:

华为云数据库GaussDB(for Redis)团队

  • 杭州/西安/深圳简历投递:

yuwenlong4@huawei.com

  • 更多产品信息,欢迎访问官方博客:

bbs.huaweicloud.com/blogs/248875

点击关注,第一时间了解华为云新鲜技术~

揭秘华为云GaussDB(for Redis)丨大key治理的更多相关文章

  1. 揭秘华为云GaussDB(for Influx)最佳实践:hint查询

    摘要:GaussDB(for Influx)通过提供hint功能,在单时间线的查询场景下,性能有大幅度的提升,能有效满足客户某些特定场景的查询需求. 本文分享自华为云社区<华为云GaussDB( ...

  2. 揭秘华为云GaussDB(for Influx):数据直方图

    摘要:本文带您了解直方图在不同产品中的实现,以及GaussDB(for Influx)中直方图的使用方法. 本文分享自华为云社区<华为云GaussDB(for Influx)揭秘第九期:最佳实践 ...

  3. 升级的华为云“GaussDB”还能战否?

    摘要:芯片.操作系统.数据库是现代信息技术领域的三大核心基础,做数据库,不仅需要技术和投入,对华为这种做通讯起家的企业,更需要的是一种并非玩票性质的态度. GaussDB,不仅蕴含着华为对数学和科学的 ...

  4. Redis 的大 Key 对持久化有什么影响?

    作者:小林coding 图解计算机基础(操作系统.计算机网络.计算机组成.数据库等)网站:https://xiaolincoding.com 大家好,我是小林. 上周有位读者字节一二面时,被问到:Re ...

  5. 华为云GaussDB(DWS)内存知识点,你知道吗?

    前言 在日常数据库的使用中,难免会遇到一些内存问题.此次博文主要向大家分享一些华为云数仓GaussDB(DWS)内存的基本框架以及基本视图的使用,以便遇到内存问题后可以有一个基本的判断. 注意,本篇博 ...

  6. 华为云CodeArts Artifact,5大特性守护制品质量与安全

    摘要:2023年2月23日,华为云CodeArts Artifact制品仓库服务正式上线,目标进一步赋能企业伙伴与开发者,实现软件作业中可信制品生产与应用活动快速落地,提高软件交付效率与质量. 本文分 ...

  7. redis 删除大key集合的方法

    redis大key,这里指的是大的集合数据类型,如(set/hash/list/sorted set),一个key包含很多元素.由于redis是单线程,在删除大key(千万级别的set集合)的时候,或 ...

  8. redis查找大key

    redis中查找出比较大的key 下面直接上代码 (请在测试机上测试) #!/usr/bin/env python import sys import redis def check_big_key( ...

  9. redis修改大key报Argument list too long的解决办法:

    线上一个业务出现异常:redis的一个大大大大大key数据有问题,所以导出修改再导入,但遇到了问题: [root@ ~]# /usr/local/redis/bin/redis-cli -h 127. ...

  10. redis统计大key

    –bigkeys redis-cli -h <host> -p <port> -n <db> --bigkeys 这条命令会从指定的 Redis DB 中持续采样, ...

随机推荐

  1. 2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回

    2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回 ...

  2. [数据分析与可视化] 基于Python绘制简单动图

    动画是一种高效的可视化工具,能够提升用户的吸引力和视觉体验,有助于以富有意义的方式呈现数据可视化.本文的主要介绍在Python中两种简单制作动图的方法.其中一种方法是使用matplotlib的Anim ...

  3. IOI2020 国家集训队作业 Part 1

    日期不对,但要保证顺序正确方便查找少了啥题. 计算几何和实在不会的题没写. 9.20 CF504E Misha and LCP on Tree *3000 二分,hash,树剖 CF505E Mr. ...

  4. P1119 floyd

    最开始看错数据了没看到Q = 100 是50%的数据以为跑q遍floyd能过,结果只有30,其他全t 1.要注意题目中的条件,挖掘一些性质 2.本题的另一个关键的是要对floyd的过程原理比较熟悉,f ...

  5. JAVA异常的不正确处理方式

    最近收到一个求助信息,异常堆栈如下: ``` java.lang.RuntimeException: FF1C1005 at test_ssh.sftp.Pool.get(Pool.java:25) ...

  6. [Python急救站]打印菱形

    打印菱形程序 row = int(input("请输入要打印的列数: ")) #打印上面三角 for i in range(row): # i控制行数 for j in range ...

  7. 如何使用 PreparedStatement 来避免 SQL 注入,并提高性能?

    前言 本篇文章主要如何使用 PreparedStatement 来避免 SQL 注入,并提高性能? 欢迎点赞 收藏 留言评论 私信必回哟 博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 ...

  8. 将 .NET Aspire 部署到 Kubernetes 集群

    使用Aspirate可以将Aspire程序部署到Kubernetes 集群 工具安装 dotnet tool install -g aspirate --prerelease 注意:Aspirate ...

  9. 通过 VS Code 优雅地编辑 Pod 内的代码(非 NodePort)

    目录 1. 概述 2. NodePort 方式 3. Ingress 方式 4. 救命稻草 5. 其他 1. 概述 今天聊点啥呢,话说,你有没有想过怎样用 VS Code 连上 K8s 集群内的某个 ...

  10. 【软件安装】vmware虚拟机安装完整教程(15.5版本)

     目录 一.基础介绍 二.准备工作(注意:如果自己下载不下来翻到最下面获取下载地址) 三.VMware下载与安装 VMware Workstation15.5新功能 注意: 一.基础介绍 VMware ...