• [热门活动] 【年终回馈】云数据库包年1折,新用户12元享6个月!
    华为云会员年末福利来袭~云数据库MySQL、GaussDB(for Redis)等产品新用户低至12元,包年1折起!领取万元红包,消费满额送华为保时捷设计手机!更多活动信息请前往云数据库专场:https://activity.huaweicloud.com/dbs_Promotion/index.html
  • [行业资讯] 新数科技加入华为云“沃土云创计划”,携手共创商业新机
    近日,北京新数科技有限公司(简称:新数科技,英文名称:ShinData)加入华为云“沃土云创计划”,在云化升级和信创数据库产品方面展开更进一步的合作,共同助力商业成功。新数科技是业内数据库管理软件创新引领企业,产品涵盖数据库dbPaaS云管理平台、数据迁移传输平台、数据库安全管控平台和ShinDB数据库解决方案等,广泛应用于金融、制造、能源、零售和通信等行业,为广大企业在新时期云计算、大数据、人工智能等环境下的数据库基础软件转型变革提供持久源动力。新数科技产品ShinData DMP数据库云管理平台以及ShinSight Pro数据库监控和性能容量分析软件基于华为云操作系统鲲鹏openEuler和GaussDB数据库等环境完成严格测试,通过了华为云“沃土云创计划“方案认证,并被授予“HUAWEI ENABLED” 和“HUAWEI COMPATIBLE”等证书及相关认证徽标的使用权。“沃土云创计划”是华为云面向技术合作伙伴推出的一项联合方案构建计划,用以加强对合作伙伴解决方案及服务构建、迁移过程中的技术赋能、支持,提供技术能力认证,携手为用户提供更具价值的解决方案。HUAWEI ENABLED认证的核心是集成华为云高阶云服务,合作伙伴完成该认证后,即可申请针对数据库方案的HUAWEI COMPATIBLE认证。这两项认证为合作伙伴/第三方厂商产品提供了基于华为云开放的产品能力和技术支持服务,助力客户开发具有差异化、竞争力的产品和解决方案,经测试认证有效调用了华为产品的ICT能力。此次合作认证的两款产品,ShinData DMP提供了安装部署、监控告警等全生命周期管理功能,支持高可用和负载均衡部署、多分区跨网段部署,满足客户跨地域IT基础架构要求。ShinSight Pro定位于面向中小规模场景下多类型数据库软件的可视化、轻量级、自动化的监测分析巡检,致力让管理和开发人员更轻松便捷地分析数据库运行状况,帮助企业迅速建立起专业性能监控分析平台。两款产品技术成熟、易落地,目前已在金融、制造、能源、零售和通信等多个行业成功实践,助力众多企业完善了数据库管理体系并提升管理能力。合作认证不仅体现了新数科技相关产品在业内的技术领先性和广泛兼容性,以及研发团队在技术和产品上的不断追求卓越,同时依托华为云与GaussDB数据库,验证了解决方案具有软硬件完全信创化的部署应用能力,能够满足众多企业基础软件转型需求,并进一步推进新数科技与华为云在产品、技术和生态方面的深入合作。数字化新时代下,我们需要更成熟、能不断演进、真正具备自主技术的合作生态体系,华为云将继续携手更多合作伙伴,通过优势互补、技术协同和合作共赢,更好地服务和支持企业数字化转型,助推中国企业科技创新和行业发展。【活动推荐】上云正当时,华为云数据库MySQL、DDS、GaussDB(for Redis)等多款产品免费试用,欢迎点击链接体验:https://activity.huaweicloud.com/dbs_Promotion/index.html
  • [版主精选] 华为云企业级Redis评测第一期:稳定性与扩容表现
    本文转自墨天轮,作者:杨明翰,原文链接:https://www.modb.pro/db/171623GaussDB(for Redis) 是华为云推出的企业级Redis,采用计算存储分离架构,兼容Redis生态的云原生NoSQL数据库,基于共享存储池的多副本强一致机制,支持持久化存储,保证数据的安全可靠。具有高兼容、高性价比、高可靠、弹性伸缩、高可用、无损扩容等特点。GaussDB(for Redis)满足高读写性能场景及容量需弹性扩展的业务需求,广泛使用于电商、游戏以及视频直播等行业。即可作为前端缓存支撑大并发的访问,也可作为底层数据库负责核心数据可靠存储。接下来我们使用采用Redis Labs推出的多线程压测工具memtier_benchmark对比测试下GaussDB(for Redis) 和原生Redis的特性差异。目录导航1、创建GaussDB(for Redis)实例2、安装memtier_benchmark3、数据批量装载向GaussDB(for Redis) 中装载数据向原生Redis中装载数据4、实例紧急扩容GaussDB(for Redis)扩容到16G原生Redis扩容到16G5、数据淘汰问题插入数据到GaussDB(for Redis)插入数据到原生Redis6、测试总结1、创建GaussDB(for Redis)实例在华为云通过控制台购买GaussDB(for Redis)实例,测试实例的配置为8G容量,如下所示。如截图所示,GaussDB(for Redis)提供了统一的负载均衡地址和端口,方便应用程序访问高可用的Redis服务。持久化数据存储空间直观展示了数据量及容量上限。另外,依托于GaussDB(for Redis)存算分离的架构,实例的容量和性能可以按需分别扩展:如需更多容量,只需点击“磁盘扩容”;如需更高的吞吐性能,则通过“规格变更”或“添加节点”完成。2、安装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 --help3、数据批量装载向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) 的可用性和响应的性能没有受到任何的影响。4、实例紧急扩容为了测试能进行下去,我们将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成功的插入了数据。5、数据淘汰问题下面我们来看高压力下导致数据写满的场景,直观对比双方的表现。插入数据到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)。6、测试总结本次我们使用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) 。
  • [优秀博文] 华为云企业级Redis揭秘第15期:Redis为什么需要强一致?
    有人说,开源Redis的最终一致性已经能满足大部分应用场景,也有人说,多副本的强一致代价太大,没有必要实现。要笔者说,其实弱一致性已经不满足很多应用场景的诉求。怎么,不信?请听笔者娓娓道来。1.不一致带来的困扰1.1 秒杀变秒崩分享一个电商秒杀活动中限流器的例子,在电商的秒杀活动中,为了扛住前端对数据库的超大流量冲击,一般使用两种方案来保护系统,一个是缓存,另一个则是限流。缓存这个容易实现,只需要在数据库前加一层缓存服务器,而对于限流来说,最简单的可以使用Redis的计数器来实现限流功能。具体来说,假设我们需要对某个接口限定流量为5000QPS,即每秒钟访问的次数不能超过5000。那么我们可以这么做:在一开始的时候设置一个计数器counter为5000,并且过期时间为1s,即1s后计数器失效。每当一个请求过来的时候,counter的值减1,判断当前counter的值是否等于0,如果等于,则说明请求次数过多,直接拒绝请求。如果counter计数器不存在,则重置计数器为5000,开始新一秒的接口限流,注意并发情况下计数器需要加锁。正常情况下,这种方案不会出现问题,但是针对这种秒杀活动,不怕一万,就怕万一,万一Redis突然宕机怎么办,那岂不是限流器形同虚设,所有流量全部涌向后端的数据库,瞬间系统崩溃。此时聪明的你肯定会想到,给Redis搞一个备用服务器不就解决了,主服务器如果宕机,备用服务器顶上。没错,这种方案是对的,但是只正确了一半。为什么呢,如下图所示。当给Redis配置从服务器之后,如果主服务器出现宕机,可以立刻切换到从服务器,但是由于开源Redis主从服务器之间的数据是异步复制的,如果网络不畅,经常发生主从数据不一致,如果此时主服务器发生宕机,切换到从服务器之后,因为限流器的判断出错,流量压力很容易超出阈值,一下子涌向数据库服务器,同样会造成系统崩溃。仔细探究这个问题产生,根因是在于开源Redis的一致性机制为弱一致性,在某些时间内,主从副本数据不一致。而要彻底解决这个问题,只有真正的强一致才能解决。1.2 难以维护的MySQL组件其实不止Redis,就连大名鼎鼎的MySQL也逃不过弱一致的坑。MySQL的部署中,为了保证高可用性,主从热备份是MySQL常用的部署方式。但是如果发生故障时,仅仅靠MySQL自身的同步机制,是无法保证主库和从库之前的数据一致的,于是出现了重要的辅助组件MHA(Master High Availability),它的部署方式如下:MHA由管理服务和Node服务组成,Node服务部署在每个MySQL节点上,MHA组件负责让MySQL的从库尽可能的追平主库,提供主从一致的状态。发生故障进行主从切换时,Manager首先为从库补充落后的数据,然后再将用户访问切换到从库,这个过程可能长达数十秒。MHA的部署和维护都相当复杂,如未能顺利执行故障切换或发生数据丢失,运维面临的场面都将很棘手。其实运维同学何尝不希望手中的系统稳定运行呢?要是数据库自身能提供强一致保障,何苦再依赖复杂的辅助组件!2.什么是强一致上一节中笔者介绍了弱一致带来各种问题,接下来这一节具体介绍下什么是强一致。在“分布式系统”和“数据库”这两个领域中,一致性都是重要概念,但它表达的内容却并不相同。对于分布式系统而言,一致性是在探讨当系统内的一份逻辑数据存在多个物理的数据副本时,对其执行读写操作会产生什么样的结果,这也符合 CAP 理论对一致性的表述。而在数据库领域,“一致性”与事务密切相关,又进一步细化到 ACID 四个方面。因此,当我们谈论分布式数据库的一致性时,实质上是在谈论事务一致性和数据一致性两个方面。2.1 事务一致性事务的一致性主要是指的事务的ACID,分别是原子性、一致性、隔离性和持久性,如下图所示:原子性:事务中的所有变更要么全部发生,要么一个也不发生,通过日志技术实现;一致性:事务要保持数据的完整性,它是应用程序的属性,依赖原子性和隔离属性来实现;隔离性:多事务并行执行所得到的结果,与串行执行(一个接一个)完全相同,通过并发控制技术来实现;持久性:一旦事务提交,它对数据的改变将被永久保留,不应受到任何系统故障的影响,通过日志技术实现。2.2 数据一致性在分布式系统中,为了避免网络不可靠带来的问题,通常会存储多个数据副本,逻辑上的一份数据存储在多个物理副本上,自然带来了数据一致性问题。(1)状态视角从状态的视角来看,任何变更操作后,数据只有两种状态,所有副本一致或者不一致。在某些条件下,不一致的状态是暂时,还会转换到一致的状态,而那些永远不一致的情况几乎不会去讨论,所以习惯上大家会把不一致称为“弱一致”。相对的,一致就叫做“强一致”了。以一个一主两备的MySQL集群为例,“强一致”的交互过程如下:在该模式下,主库与备库同步 binlog 时,主库只有在收到两个备库的成功响应后,才能够向客户端反馈提交成功。显然,用户获得响应时,主库和备库的数据副本已经达成一致,所以后续的读操作肯定是没有问题的,这就是状态视角的“强一致”的模型。但是状态视角的这种强一致副作用很大:第一个是性能很差,主库必须要等备库1和备库2成功返回后才能返回;第二个是可用性问题,如果主备节点很多,出现故障的概率非常高。因此,状态视角的强一致代价非常大,所以很少使用。(2)操作视角状态视角的强一致降低了系统的可用性,因此很多系统选择状态视角的弱一致性模型,通过额外的算法(如Raft、Paxos)在不保证所有节点状态的一致的情况下,来保证操作视角的一致性,同时提高了系统的可用性。通过加入一些限定条件,衍生出了若干种一致性模型:线性一致性:操作视角实现真正的强一致顺序一致性:一致性强度弱于线性一致性因果一致性:一致性强度弱于顺序一致性写后读一致性:一致性强度相当,弱于因果一致性这些一致性模型的介绍参考《高斯Redis与强一致》这篇文章。3.强一致的刚需场景上一节我们介绍了什么是强一致,这一节我们介绍下强一致的典型应用场景。在常见的互联网应用中,如果数据库服务器只部署在单个节点上,那么应用程序所有的读和写都只会访问单个节点,一份逻辑数据在物理上也只有一份,这种场景下就谈不上强一致的问题。但是随着系统中业务访问量的增加,如果是单机部署数据库,就会导致I/O访问频率过高,数据库就会成为系统的瓶颈。此时,为了降低单机磁盘的I/O访问频率,提高单个机器的I/O性能,通常会增加多个数据存储节点,形成一主一从或者一主多重的架构,此时,我们可以将负载分布在多个从节点上,一方面可以实现读写分离,写请求访问主库,读请求访问备库。另一方面,还可以在主库如果出现宕机的情况下进行主备切换,增强系统的稳定性。在以上两个场景中,由于一份逻辑数据在物理上有多个副本,那么如何保证多个副本之间的数据一致呢,这就是强一致需要解决的问题。3.1 读写分离场景以关系型数据库MySQL为例,典型的部署方案为一主两从三节点方案,主节点负责处理写操作,两个从节处理读操作,分担主库的压力,如下图所示:此时,如果系统没有实现强一致,就有可能会遇到执行完写操作后,立刻去读,然后发现读不到或者读到旧状态的尴尬场景,比如操作顺序为以下操作:客户端首先通过代理向主节点 Master 进行了写入操作,此时由于没有实现强一致,写操作写完后立即返回;紧接着第二步去从节点 Slave A 执行读操作,此时Master和Slave A之间的同步还未完成,系统处于非强一致的状态,所以第二步的读操作读取到了旧状态。可以看出,在一主多备读写分离的场景下,如果想要保证写入和读取操作的准确无误,系统实现强一致是非常重要的。3.2 主备切换场景主备切换的场景也需要强一致来保证,以目前业内使用最广泛的内存数据库Redis为例,Redis的主从同步如下图所示:复客户端命令的执行结果,并不等待命令同步到从服务器再回复,也就是说Redis的主从同步其实是异步的。由于Master节点存在宕机的可能,在这种情况下,如果在Master收到命令但是还没同步到Slave服务器时发生了宕机,Redis就会发生主备切换,然后此时Master服务器和Slave服务器的数据还没有同步,就导致了数据丢失的情况。可见,开源Redis弱一致性本身的缺陷和不足,而要解决这个问题,必须实现强一致性才能解决。4.高斯Redis强一致由于开源的Redis不具备强一致的特性,导致开源Redis的应用也受到了诸多限制,为了解决开源Redis弱一致的问题,GaussDB(for Redis)应运而生。GaussDB(for Redis) 是华为云数据库团队自主研发的兼容Redis协议的云原生数据库,彻底解决了开源Redis一致性问题带来的痛点。4.1 高斯Redis架构高斯Redis的整体架构如下:相比开源Redis,高斯Redis采用存算分离的设计思想,计算层负责计算和协议的处理,聚焦服务。而存储层负责副本管理、扩缩容等处理,聚焦数据本身。高斯Redis的优势如下:数据强一致:存储层使用分布式存储DFV,轻松实现了3副本强一致;超可用:N个节点的集群最多可以挂掉N – 1个节点;低成本:数据采用磁盘存储并且进行压缩,每GB的成本不到开源Redis的十分之一;秒扩容:计算层仅需修改路由映射,无需数据搬迁,实现秒级扩容;自动备份:高斯Redis可以实现MVCC快照备份和定期自动备份。4.2 高斯Redis强一致的实现开源Redis和高斯Redis的架构如下图所示:开源Redis或者传统的主从结构如左图所示,如果在读写分离的场景或者主节点出现宕机发生主从切换的时候,都会导致数据不一致的情况。高斯Redis采用存算分离的架构,如右图所示,在存储层DFV的副本管理中采用分布式共识算法实现了3副本的强一致。计算层调用存储层的接口时,如果返回OK,那么即表示存储层已经实现副本强一致的复制。5.结语我们在做架构设计的时候,其实很多场景都隐藏着强一致的诉求。如朋友圈这类应用,如果没有实现强一致,朋友圈的评论很容易乱序。再比如限流器的场景,如果没有强一致的保证,也极容易造成数据库的崩溃。因此,必须在系统设计之初就认识到强一致的重要性,才能设计出更加稳定和可靠的系统。而高斯Redis基于存算分离的架构设计,实现了数据的强一致,为业务的稳定可靠提供了超强保障。6.附录本文作者:华为云数据库GaussDB(for Redis)团队杭州/西安/深圳简历投递:yuwenlong4@huawei.com更多产品信息:GaussDB(for Redis)官网更多技术文章:GaussDB(for Redis)博客
  • [版主精选] 11.11上云嘉年华,华为云数据库助力客户备战业务高峰
    云计算的飞速发展,促使各行各业加快数字化转型的步伐。数据库作为信息系统核心服务,在云化的浪潮中,逐渐发展出云数据库的技术路线,不断地迭代创新。数据库产品形态演进纵观数据库行业发展历程,从早期的单机MySQL到近年来分布式数据库、NoSQL系列,数据库始终秉承着一个理念——把简单留给用户,把复杂留给数据库。1.单机早期,为了弥补单机MySQL扩展性,用户要在业务层做分库分表、读写分离。但随着数据规模持续增长,用户业务、运维负担过重。2.分布式、NoSQL随后,分布式数据库开始流行。这一代数据库数据容量大,还能够水平扩展,同时也提高了可用性。而NoSQL系列的出现,也让业务设计更加灵活。例如,Redis的key-value数据结构,搭配内部的sorted set,非常适合搭建游戏排行榜;MongoDB作为最流行的文档数据库之一,能够帮用户便捷存储json文本。3.云原生、存算分离伴随用户的业务需求复杂化,诸如“当访问量小,但数据量巨大,加上核心数据不能丢。此时只是想增加些存储空间”,传统分布式架构便“不再完美”。如今,我们已进入崭新的云原生时代。走在行业前沿的数据库产品都在进行新一轮演进,拥有更强大、更灵活的全新架构——存算分离。以企业级Redis——GaussDB(for Redis)为例,图中展示存算分离的本质:资源解耦,按需使用。“计算不足扩节点、存储不够扩容量”,这种分层、弹性的扩容机制,也为用户节省很多不必要的开销。此外,在完全兼容Redis之余,GaussDB(for Redis)也兼顾了轻量级场景——用户可随时下单8GB规格实例,使用低成本、稳定可靠的企业级Redis。GaussDB云原生带来的价值基于用户常见的4大类业务痛点场景,华为云GaussDB数据库基于存算分离架构,给出了它的解法。1.数据写满了急需扩容随着企业规模扩张,更大的算力需求、更多的存储容量需求是必然的。例如在游戏开服、11.11大促抢购高峰期间,数据量爆发性增长,此时需要对数据库进行扩容,而且在不少的业务场景下,扩容的速度甚至要求达到“用户0感知“的级别。而开源Redis由于资源以节点为单位,扩容只能计算、存储一起扩,资源浪费是一方面,还不得不做数据跨节点拷贝,耗时长。其实不少用户在扩容时,还可能面临着时间无法评估的尴尬。存算分离数据库不仅拥有秒级扩容的优势,还能满足用户“算力不足扩节点、容量不足扩容量”的要求,完全不必担心资源“买多”问题。2.节点宕机导致数据长时间不可用,业务受损单机数据库一旦宕机,全量数据不可用,只能等待数据库重启,导致业务受损严重。传统分布式数据库一旦部分数据分片故障,会导致一段时间内部分数据无法访问,依然对业务产生不小影响。存算分离数据库能够解决极端场景下的数据可用性问题。由于存储池有“共享”的性质,当部分计算层节点故障时,其他健康节点可以立刻接管“本不属于自己”的数据,让业务只感受到秒级抖动,即可继续访问全量数据,不必等待故障节点的“复活”。3.高峰期间,数据库写入拥塞业务高峰是每一个企业关注的关键场景之一。开源Redis集群虽然比简单的主+备更能应付并发访问,但面对大量写入,依然会力不从心。一是因为它的节点是单线程做命令处理的工作,容易发生请求阻塞。二是由于备节点只读,因此它的集群中仅半数节点可写,抗写能力不足。GaussDB(for Redis)抗写能力极强,能从容应对企业最关心的业务高峰。首先,它采用了多线程做命令处理的设计,单点不易发生请求阻塞。其次,在存算分离的架构优势下,实例中并不存在主备关系,全部节点都可写,吞吐能力强。4.数据库成本难降分布式存储池将存储以细粒度提供给用户,相比一块块独立硬盘低效率使用,GaussDB存储池成本会极大降低。另外,相比开源Redis纯内存设计,GaussDB(for Redis)全量数据下沉到存储池中,从根本上解决了纯内存硬件价格昂贵问题。11.11上云嘉年华之际,华为云数据库给用户提供低至0.05折的大幅折扣,包括:7200元上云大礼包,新用户首购云数据库MySQL、PostgreSQL等产品年付低至11.11元,GaussDB系列产品包年、包月4折,其中GaussDB(for Redis)小规格给出了19.9元/6个月的惊喜优惠。让用户在业务数字化转型,数据上云之初,便能感受到一剂强心剂——“成本控制不是难题,稳定可靠依然有保障”。戳此直达体验>> https://activity.huaweicloud.com/dbs_Promotion/index.html
  • [行业资讯] 华为云GaussDB(for Redis)发布全新版本,两大核心特性正式亮相
    9月8日,华为云GaussDB(for Redis)正式推出全新版本。新版本内核带来性能提升、无损升级、慢日志统计等多维度产品体验,同时推出Lua脚本和SSL连接加密两大重要功能,让业务设计更加灵活,公网访问更安全。GaussDB(for Redis)是华为云推出的企业级分布式KV数据库,它完全兼容Redis协议,提供丰富的数据类型,同时基于云原生存储计算分离架构,在成本、可靠性等方面为企业带来全新价值,此番推出的两大功能特性更是为企业业务发展带来全新体验。Lua脚本功能:业务设计更灵活GaussDB(for Redis)推出的Lua脚本功能,支持用户预设逻辑,组合执行多条命令,让业务设计更加灵活。使用方法上,GaussDB(for Redis)的Lua脚本功能与开源Redis保持完全兼容。用户可以将一组命令编入Lua脚本,交给GaussDB(for Redis)执行,从而实现原子操作的效果。相比开源Redis Cluster,GaussDB(for Redis)的Lua脚本功能更为优秀: 脚本执行不易引发请求阻塞:这是由于GaussDB(for Redis)实例内部有着更细粒度的数据分片,同时每个分片都有多线程执行命令的能力。 消除“脚本复制”的副作用:开源Redis主从脚本复制让时间模块、随机命令等功能受限,GaussDB(for Redis)内核采用全新实现,并无此类限制,业务设计更轻松。 强一致保障:在高并发场景,GaussDB(for Redis)提供数据强一致保障,业务多点访问不会发生脏读。根据以往经验,Lua脚本在一些业务场景起着关键作用,例如:订单系统要求用户余额不出现负数,库存系统要避免商品超卖……它们都需要使用Lua脚本来确保“查询+扣减”的原子性语义。GaussDB(for Redis)将Lua脚本与强一致特性结合,给业务设计带来极大灵活性。SSL连接加密功能:公网访问更安全GaussDB(for Redis)提供的SSL连接加密功能,支持客户端使用SSL协议连接数据库,提升公网访问安全性。用户只需从华为云控制台下载证书,并使用支持SSL协议的客户端(例如Redis-cli 6.0),即可与实例建立安全可靠连接。通过控制台,用户还可以随时开启或禁用SSL连接模式。当连接模式发生切换,旧连接会被断开以确保实例网络安全。相比开源Redis 6.0 SSL,GaussDB(for Redis)保持兼容并带来以下优势: 性能更好:开启SSL后的性能损失更小,约15%;而开源Redis损失更多。 多线程完美兼容:开启SSL不影响多线程并发能力,而开源Redis的SSL与多线程存在二选一冲突。在一些场景中,业务有从公网甚至海外访问数据库的需求。此时,对于核心数据存储,全链路的安全保障尤为重要,新版GaussDB(for Redis)能够极大提升公网访问安全性。GaussDB(for Redis)核心价值作为云原生KV数据库,GaussDB(for Redis)有着全面领先于开源Redis的能力: 成本降低75%以上:全量数据落盘,容量利用率高 高稳定性:即使N-1节点故障,全量数据依旧可用 高可靠性:数据三副本冗余存储,无丢失风险 强一致性:强一致性保障,多点访问无脏读问题 强抗写能力:全部节点可写,多线程设计 强扩展能力:节点分钟级、容量秒级扩容目前GaussDB(for Redis)已经凭借出色的产品实力在游戏系统、电商平台、推荐系统、社交媒体、物联网等众多企业级应用场景中发挥巨大作用。新推出的Lua脚本和SSL连接加密两大功能特性,更是为企业数字化转型注入了全新动力。想体验更多产品能力,欢迎前往华为云官网:https://www.huaweicloud.com/product/gaussdbforredis.html
  • [其他] 华为云GaussDB首次亮相2021服贸会,为数字人民币提供坚实数据底座
     9月3日-7日,以“数字开启未来,服务促进发展”为主题的2021中国国际服务贸易交易会(简称服贸会)在北京举行。华为云GaussDB首次亮相大会,并在会上展示了GaussDB云原生创新技术及金融行业的数字化探索和实践,积极打造坚实的数字人民币数据处理底座,推动千行百业数字化发展。2021服贸会华为云GaussDB展区图 聚焦金融领域,打造坚实的数字人民币数据处理底座 与往届不同的是,今年服贸会聚焦行业热点和发展趋势,突出数字经济和数字贸易,在开幕会上,国家决策者还宣布设立北京证券交易所,打造服务创新型中小企业主阵地。这对于深化金融改革,促进科技与资本融合,推动金融创新发展具有重要意义。 作为服务过众多企业数字化转型的利器,华为云GaussDB早在2019年11月,中国人民银行数字货币研究所与华为签署的合作备忘录中,作为数字货币的坚实数据处理底座参与金融科技建设。华为云GaussDB面向金融行业提供了一系列企业级能力,并希望借助服贸会这一国际平台,与更多来自国内外的伙伴交流分享,助力数字领域的全球化合作和数字经济社会的发展,同时响应国家号召,为数字人民币提供坚实的数据处理底座,为企业提供创新型数字服务。 以云原生技术为抓手,推动金融行业数字化转型 华为云GaussDB是华为基于金融政企经验、华为内部流程IT与云底座深耕10年以上的数据库内核研发优化能力,结合云原生与AI技术倾力打造的金融级分布式数据库,满足客户对高性能、高扩展、高可用、高安全的要求,广泛应用于金融、电力、政府、智慧城市等领域。 高性能:具备企业级复杂事务混合负载能力,支持极佳的线性弹性扩展。在银行实测中,GaussDB通过单节点Numa-Aware和分布式GTM-Lite技术,32节点处理能力达1500万tpmC;基于云原生分布式优化器以及节点/算子/指令全并行架构,复杂查询时延降低82%;而且在1000+节点超大分布式集群弹性扩展方面有很好的线性性能提升。 高可用:通过Switch Turbo技术,实现在同城AZ(可用区)内、同城AZ之间、以及异地跨Region之间快速切换,数据0丢失,满足金融级两地三中心高可用诉求。 高安全:基于业界首个纯软全密态数据库技术,实现了数据在内存中的运算态加密,保证全链路数据安全、数据主权遵从以及应用透明。 华为云GaussDB当前已经助力国有银行在其核心交易系统、渠道以及办公系统中完成分布式改造,保障业务安全合规,支持跨AZ/Region容灾;同时利用华为云UGO(数据库和应用迁移)+DRS(数据复制服务)数据迁移组合解决方案,帮助降低了70%存储过程改造成本,极大加速了银行等金融企业的数字化转型进程。 成功不是一蹴而就的,在GaussDB能力背后,是华为在数据库领域布局全球研究、软硬能力协同、坚持10+年战略投入的结果。展望未来,华为公司有能力、有信心在数据库和数据赛道传承华为优良传统,打造以“解决客户实际问题”为原则的世界级产品,助力金融领域数字人民币高质量发展及企业快而好地完成数字化转型,实现互利共赢,共享服务贸易发展机遇,共促数字贸易发展。更多GaussDB详情了解,欢迎前往华为云官网:https://www.huaweicloud.com/product/dbs.html
  • [优秀博文] 华为云PB级数据库GaussDB(for Redis)揭秘第13期: 如何搞定推荐系统存储难题
    一、推荐偏差引发的思考七夕过后,笔者的一个朋友遇到了尴尬事:当女友点开他的购物APP,竟然自动弹出一系列推荐:玫瑰包邮、感动哭了、浪漫小夜灯……回想七夕那天,礼物并没有出现,于是问题出现了:从实招来,你送谁了?为了帮助友人重建信任,笔者进行了一番技术调研:这一定是“推荐系统”出了偏差。推荐系统是一种信息过滤系统,它能够快速分析海量用户行为数据,预测出用户喜好,从而进行有效推荐。在商品推荐、广告投放等业务中,推荐系统责任重大。根据亚马逊2019年度报告,其40%的营收来自内部稳定的推荐系统。在本文开篇的例子中,正是由于推荐系统问题,才导致了尴尬的场面。笔者决定力挺友人,用可靠的知识让人信服!二、推荐系统长什么样通常来说,在一套成熟的推荐系统中,分布式计算、特征存储、推荐算法是关键的三大环节,缺一不可。下面介绍一类完整的推荐系统,在系统中GaussDB(for Redis)负责核心的特征数据存储。该系统也是华为云诸多客户案例中较为成熟的最佳实践之一。第一部分:获取特征数据 原始数据采集点赞、收藏、评论、购买……这些行为都属于原始数据,他们随时都在发生,因此数据量庞大。经由Kafka、Redis Stream等流组件向下游传递,或存入数仓,等待后期提取使用。 分布式计算原始数据离散、含义模糊,无法直接给算法使用。此时就要进行大规模的离线、在线计算,对数据加工。Spark、Flink都是典型的大数据计算组件,其强大的分布式计算能力是推荐系统不可或缺的。 特征数据存储经过加工的数据也就是特征、标签,是推荐算法所需的宝贵数据源。在特定场景下,也可以称之为用户画像、物品画像。这部分数据有着反复共享、复用的价值,不仅能用于训练算法模型,还能为生产环境提供服务。确保特征数据的可靠存储,是推荐系统中极为关键的一环。第二部分:消费特征数据 线下模型训练有了关键的特征数据,业务就可以开始训练算法模型。只有充分利用特征库,以及最新行为数据,不断打磨推荐算法,这样才能提升推荐系统整体水平,最终带给用户更好的体验。 线上推理预测算法模型训练结束后,将被部署到线上生产环境。它将继续利用已有的特征存储,根据用户的实时行为进行推理,快速预测出与用户最匹配的优质内容,形成推荐列表,并推送给终端用户。三、推荐系统的存储难题很显然, “特征数据”在整个系统中起到了关键的衔接作用。由于KV形式的数据抽象与特征数据极为接近,因此推荐系统里往往少不了Redis的身影。在上述系统的方案中,数据库选型为GaussDB(for Redis),而不是开源Redis。原因是开源Redis在大数据场景下还是存在显而易见的痛点:1. 数据无法可靠存储推荐系统其实希望既能使用KV数据库,又能放心将数据长久保存。但开源Redis的能力更侧重于数据的缓存加速,而不是数据存储。而且开源Redis毕竟是纯内存设计,即使有AOF持久化,但通常也只能秒级落盘,数据的保存并不可靠。2. 数据量上不去,成本下不来涉及推荐的业务往往用户体量也不会小,随着业务发展,也会有更多的特征数据需要保存。实际上,相同容量的内存与极速SSD相比,价格贵10倍以上都很正常。于是,当数据量达到几十GB、几百GB,开源Redis会变得越来越“烧钱”,因此一般只当做“小”缓存使用。除此之外,开源Redis自身fork问题导致容量利用率低,硬件资源有很大的浪费。3. 灌库表现不佳特征数据需要定期更新,往往以小时或天为周期进行大规模数据灌入任务。如果存储组件不够“皮实”,大量写入造成数据库故障,将导致整个推荐系统发生异常。这就可能造成开篇提到的尴尬用户体验。开源Redis抗写能力并不强,这是由于集群中有一半节点是备节点,它们只能处理读请求。当大批量写入到来时,主节点容易出问题,引发连锁反应。理论上,架构设计并不是越复杂越好,如果可以,谁不想使用一种既能兼顾特征数据KV类型、成本友好、性能又有保障的可靠数据存储引擎?四、相见恨晚,遇见GaussDB(for Redis)与开源Redis不同,GaussDB (for Redis)基于存算分离架构,为推荐系统这一类大数据场景带来关键的技术价值: 可靠存储:数据命令级落盘,在底层存储池中三副本冗余存储,真正做到了0丢失。 降本增效:高性能持久化技术+细粒度存储池,帮助企业将数据库使用成本降低75%以上。 抗写能力强:多线程设计+全部节点可写,抗写能力足够强大,从容应对Spark灌库压力和实时更新。华为云企业级数据库GaussDB (for Redis)提供稳定、可靠的KV存储能力,正是推荐系统核心数据的极佳选型。五、完美衔接,实现想存就存的自由其实,在Spark后端接入Redis已经成为一种主流方案,而使用Flink从Redis中提取维度表也是很常见的用法。它们也都提供了用于接入Redis的连接器。GaussDB(for Redis)完全兼容Redis协议,即开即用,用户随时都可以快速创建实例并接入业务。1. Spark-Redis-ConnectorSpark-Redis-Connector完美实现了Spark RDD、DataFrame到GaussDB(for Redis)实例中String、Hash、List、Set等结构的映射。用户可使用熟悉的Spark SQL语法轻松访问GaussDB(for Redis),完成特征数据灌库、更新、提取等关键任务。使用方法非常简单:1)当需要读取Hash、List、Set结构到Spark RDD时,分别只用一行即可搞定:2)而当推荐系统进行灌库或特征数据更新时,可以按如下方式轻松完成写入:2. Flink-Redis-ConnectorFlink这款计算引擎流行程度不亚于Spark,它同样有成熟的Redis连接方案。使用Flink提供的Connector或结合Jedis客户端,都可轻松完成Flink到Redis的读写操作。以使用Flink统计单词频次的简单场景为例,数据源经过Flink加工后,便可轻松存入GaussDB(for Redis)中。六、结语大数据应用对核心数据的存储有着很高的要求,云数据库GaussDB(for Redis)拥有存算分离的云原生架构,在完全兼容Redis协议的基础上,同时做到了稳定性、可靠性的全面领先。面对海量核心数据存储,它还能为企业带来相当可观的成本节约。面向未来,GaussDB(for Redis)极有潜力成为下一个大数据浪潮的新星。七、附录本文作者:华为云数据库GuassDB(for Redis)团队杭州/西安/深圳简历投递:yuwenlong4@huawei.comGaussDB(for Redis)产品主页:https://www.huaweicloud.com/product/gaussdbforredis.html更多技术文章,关注高斯Redis官方博客:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813
  • [技术干货] 【云图说】第223期 初识云数据库GaussDB(for Redis)
    云数据库GaussDB(for Redis)介绍页入口,详情请点击链接云数据库GaussDB(for Redis)成长地图入口,详情请点击链接小云妹又来啦,生命不息,学习不止,今天要着重介绍的是我们的——云数据库GaussDB(for Redis)有着稳定、可靠的企业级产品定位,它完全兼容开源Redis,还能为企业带来降本增效的重要价值。稳定实用就是我~~~
  • [技术干货] 【云图说】第223期 初识云数据库GaussDB(for Redis)
    云数据库GaussDB(for Redis)介绍页入口,详情请点击链接云数据库GaussDB(for Redis)成长地图入口,详情请点击链接小云妹又来啦,生命不息,学习不止,今天要着重介绍的是我们的——云数据库GaussDB(for Redis)有着稳定、可靠的企业级产品定位,它完全兼容开源Redis,还能为企业带来降本增效的重要价值。稳定实用就是我~~~
  • [技术干货] 华为云旗舰Redis,分布式云数据库GaussDB(for Redis)
    开源Redis痛点开源Redis的RESP协议友好、命令种类丰富,支撑业务场景众多,很受开发者青睐。然而,近年企业规模都在逐渐扩大,传统缓存逐渐难以支撑业务。有以下几点主因: 容量有限,业务架构很难对“缓存”要求更多生产环境最怕OOM,而开源Redis一旦宕机,会导致内存数据丢失。因此,即使开源Redis能存各种丰富类型数据,业务也不敢太“PUSH”。 内存昂贵,成本降不下来256G内存条价格比同等容量SSD硬盘贵30倍,而开源Redis独有的fork机制导致内存平时至少要预留50%备用。这是货真价实的“经费在燃烧”。 可靠性不足如果你经常关注技术媒体,会发现缓存雪崩、主从同步脱节等故障已是老生常谈。相比关系型磁盘数据库,有经验的工程师都会觉得开源Redis真的不够“皮实”。为解决痛点,业界各显神通在这样的背景下,出现了一种新型Redis,主打大容量持久化、分布式高并发。业界也有多款开源项目,如SSDB、kvrocks、pika、ARDB等。他们有相同的设计理念——全量数据落盘。听起来容易,其实难度很高,因为要解决协议兼容、集群管理、故障接管、性能稳定等诸多技术问题。云原生的GaussDB(for Redis) 华为云紧跟业界趋势,也推出了自研的大容量Key-Value数据库旗舰——云原生分布式数据库GaussDB(for Redis)。从使用角度,这款产品与原生Redis没有任何差异。这是因为RESP协议兼容做得好,业务无需改代码,切换到GaussDB(for Redis)很轻松。从技术角度,相比开源原生Redis以及业界各类新型自建Redis,GaussDB(for Redis)是一款技术成熟的云数据库产品,它给客户带来明确的价值: 解决运维之痛:一套实例 = 拥有一键备份/快速恢复、可视化监控、故障预警保护、API查询实例信息等等充满“人情味”的功能。这也是云原生的魅力所在。 低成本:GaussDB品牌先进云原生架构 + 分布式大容量存储池,根本上解决开源Redis内存昂贵、使用率低的成本问题,成本可降低75%。省下经费,让业务更能自由发挥。 高性能:存储层RDMA高速网络互连 + 计算层冷热分离设计,充分利用物理资源,保障性能稳健。 强一致性:基于GaussDB品牌独有架构实现的强一致性,是业界最高标准,这是一个高门槛技术。实际上,它本就是很刚需的业务需求、运维需求。电商秒杀活动中,开源Redis做限流器,很容易因主从节点弱一致问题导致缓存击穿;即使是MySQL,运维也尝尝要利用MHA等复杂外部组件来“弥补”一致性缺失。 超高可靠:计算层采用分布式架构,实现了故障后的秒级接管。即使只剩一个节点ONLINE,业务也可正常访问。存储池为每份数据离散保存三副本,即使硬件故障,也能确保数据0丢失。没有“意外”能让上层业务停摆。 弹性伸缩:深知业务发展之道,在数据量拓展、高峰时段,一键即可快速扩容。内部搭载高性能proxy集群,自动数据分片能力,随之而来的是全局负载均衡,避免资源浪费。应用场景更加广阔对于过度依赖MySQL+Redis组合的传统业务架构,如果只想临时缓存下数据,开源Redis的确能提供急速访问性能。毕竟用内存承载全量数据,这不难实现。实际上,如果重新思考架构设计,你会发现: 游戏业务直接使用Redis的hash数据结构存储用户动态、个性签名,使用zset存储天梯排名,多自由; Feed流业务直接使用stream来做推拉,多适合; 地图相关业务直接使用Redis GEO来存储定位,多完美。结束语实际上,大容量Redis已是趋势,尤其是在云原生加持下,试想能节省多少硬件成本、运维成本?华为云GaussDB(for Redis)设计初衷很简单,就是让Redis这一航道长青,为每一个需要Redis的用户解决成本之痛,运维之痛。了解更多产品信息:https://www.huaweicloud.com/product/gaussdbforredis.html为了让更多企业可以体验到GaussDB(for Redis)魅力所在,华为云数据库迁移上云专场推出钜惠活动,GaussDB(for Redis)低至637元,包年享4折!详情请点击链接→https://activity.huaweicloud.com/dbs_Promotion/index.html
  • [行业资讯] 华为云GaussDB发布5大核心技术,打造行业领先的技术竞争力
    6月20日,在ACM SIGMOD国际学术会议“中国数据库高峰论坛”,华为云数据库产品部总经理苏光牛发表了《云数据库的创新与发展》主题演讲,分享了华为云GaussDB数据库5大创新技术,坚持生态开放理念,加速千行百业数字化转型。数字化时代下,企业对云数据库提出了更高要求,既希望云数据库能满足海量业务场景下的复杂需求,又希望可以降低使用成本,提升业务效率,保障数据安全。云数据库也成为了产业升级转型和重塑产业格局的关键抓手。苏光牛提到,华为很早就开始重视数据库的投入和发展,从2007年开始研究数据库,到2020年统一数据库品牌GaussDB,华为持续战略投入数据库,并布局全球7大研究所,汇聚了一批海内外数据库领域专业人才,同时布局前沿技术,积极打造行业领先的技术竞争力。华为云数据库产品部总经理苏光牛发表演讲华为云GaussDB聚焦业务新场景,打造了以下5大核心技术竞争力: 金融级高可用:华为云GaussDB提供了多种高可用方案,包括AZ内高可用、跨AZ多活、异地跨Region容灾的两地三中心容灾方案,满足金融级监管要求,并且历经银行核心关键业务严苛考验。 软硬协同全栈能力:依托华为全产业链优势,垂直整合华为软硬件全栈资源,不断提升竞争力。 企业级混合负载:分布式+全并行架构设计,提供事务处理与复杂查询高性能,支持1000+超大分布式集群能力,可以轻松应对海量高并发数据处理和复杂查询场景的考验。 全密态数据库安全:华为云GaussDB实现从密钥处理、查询、内存、存储等全方位的安全合规和隐私保护,包括链路安全、存储安全、访问安全,同时对应用实现尽可能的透明,保证客户隐私安全。 智能运维与调优:结合AI技术,实现数据库自动优化与调优等功能,让数据库管理变得更加智能高效。数据库呼唤开放的生态,华为也始终坚持开源开放理念,积极构建良好的数据库生态关系。华为云GaussDB目前已支持华为自有openGauss生态与主流开源数据库生态(如MySQL、MongoDB、Redis、InfluxDB、Cassandra等)。华为还将GaussDB部分核心能力开源到openGauss社区,鼓励合作伙伴基于开源openGauss发行属于自己的商业版本。此外,华为持续和高校联合开课,致力于培养数据库人才,繁荣数据库生态。目前,华为云GaussDB已在1000+大客户规模商用,遍布金融、政府、电信、能源、交通、电商等。另外还在SIGMOD、ICDE、VLDB等国际知名学术会议发表累计50+篇创新成果论文,内容涵盖系统架构、事务处理、AI自治、安全等。面向未来,华为云GaussDB将持续打造领先技术和服务,与更多合作伙伴一起共创时代新价值,共赢未来新机遇!
  • [技术干货] 华为云PB级数据库GaussDB(for Redis)揭秘第二期:Redis消息队列Stream的应用探讨
    引言:Redis Stream是Redis 5.0引入的一种新的数据类型,其本质是一个消息队列,类似于 kafka等消息中间件。它提供了消息的落地存储功能,并实现了类似kafka消费组和消费者的功能。与kafka相比,Redis Stream同样拥有强大的功能,但因原生Redis无法有效支持大规模数据存储,成本昂贵,并存在数据丢失/不一致风险等原因,导致其未能流行起来。本文将对Stream的常用命令和应用场景进行介绍,并探讨原生Redis Stream消息队列的缺陷以及GaussDB(for Redis)提供的解决方案,供大家学习和选用。一、Redis Stream简介与Pub/Sub相比,Redis Stream 具有消息的落地存储功能,每一个客户端能访问任意时刻的消息,并且能记录每一个客户端的访问位置,还能保证消息不会丢失。Redis Stream 的结构如下所示,它有一个消息链表,将所有加入的消息都链接起来,每个消息都有唯一的 ID 和对应的内容。如图所示,每一个Stream队列包含多条消息,每条消息由唯一的ID进行标识,由时间戳和序列号组成,例如1627849609889-0。每条消息以追加的方式添加到Stream队列中。同一个Stream队列可以包含多个消费组(Consumer Group),每个消费组的状态都是独立的,同一个Stream队列的消息可以被多个消费组重复消费。同一个消费组又包含多个消费者(Consumer),这些消费者之间是竞争关系,不同消费者不会重复消费同一条消息,任意一个消费者读取了队列中的一条消息都会使消费组中的游标last_delivered_id往前移动。该方式提高了并发效率,例如,多个进程并发处理Stream队列中的消息。每个消费者中维持一个状态变量pending_ids,简称为PEL(Pending Entries List),记录了当前已经被客户端读取的但尚未被ACK的消息,确保消息被客户端成功消费。Redis Stream命令可以分为消息队列命令和消费者命令两类,如下所示:以即时通讯中的聊天室场景为例,使用Redis Stream作为中间件,实现聊天室的发言以及信息查看。使用XADD命令进行发言使用XLEN命令获取聊天室发言的数量使用XRANGE获取消息队列的消息使用XREAD命令读取消息。可以在不设置消费组和消费者的情况下,使用XREAD的命令进行消息读取,此时Stream队列类似于一个普通的列表(list)。更多的Redis Stream命令使用请参考官方文档(https://redis.io/commands/xread)。二、应用场景由于Redis Stream天然有序,特别适合存储时序数据,应用场景包括即时通讯、智慧医疗、流量削峰、智慧城市等领域。(1)即时通讯:微信、QQ等是我们日常生活中常用的通讯软件,常用的聊天方式包含点对点通讯和群聊两种方式。下图是一个群聊的模型图,当采用Redis Stream作为通讯的中间件,创建一个群聊时,在Redis中对应地为该群聊创建一个Stream队列。在发送消息时,将每个用户的消息按照时间顺序添加到Stream队列中,保证了消息的有序性。由于Stream是一个持久化的队列,无论是在线还是离线状态,每个用户可以多次查看历史消息,保证了通讯的完整性。(2)智慧医疗:医疗行业的信息化,可以更好地为服务于每一个人。为每一个人从出生起建立一份健康档案,记录相应的健康信息,如体检报告、诊断报告、用药信息、以及智能终端实时上传的健康指标。这些信息都是一些时序数据,同样可以采用Redis Stream来实现智慧医疗系统。建立起智慧医疗系统后,使用终端可以查看所有的医疗信息,并会提示患者按时吃药,在终端上传身体指标异常时,会自动报警并预约挂号。现阶段每个医院都有自己的信息系统,不同的医院很难查到同一个患者的医疗信息,在未来,医疗上云将有利于解决医疗信息孤岛,更好的帮助每一位患者。(3)流量削峰:在常见的秒杀活动或团购中,如春运抢票、商城促销等,通常短时间内有大量的流量,导致系统崩溃。由于每一个用户在请求时对应唯一的时间戳,所有的请求都有一个先后顺序,同样可以采用Redis Stream作为中间件,将请求加入到Redis Stream消息队列。将消息转存到消息队列间接提供给应用,而非直接发送给应用,可以防止大流量冲击导致的系统崩溃。当消息队列中的请求数量达到规定的最大值时,直接回复客户端抢购失败。三、原生Redis是否真的适用于以上场景?如上应用场景具有数据规模大、数据持续增长的特点,虽然原生Redis有良好的设计初衷,但是并不能解决实际问题。具体体现在:无法有效应对大规模数据:原生Redis是一个基于内存的数据库,单个节点存储容量有限,当扩展至TB级别的集群,将会出现管理困难,运维成本高等问题。集群扩容影响业务性能:原生Redis在进行集群扩容时,需要重新划分hash槽并进行数据迁移,必定会影响业务性能。数据可能会丢失:原生Redis虽然可以采用RDB和AOF的方式对数据进行持久化,但是并不会实时地将每一条命令写入到硬盘中,当出现掉电或集群崩溃的情况,必定会丢失一部分数据,对于类似智慧医疗场景,是难以忍受的。除此以外,必须考虑数据库系统的可用性、数据一致性、成本和备份恢复能力等情况:可用性: 原生Redis若采用一主一备的集群模式,当一对主备节点下线,集群部分数据将不可用。数据一致性:当主节点宕机,主备节点切换,数据存在没有完全同步的情况。成本:原生Redis是一种内存型数据库,当内存容量扩展至TB级别,成本将非常昂贵。备份恢复:需要人工连接数据库执行 SAVE或BGSAVE命令,不能支持定期自动备份,在恢复到新实例时需要手动拷贝备份数据。四、是否有更好的解决方案?在以上场景中,亟需一种能够存储和处理大规模Stream数据、鲁棒性强、且成本低廉的数据库系统。而GaussDB(for Redis)(下文简称高斯Redis)正是以上场景中一种很好的应用解决方案。高斯Redis是华为云数据库团队自主研发的兼容Redis协议的云原生数据库,该数据库突破原生Redis的内存限制,可轻松扩展至PB级存储,具有秒扩容、超可用、强一致和低成本等特点。五、总结Redis Stream可以广泛应用在即时通讯、智慧医疗、流量削峰等领域。在面对大规模的Stream数据时,原生Redis存在成本过高、容量太小、可用性差、数据不一致等问题,无法适用于海量消息队列的场景。与原生Redis相比,高斯Redis具有海量存储,低成本,可持久化等优点,可做为比原生Redis更理想的Stream队列承载方案。