本文分享自华为云社区《华为云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. JNI编程之字符串处理

    java中的字符串类型是String,对应的jni类型是jstring,由于jstring是引用类型,所以我们不能像基本数据类型那样去使用它,我们需要使用JNIEnv中的函数去处理jstring,下面 ...

  2. 21.3 Python 使用DPKT分析数据包

    dpkt项目是一个Python模块,主要用于对网络数据包进行解析和操作.它可以处理多种协议,例如TCP.UDP.IP等,并提供了一些常用的网络操作功能,例如计算校验和.解析DNS数据包等.由于其简单易 ...

  3. Typora +Picgo 搭建个人笔记

    目录 Typora +Picgo 搭建个人笔记 一.Picgo +Github 搭建图床 1.基础设置 2. 将配置导出,方便下次使用 二.Typora:设置 : 1. 基本设置 2. 导出自动提交 ...

  4. grafana 配置自定义dashboard

    本文为博主原创,转载请注明出处: 1.配置数据源 配置完成后,点击Save And Test,如果配置正确,页面则显示如下: 2.配置dashboard                    点击 A ...

  5. CF1766B [Notepad#]

    Problem 题目简述 给你一个整数 \(n\) 和字符串 \(s\),问:能不能在小于 \(n\) 次操作的情况下,输出字符串 \(s\). 有两次操作可供使用: 在已打出内容的最后添加一个字符. ...

  6. SSL证书链及使用

    什么是证书链 证书链简单来说是域名钥证书.CA公钥.根证书形成的一个颁发链条,属于公钥的一部分. 更白话一点,就是证书链文件包含一系列CA机构公钥的证书. 证书链格式 一般证书链格式是.chain,证 ...

  7. MySQL锁:InnoDB行锁需要避免的坑

    前言 换了工作之后,接近半年没有发博客了(一直加班),emmmm.....今天好不容易有时间,记录下工作中遇到的一些问题,接下来应该重拾知识点了.因为新公司工作中MySQL库经常出现查询慢,锁等待,节 ...

  8. JS 树形结构 根据子节点找到所有上级

    需求:是根据子菜单找到所有他上级菜单 进行面包屑的回显 要求子节点里包含父级id 代码如下:     parentTree(arr, id) {   //arr 所有的树数据 id 某个子节点的id  ...

  9. HDL刷题:Edgedetect

    原题链接 一道想了好久的题目,在这种并行执行的程序里怎么才能保存前一个状态,看了题解后才发觉,非阻塞赋值啊,代码如下: module top_module ( input clk, input [7: ...

  10. P5318 查阅文献

    题意大概意思就是分别用dfs与bfs遍历一个图,特殊要求是从编号小的点开始遍历. 用邻接表存图,至今我也没想明白怎么才可以从编号小的点开始遍历,明白是排序,但是不知道如何排序,题解中的排序方法是:按照 ...