【云小课】【第19课】华为云gaussdb(for redis)与自建开源redis的成本对比-4008云顶国际网站

发表于 2020/12/24 10:05:09 2020/12/24
【摘要】 核算下来,华为云gaussdb(for redis)以1/4的价格拥有10倍以上的可用空间,整体成本相当于是开源redis自建数据库的1/40,这里还不包括自建redis数据库需要额外的搭建、运维、监控、升级扩容等各项成本。



之前对华为云gaussdb(for redis)做了一些功能性测试,本文想通过容量维度去对比测试下基于开源redis在ecs上自建数据库,和使用华为云gaussdb(for redis)的成本有何差别,供大家在做系统架构或者部署时参考(详细见文末对比表格)。

首先说明一下自建redis数据库需要在主机上自己搭建、部署、监控、运维,另外为了满足高可用要求,必须搭建主备或者集群。华为云gaussdb(for redis)后台所有配置、监控等都对用户透明,只需通过ip、端口号、用户、密码连接数据库即可,支持在线扩容。另外,华为云gaussdb(for redis)最少3个节点,后台存储也做了冗余。

接下来我们对200gb容量的redis数据库需求,来详细对比下二者的成本。

针对gaussdb(for redis),直接购买200gb存储空间即可。

基于开源redis自建,根据官方最佳实践需要设置redis最大使用内存为主机内存的45%:maxmemory=host_memory*45%,那么就需要购买444gb内存的ecs服务器,另外还需要购买一台同等配置的ecs用于搭建主备。

ps:由于没有200gb规格的内存和存储空间,gaussdb(for redis)购买192gb规则,ecs直接购买两台384gb规格。

1、购买gaussdb(for redis)

选择4u16gb性能,存储空间192gb。
如上费用为
16.8每小时,一年费用为65,868

确认规则,直接购买。

2、购买ecs

购买192*2=384gb内存规则的ecs,(这里为了方便,直接购买单台384gb规则的ecs,用于测试)
x86平台每小时
24.1,两台也就是48.2

x86平台一年的费用为115,880,两台也就是231,760

3、确认规格

gaussdb(for redis)

ecs:

4、ecs搭建redis

直接使用yum安装,然后启动服务即可:

[root@ecs-redis ~]# yum install redis
last metadata expiration check: 0:08:56 ago on tue 22 dec 2020 05:29:20 pm cst.
dependencies resolved.
===========================================================================================================================================================================
 package                         architecture                     version                                                        repository                           size
===========================================================================================================================================================================
installing:
 redis                           x86_64                           5.0.3-2.module_el8.2.0 318 3d7e67ea                            appstream                           925 k
enabling module streams:
 redis                                                            5                                                                                                       
transaction summary
===========================================================================================================================================================================
install  1 package
total download size: 925 k
installed size: 3.2 m
is this ok [y/n]: y
downloading packages:
redis-5.0.3-2.module_el8.2.0 318 3d7e67ea.x86_64.rpm                                                                                       3.6 mb/s | 925 kb     00:00    
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
total                                                                                                                                      1.3 mb/s | 925 kb     00:00     
warning: /var/cache/dnf/appstream-a520ed22b0a8a736/packages/redis-5.0.3-2.module_el8.2.0 318 3d7e67ea.x86_64.rpm: header v3 rsa/sha256 signature, key id 8483c65d: nokey
centos-8 - appstream                                                                                                                       1.6 mb/s | 1.6 kb     00:00    
importing gpg key 0x8483c65d:
 userid     : "centos (centos official signing key) "
 fingerprint: 99db 70fa e1d7 ce22 7fb6 4882 05b5 55b3 8483 c65d
 from       : /etc/pki/rpm-gpg/rpm-gpg-key-centosofficial
is this ok [y/n]: y
key imported successfully
running transaction check
transaction check succeeded.
running transaction test
transaction test succeeded.
running transaction
  preparing        :                                                                                                                                                   1/1 
  running scriptlet: redis-5.0.3-2.module_el8.2.0 318 3d7e67ea.x86_64                                                                                                  1/1 
  installing       : redis-5.0.3-2.module_el8.2.0 318 3d7e67ea.x86_64                                                                                                  1/1 
  running scriptlet: redis-5.0.3-2.module_el8.2.0 318 3d7e67ea.x86_64                                                                                                  1/1 
  verifying        : redis-5.0.3-2.module_el8.2.0 318 3d7e67ea.x86_64                                                                                                  1/1 
installed:
  redis-5.0.3-2.module_el8.2.0 318 3d7e67ea.x86_64                                                                                                                         
complete!
[root@ecs-redis ~]# 
[root@ecs-redis ~]# service redis start
redirecting to /bin/systemctl start redis.service
[root@ecs-redis ~]# 
[root@ecs-redis ~]# 
[root@ecs-redis ~]# 
[root@ecs-redis ~]# 
[root@ecs-redis ~]# redis-cli
127.0.0.1:6379> 
127.0.0.1:6379> 

5、测试写入200gb数据

测试写入200gb左右的数据到redis中:
本机ecs

[root@ecs-redis ~]# redis-benchmark  -t set -d 1000000 -n 196000 -r 10000000000
====== set ======
  196000 requests completed in 188.03 seconds
  50 parallel clients
  1000000 bytes payload
  keep alive: 1
0.00% <= 1 milliseconds
0.00% <= 2 milliseconds
0.00% <= 3 milliseconds
0.00% <= 4 milliseconds
...
100.00% <= 1171 milliseconds
1042.38 requests per second
[root@ecs-redis ~]# 

gaussdb(for redis):

[root@ecs-ae88 ~]# redis-benchmark -h 192.168.0.93 -p 8635 -a 'redis2020!' -t set -d 1000000 -n 196000 -r 10000000000
====== set ======
  196000 requests completed in 725.30 seconds
  50 parallel clients
  1000000 bytes payload
  keep alive: 1
0.00% <= 5 milliseconds
0.11% <= 6 milliseconds
...
100.00% <= 3303 milliseconds
270.23 requests per second

6、200gb数据结果

本机ecs
dbsize为19万,使用内存接近200gb。

[root@ecs-redis ~]# free -m
              total        used        free      shared  buff/cache   available
mem:         386715      151995      233548           8        1171      232569
swap:             0           0           0
[root@ecs-redis ~]# free -m
              total        used        free      shared  buff/cache   available
mem:         386715      153388      232141           8        1184      231176
swap:             0           0           0
[root@ecs-redis ~]# free -m
              total        used        free      shared  buff/cache   available
mem:         386715      154101      231422           8        1191      230463
swap:             0           0           0
[root@ecs-redis ~]# free -m
              total        used        free      shared  buff/cache   available
mem:         386715      154759      230757           8        1199      229805
swap:             0           0           0
[root@ecs-redis ~]# free -m
              total        used        free      shared  buff/cache   available
mem:         386715      155376      230134           8        1205      229188
swap:             0           0           0
[root@ecs-redis ~]# free -m
              total        used        free      shared  buff/cache   available
mem:         386715      199974      185070           8        1670      184585
swap:             0           0           0
[root@ecs-redis ~]# free -m
              total        used        free      shared  buff/cache   available
mem:         386715      199974      185062           8        1678      184584
swap:             0           0           0
[root@ecs-redis ~]# redis-cli dbsize
(integer) 195980
[root@ecs-redis ~]# redis-cli dbsize
(integer) 195980

gaussdb(for redis):

查看存储空间仅使用了20gb左右,这是由于gaussdb(for redis)后台使用了压缩算法,所以这里看到的测试数据被压缩了10倍。

7、测试写入400gb左右的数据:

本机ecs
测试到一半,主机直接崩溃,执行任何命令都报错cannot allocate memory。

[root@ecs-redis ~]# redis-benchmark  -t set -d 2000000 -n 196000 -r 10000000000
^ct: 321.36
[root@ecs-redis ~]# redis-cli
-bash: fork: cannot allocate memory
[root@ecs-redis ~]# redis-cli flushdb
-bash: fork: cannot allocate memory
[root@ecs-redis ~]# redis-cli flushdb
-bash: fork: cannot allocate memory
[root@ecs-redis ~]# ps -ef|grep redis
-bash: fork: cannot allocate memory
[root@ecs-redis ~]# ps -ef
-bash: fork: cannot allocate memory
[root@ecs-redis ~]# ps -ef
-bash: fork: cannot allocate memory
[root@ecs-redis ~]# restart
-bash: fork: cannot allocate memory
[root@ecs-redis ~]# 
--内存变化:
[root@ecs-redis ~]# free -g
              total        used        free      shared  buff/cache   available
mem:            377          15         361           0           0         360
swap:             0           0           0
[root@ecs-redis ~]# free -g
              total        used        free      shared  buff/cache   available
mem:            377          17         359           0           0         358
swap:             0           0           0
...
[root@ecs-redis ~]# free -g
              total        used        free      shared  buff/cache   available
mem:            377         345          28           0           2          29
swap:             0           0           0
[root@ecs-redis ~]# free -g
              total        used        free      shared  buff/cache   available
mem:            377         346          28           0           2          29
swap:             0           0           0
[root@ecs-redis ~]# free -g
^[[a^[[b^[[a
-bash: fork: cannot allocate memory

gaussdb(for redis):

[root@ecs-ae88 ~]# redis-benchmark -h 192.168.0.93 -p 8635 -a 'redis2020!' -t set -d 2000000 -n 196000 -r 10000000000
====== set ======
  196000 requests completed in 1330.57 seconds
  50 parallel clients
  2000000 bytes payload
  keep alive: 1
0.00% <= 7 milliseconds
0.00% <= 8 milliseconds
0.00% <= 10 milliseconds
0.00% <= 11 milliseconds
...
100.00% <= 20100 milliseconds
100.00% <= 20108 milliseconds
147.31 requests per second

正常写入了400gb左右的数据,查看控制台存储空间使用26.5g,压缩比例更高了,当然这也与测试的数据有很大关系。

8、测试写入2t左右的数据

测试写入2t左右的数据到gaussdb(for redis),验证压缩比例:

[root@ecs-ae88 ~]# redis-benchmark -h 192.168.0.93 -p 8635 -a 'redis2020!' -t set -d 2000000 -n 1000000 -r 100000000000
====== set ======
  1000000 requests completed in 10124.11 seconds
  50 parallel clients
  2000000 bytes payload
  keep alive: 1
0.00% <= 5 milliseconds
0.00% <= 7 milliseconds
...
100.00% <= 20107 milliseconds
100.00% <= 20108 milliseconds
98.77 requests per second

查看后台存储空间使用了126.7gb,压缩比也在1:10以上。

这里换算成自建开源redis,需要2t * 2 *2=8t的可用内存,并且此时也只有搭建集群才能满足需求,对应的实际成本会高很多。

总结

在容量充足的情况下,我们验证了自建开源redis和华为gaussdb(for redis)数据都能正常写入,且数据库大小相同。两者的详细价格如下:


ecs 开源redis gaussdb(for redis)
可用空间 384gb*45% 192gb
压缩比 无压缩 1:10
每小时 ¥ 48.2 ¥ 16.8
包年 ¥ 231,760 ¥ 65,868

从上面可以看出,在不考虑压缩的情况下,基于开源redis自建的费用差不多是购买华为云gaussdb(for redis)的四倍

另外,从测试数据来看,华为云gaussdb(for redis)的磁盘空间压缩比在1:10以上,也就是可用空间是至少是相同容量规则自建redis的十倍

核算下来,华为云gaussdb(for redis)以1/4的价格拥有10倍以上的可用空间,整体成本相当于是开源redis自建数据库的1/40,这里还不包括自建redis数据库需要额外的搭建、运维、监控、升级扩容等各项成本。如果云上项目或者即将上云项目中有需要用到redis,建议大家可以考虑选择华为云gaussdb(for redis)。

赶紧戳,了解更多详情吧~~


【4008云顶国际集团的版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。