GaussDB(for Redis) 是华为云推出的企业级Redis,采用计算存储分离架构,兼容Redis生态的云原生NoSQL数据库,基于共享存储池的多副本强一致机制,支持持久化存储,保证数据的安全可靠。具有高兼容、高性价比、高可靠、弹性伸缩、高可用、无损扩容等特点。GaussDB(for Redis)满足高读写性能场景及容量需弹性扩展的业务需求,广泛使用于电商、游戏以及视频直播等行业。即可作为前端缓存支撑大并发的访问,也可作为底层数据库负责核心数据可靠存储。

接下来我们使用基于Redis Labs推出的多线程压测工具memtier_benchmark,对比测试下GaussDB(for Redis) 和原生Redis的特性差异。

01

 创建GaussDB(for Redis)实例

在华为云通过控制台购买GaussDB(for Redis)实例,测试实例的配置为8G容量,如下所示。

如截图所示,GaussDB(for Redis)提供了统一的负载均衡地址和端口,方便应用程序访问高可用的Redis服务。持久化数据存储空间直观展示了数据量及容量上限。另外,依托于GaussDB(for Redis)存算分离的架构,实例的容量和性能可以按需分别扩展:

  • 如需更多容量,只需点击“磁盘扩容”;

  • 如需更高的吞吐性能,则通过“规格变更”或“添加节点”完成。

02

 安装memtier_benchmark

使用与GaussDB(for Redis)测试实例相同子网的ECS云服务器,部署memtier_benchmark测试环境:

# yum install autoconf automake make gcc-c++
# yum install pcre-devel zlib-devel libmemcached-devel openssl-devel
# git clone https://github.com/RedisLabs/memtier_benchmark.git
# cd memtier_benchmark
# autoreconf -ivf
# ./configure
# make && make install如libevent版本较低,需要在安装memtier_benchmark前 按以下步骤安装libevent
# wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
# tar xfz libevent-2.0.21-stable.tar.gz
# pushd libevent-2.0.21-stable
# ./configure
# make
# sudo make install
# popd
# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}确认安装成功
# memtier_benchmark --help

03

 数据批量装载

向GaussDB(for Redis) 中装载数据

使用memtier_benchmark向GaussDB(for Redis) 中装载数据命令如下,单个value长度1000字节,12个线程,每个线程16个客户端,每个客户端发出请求数100000个,全部是写入操作。

memtier_benchmark -s 192.XXX.XXX.XXX -a XXXXXXX -p 8635 -c 16 -t 12  -n 100000 --random-data --randomize --distinct-client-seed -d 1000 --key-maximum=65000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./result_small_6G_set.log

可以看到执行了1920万次操作,平均每秒4.4w的ops,总耗时438秒。

使用redis-cli登录实例,查看dbsize(注意:由于采用MVCC机制,查询结果为key数量的预估值,非实时的准确值。)

向原生Redis中装载数据

为了对比方便,我们在另一台4核8G的ECS上部署一个单节点的开源Redis,版本与GaussDB(for Redis)一致使用5.0。

还是使用memtier_benchmark相同的配置向原始Redis中插入数据:

memtier_benchmark -s 192.XXX.XXX.XXX  -a XXXXXXX  -p 6379 -c 16 -t 12  -n 100000 --random-data --randomize --distinct-client-seed -d 1000 --key-maximum=65000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./result_small_6G_set_2.log

执行一段时间后出现大量报错。

从Redis日志中查看,是在做RDB快照的时候出现了问题。从系统日志中分析当时发生了OOM故障。

这其实和原生Redis的RDB快照处理方式有关,Redis是fork了一个进程使用copy-on-write的方式持久化内存数据,这必然会导致更多内存的申请和使用。并且除了RDB快照,原生Redis在执行aof重写,新加从库的操作时也会申请使用更多的内存。为了避免OOM的情况出现,操作系统往往要预留出一倍的空闲内存,限制了内存资源的使用率造成极大的浪费。

反观GaussDB(for Redis) 由于摒弃了fork机制,使得架构更健壮。从上面的测试也可以看到,导入同样数量的数据时,GaussDB(for Redis) 的可用性和响应的性能没有受到任何的影响。

04

 实例紧急扩容

为了测试能进行下去,我们将GaussDB(for Redis) 和原生Redis分别扩容到16G。

GaussDB(for Redis)扩容到16G

对GaussDB(for Redis) 来说由于采用了存算分离的架构,分布式存储池海量在线,按额度分配给用户使用。扩容过程没有数据拷贝,也不会影响业务使用。接下来我们测试使用memtier_benchmark在持续的RW操作场景下GaussDB(for Redis)的扩容过程,看看是否会影响业务的读写;

memtier_benchmark -s 192.XXX.XXX.XXX -a XXXXXXXX -p 8635 -c 16 -t 12  -n 10000 --random-data --randomize --distinct-client-seed -d 1000 --key-maximum=65000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./result_small_6G_set_get.log

在执行命令的同时进行扩容操作,查看测试结果和监控发现,扩容期间未见报错,GaussDB(for Redis) 响应时延没有明显变化。

原生Redis扩容到16G

原生Redis实例受服务器内存限制,要扩容到16G只能先升级ECS配置。需要重启服务器,存在短时间业务不可使用的问题。升级后再次使用memtier_benchmark插入数据依旧报错,检查发现还是出现了OOM。

没办法,只能再次升级云服务器ECS配置到32G,升级期间Redis服务再次不可用。这次升级后终于使用memtier_benchmark成功的插入了数据。

05

 数据淘汰问题

下面我们来看高压力下导致数据写满的场景,直观对比双方的表现。

插入数据到GaussDB(for Redis)

memtier_benchmark参数设置如下,全部为写入操作,set的单个value长度50k字节,12个线程,每个线程16个客户端,每个客户端发出请求数10000次请求。折算下来 总的插入的key约为192万,数据量约96G,远大于实例的规格了。

memtier_benchmark -s 192.XXX.XXX.XXX  -a XXXXXXX -p 8635 -c 16 -t 12  -n 10000 --random-data --randomize --distinct-client-seed -d 50000 --key-maximum=65000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./result_small_6G_set.log

运行了一段时间后,从监控上看到GaussDB(for Redis)磁盘空间100%,并且实例进入只读模式拒绝新数据的写入。检查发现共导入数据194954条。

对于GaussDB(for Redis)来说,当容量接近写满的时候,用户会收到告警通知,此时只需在控制台点击“磁盘扩容”,即可秒级完成扩容,对业务没有影响。

插入数据到原生Redis

原生Redis通过配置限制了内存大小为8G,同样执行以下命令导入数据。

memtier_benchmark -s 192.XXX.XXX.XXX  -a XXXXXXX -p 8635 -c 16 -t 12  -n 10000 --random-data --randomize --distinct-client-seed -d 50000 --key-maximum=65000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./result_small_6G_set.log

运行一段时间后报错。

登录Redis查看内存已写满。

也可以通过配置maxmemory-policy设置数据淘汰策略保障数据写入,如图我们将淘汰策略设置成allkeys-lru,即淘汰最近最少使用的key满足插入数据的内存需求。

修改配置后,插入正常。

综上,GaussDB(for Redis)更加看重数据安全,将“保障用户数据不丢”作为最高优先级。当数据写满后自动进入只读模式,确保实例中数据的安全。通过控制台可以做到快速的扩容,最大可能降低对业务的影响。原生Redis提供了数据淘汰参数,用户可自主选择策略当数据写满后淘汰符合条件的数据,设计思想更偏向于缓存的用途“数据可随意丢弃”。如使用在重要的业务场景,不希望数据丢失,建议选择GaussDB(for Redis)。

06

 测试总结

本次我们使用memtier_benchmark分别对GaussDB(for Redis) 和原生Redis进行set操作的测试,8G规格的GaussDB(for Redis) 很顺利的完成了数据加载的操作,原生Redis出现OOM异常导致数据加载失败。原生Redis通过fork进程copy-on-write的方式拷贝数据,在RDB快照、aof重写以及新增从库等操作时容易出现OOM异常。反观GaussDB(for Redis) 由于摒弃了fork机制,使得架构更健壮,服务的可用性更强。

在后续的扩容操作中GaussDB(for Redis)能够快速完成且对业务RW操作无影响,而原生Redis扩容需停服,期间业务无法正常使用。GaussDB(for Redis)快速扩容的特性非常适合生产环境中需要紧急扩容的场景,如游戏开服、电商抢购的火爆程度远超预期时。从测试的情况看,扩容几乎达到了秒级完成,且扩容过程中对业务的读写完全没有影响。

另外更重要的,原生Redis无论采用RDB还是aof方式进行数据持久化,都有数据丢失的风险,而GaussDB(for Redis)支持全量数据落盘,GaussDB基础组件服务提供底层数据三副本冗余保存,能够保证数据零丢失。如果使用场景既要满足KV查询的高性能,又希望数据得到重视能够不丢,建议从原生Redis迁移到GaussDB(for Redis) 。


墨天轮原文链接:https://www.modb.pro/db/171623?sjhy(复制到浏览器或者点击“阅读原文”立即查看)

关于作者

杨明翰,云和恩墨服务总监。拥有MySQL、TDSQL、TiDB、openGauss等认证。长期从事MySQL、PG、Redis、MongoDB的数据库技术服务。现负责云和恩墨西区开源数据库交付运维工作;热衷于开源数据库产品的研究。

END

更多数据库行业相关内容,欢迎光临 2021 数据技术嘉年华 :https://www.modb.pro/dtc2021(扫描下方二维码免费领取大会门票)

推荐阅读:267页!2020年度数据库技术年刊

推荐下载:2020数据技术嘉年华PPT下载

2020数据技术嘉年华近50个PPT下载、视频回放已上传墨天轮平台,可在“数据和云”公众号回复关键词“2020DTC”获得!

你知道吗?我们的视频号里已经发布了很多精彩的内容,快去看看吧!↓↓↓

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

华为云企业级Redis评测第一期:稳定性与扩容表现相关推荐

  1. 华为云企业级Redis评测第二期:大Key操作的影响

    点击蓝字 关注我们 在前一篇文章<华为云企业级Redis评测第一期:稳定性与扩容表现> 中,我们使用多线程压测工具memtier_benchmark对华为GaussDB(for Redis ...

  2. 华为云企业级Redis:助力VMALL打造先进特征平台

    摘要:当电商平台对AI算法模型的需求越来越多,特征数据平台的统一建设是不少开发团队头疼的事情.因为只有通过统一的特征数据存储,才能改变原有的"数据孤岛",解决生产重复造轮子的窘境. ...

  3. 华为云企业级Redis:集群搭载多DB,多租隔离更降本

    本文分享自华为云社区<华为云企业级Redis揭秘第17期:集群搭载多DB,多租隔离更降本>,作者:GaussDB 数据库 . 背景:GaussDB(for Redis)是华为云数据库团队推 ...

  4. 华为云企业级Redis讲解第16期:超越开源Redis的ACID“真“事务

    摘要: 开源Redis只支持伪事务,应用场景受限.高斯Redis发布企业级事务特性,支持完备ACID,为交易.库存等上层业务带来全新可能. 本文分享自华为云社区<华为云企业级Redis揭秘第16 ...

  5. 揭秘丨7分钟看懂华为云鲲鹏Redis背后的自研技术

    2019年5月,华为云发布全球首个基于自研ARM架构的分布式缓存鲲鹏Redis,搭载华为LibOS+华为编译器+安全容器引擎三项黑科技,在保证Redis强劲高性能外,还降低客户30%的使用成本,真正实 ...

  6. 如何更有效的消灭watchdogs挖矿病毒?华为云DCS Redis为您支招

    漏洞概述 近日,互联网出现watchdogs挖矿病毒,攻击者可以利用Redis未授权访问漏洞入侵服务器,通过内外网扫描感染更多机器.被感染的主机出现 crontab 任务异常.系统文件被删除.CPU ...

  7. 第三方测评:GaussDB(for Redis)稳定性与扩容表现

    摘要:本文将通过采用Redis Labs推出的多线程压测工具memtier_benchmark对比测试下GaussDB(for Redis) 和原生Redis的特性差异 本文分享自华为云社区<墨 ...

  8. 云端能力知几许?12人众测华为云企业级Kubernetes集群实力

    近年来,云端业务体系不断发展壮大,企业的需求也主要呈现出两个方向,一方面不断增加的数据量要求云端能够实现流量监控和管理:另一方面也需要云端能够便捷的进行容量扩展和业务升级.在这种要求下,容器技术不断发 ...

  9. 华为云sql工程师评测答题[青铜+白银]

    1.事务的4大特性 原子性.一致性.隔离性.持久性 2.两个实体之间的联系通常有3种类型,包含 3.[多选]以下是数据类型有 4.[多选]为保障数据库的稳定性,通常要对数据库进行压力测试,压测需要考虑 ...

最新文章

  1. vue-router的基本使用
  2. UNIX中的Select函数
  3. python——数据类型
  4. [Win10应用开发] 使用 Windows 推送服务 (WNS)
  5. 557. 反转字符串中的单词 III golang 数组和字符串反转
  6. 体检异常率98%?数据分析告诉你如今的90后身体状况到底有多差?
  7. LeetCode93. 复原IP地址
  8. CISCO路由器、交换机密码恢复
  9. 《Cassandra权威指南》第二版书评及访谈
  10. 可视化理解卷积神经网络 - 反卷积网络 - 没看懂
  11. python---python基本算法的时间复杂度和空间复杂度
  12. Unicdoe【真正的完整码表】对照表(二)汉字Unicode表
  13. PHP+node搞一下58微聊的聊天内容的获取
  14. DataStudio 编辑器快捷键列表
  15. 华硕服务器主板型号命名规则,详细解读主板厂商命名规则——华硕篇
  16. Rosalind Java|k-Mer Composition
  17. 基于JavaWeb聊天室设计与实现
  18. 基于Python的招聘信息可视化分析研究
  19. 三个点在同一个半圆的概率_圆内任取三点/四点在同一半圆内的概率是多少?...
  20. 建筑业数字化|数据推动建筑业变革与产业升级

热门文章

  1. Gnome即将满18岁,适用于Docker,Kali Linux 2.0的新工具以及更多新闻
  2. 为什么开源和企业用户是天生的盟友
  3. (36)Gulp 构建资源(图片)文件
  4. Bootstrap3 带条纹的表格样式
  5. CSS3 图像边框 border-image属性
  6. mysql数据表添加数值_MySQL中数据表和数据的操作
  7. vue+django前后端项目部署
  8. ORACLE坏块检查
  9. mysql 开启binglog
  10. 关于index.html被缓存问题