摘要: 高斯Redis,兼具开源Redis和HBase各自优点,提供成本更低、性能更好、灵活性更强的数据库服务!

本文分享自华为云社区《华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比》,原文作者:高斯Redis官方博客。

0. 引言

HBase是一个分布式的、面向列的开源数据库,基于Hadoop生态圈,在NoSQL蓬勃发展的今天被国内外众多公司选择,应用于现代互联网系统的不同业务。本文简要描述了HBase的基本架构和使用场景,重点分析了HBase关键特性在此场景下的表现,以及HBase在使用上尚存的痛点;同时介绍了华为自研的强一致、持久化 NoSQL数据库GaussDB(for Redis)(下文简称高斯Redis)在以上场景中的表现,以及对于HBase痛点问题的改善。

1. HBase系统简述

HBase的物理结构主要包括ZooKeeper、 HMaster、 RegionServer、HDFS 等组件。 ZooKeeper 用以实现 HMaster 的高可用、 RegionServer 的监控、元数据的入口以及集群配置的维护等工作。HMaster的作用是维护整个集群的Region信息,处理元数据变更及负载均衡工作。RegionServer是直接处理用户读写请求的节点,实际处理所分配Region的读写、分裂等工作,并使用WAL实现容错机制。HDFS提供最终的底层数据存储服务,提供元数据和表数据的底层分布式存储服务,同时利用数据多副本,保证的高可靠和高可用性。

在逻辑结构中,RowKey是表的主键,并按照字典序进行排列,HRegion 达到一定大小后也会按照 RowKey 范围进行裂变。ColumnFamily在纵向上对表进行切分,将多个Column分成一组进行管理,在HBase中,ColumnFamily是表的schema而Column不是。Cell则是保存的具体value,在HBase中,所有的数据都是以字节码的方式进行存储。

2.HBase大显身手

2.1标签数据的存储

标签数据是稀疏矩阵的代表,描述了实体的各类属性,主要应用于智能推荐、商务智能或营销引擎等领域。

三个不同的用户在同一公司旗下的不同APP中留下了大量的行为数据,这些数据中包含了直接填写的用户资料、使用APP的具体行为以及领域专家对某些现象的标记,通过后台的标签算法可以得到这样的数据:

我们能发现,对用户行为采集存在局限性,因此所能得到的标签种类各不相同,表中大量的数据项只能被置空,也就是所谓的稀疏矩阵。而且随着用户更深度的使用APP,可以预见到,对用户感兴趣领域/不感兴趣领域会逐渐被发掘,那么表的列也会随之增加。

这样的特点对于MySQL是灾难性的,这是因为在MySQL建表时就必须定义表结构,属性的动态增删是巨大的工作量,同时大量NULL值的存储会导致存储成本变得难以接受。但是使用HBase存储时,未指定value的列不会占用任何的存储空间,因而可以将有限的资源高效利用,且HBase表在创建时只需指定ColumnFamily,而对于Column的增删极为容易,有利于应对未来属性的扩张。

2.2 车联网数据的收集

车联网系统是利用车载设备收集车辆运行时产生的各项数据,通过网络实时上传,在平台进行动态分析和利用。

我们可以发现,车联网系统所面对的数据特点是大量车辆终端高并发的不间断写入TB级甚至PB级的数据,而且对于实时分析来说,为了保证分析结果的时效性,又要求查询的低时延响应。

HBase采用LSM存储模型,可以从容应对高并发写入的场景,同时也能保证读时延在可接受的范围内。同时HBase具有良好的水平扩展能力。通过增减RegionServer来实现对存储容量动态调整,满足对使用成本的要求。

2.3 交易记录的保存

在移动支付领域,保证历史交易记录等敏感信息的安全性是一个重要的话题。当数据中心遭遇自然灾害、外部攻击时,必须保证这些信息不丢,而且从业务角度要保证RTO尽可能短、RPO尽可能为0。

HBase基于底层的HDFS作为存储系统,HDFS实现了三副本策略,按照一定的规则将副本放在不同的节点或机架中,本身具有较高的容灾能力。在工程实践中,也产生了Region replica、主备集群、互备双活等策略来尽可能进行灾备并保证高可用。

3.HBase并不全能

从上文三个例子可以看出,HBase基于其本身的设计,在稀疏矩阵的存储、抗高并发大流量写入、高可用和高可靠场景下表现得相当优秀,但这并不意味着HBase可以没有任何弱点的适应所有场景。

3.1HBase的阿克琉斯之踵

1. 朱丽叶暂停

Java系统绕不开Full GC的讨论。HBase在Full GC造成STW时,ZooKeeper将收不到来自RegionServer的心跳,进而将此节点判定为宕机,由其他节点接管数据,当Full GC结束后,RegionServer为防止脑裂而主动自杀,称之为朱丽叶暂停。这类问题一般需要资深的java程序员根据业务场景进行细致的GC策略调优才能尽可能避免。

2. 数据类型少

HBase支持存储的类型是字节数组,在使用中需要将字符串、复杂对象、甚至图像等数据转化为字节数组进行存储。但是这样的存储只能表示松散的数据关系,对于集合、队列、Map等数据结构或数据关系,则需要开发人员编码实现转换逻辑才能进行存储,灵活性较差。

3. 性能之瓶颈

HBase是按照RowKey的字典序分割为Region进行存储的,不佳的RowKey设计方案会造成负载不均,请求大量打到某一个Region形成热点,那么所在RegionServer的IO有可能被打爆。

RegionServer掉线后,需要由ZooKeeper发现节点宕机,将其负责的数据移动到其他节点接管,并对meta表中的Region信息进行修改。在此过程中,RegionServer上的数据将变得不可用,对于这部分数据的请求会被阻塞。

3.2 Redis的伊卡洛斯之翼

3.2.1 开源Redis的良好表现

开源Redis的特性在一定程度上解决了HBase的痛点问题,因其具有以下优点:

1. 更丰富的数据类型

Redis 5.0协议中包含了String、List、Set、ZSet、Hash、Bit Array、HyperLogLog、Geospatial Index、Streams九种数据类型,以及建立在这些数据类型上的相关操作。与HBase的单一数据类型相比,Redis给了开发人员更多的选择空间来表达数据和数据间的相互关系。

2. 纯内存的丝滑感受

开源Redis的本质是一个key-value类型的内存数据库,整个数据库都加载在内存中进行操作。这也就意味着Redis的响应速度和处理能力远超过需要进行磁盘IO的HBase,目前大量的测试结果都表明,开源Redis的性能可以达到每秒10万次读写。

3.2.2 开源Redis的显著弱点

纯内存的操作也使得开源Redis有无法避免的弱点,主要体现在以下两方面:

1. 大数据量下的噩梦

当数据量持续增大时,有限的内存成为使用限制。此时必须使用更大容量的内存才能完成数据的全量加载,而内存价格远高于磁盘价格,会导致使用成本的激增。同时常见的服务器内存多是GB级,也严重限制了开源Redis在高量级数据库领域的竞争力。

2. 断电后该何去何从

纯内存操作的另一弊端是宕机后数据会全部丢失。现有的解决方案是使用AOF或RDB的方式将数据持久化,进程重启后可以在内存中将数据恢复。但这两种方式并不完备,AOF是执行命令的集合,因此恢复速度相对较慢;RDB是定期dump内存数据,因此存在数据丢失的风险。除此之外,在最坏场景下需要预留一半内存,降低了内存的使用率。

4.高斯Redis:成年人不做选择题

HBase和开源Redis各有所长,这时一句熟悉的话在脑海中浮现:小孩子才做选择题,成年人当然是全都要,高斯Redis的兼具二者优点,更好的满足了对数据库服务的需求。

  • 兼容Redis5.0协议

延续开源Redis的丰富数据类型,为描述数据和数据关系提供更多选择。例如在稀疏矩阵场景使用Hash类型,甚至无需定义HBase表ColumnFamily,可以更灵活的进行数据组织。

  • 性能追平开源Redis

参考【华为云高斯DB(for Redis)与开源Redis集群性能对比】可以看出,高斯Redis与开源Redis的性能几乎相同,在大流量高并发的场景中,可以提供比HBase更好的读写表现。

  • 更高的灾备可靠性

高斯Redis基于华为自研的分布式、强一致数据湖DFV构建的存储层,在部分局点的已经上线了3AZ特性,AZ间做到风火水电的物理隔离,一个AZ的故障不会影响到其他AZ,与HBase相比更好保证了关键数据的可靠性。

  • 秒级弹性伸缩

高斯Redis使用存算分离架构,数据下沉至存储池,计算节点扩缩容仅修改映射无需搬迁数据,实现秒级平滑伸缩,不存在HBase在Region上下线时出现的数据不可用问题。

  • 低成本海量持久化存储

全量数据经过逻辑和物理压缩,将落入共享存储池DFV持久化存储,无宕机数据丢失问题,每GB的综合成本不到开源Redis的十分之一。实际应用中可根据业务需要随时对DFV容量进行扩容,不存在开源Redis存储受限的问题。

  • 自动化监控运维等其他优势

高斯Redis配套全面的监控系统可对请求时延等关键性能指标可视化监控,同时可实现故障节点自动摘除、平滑移动、自动告警、自动恢复。此外,高斯Redis利用hash策略对数据进行均衡,与HBase相比更好的避免了热点问题,而且不存在Full GC烦恼。

5.结语

高斯Redis在兼容Redis5.0协议的基础上,兼具开源Redis和HBase各自优点,结合华为自研DFV存储的相关特性,规避HBase和开源Redis在典型场景下的弱点,提供成本更低、性能更好、灵活性更强的数据库服务。

6.附录

本文作者:华为云高斯Redis团队。

杭州西安深圳简历投递:yuwenlong4@huawei.com

更多技术文章,请关注高斯Redis官方博客:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813

高斯Redis官方首页:https://www.huaweicloud.com/product/gaussdbforredis.html

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

华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比的更多相关文章

  1. 华为云PB级数据库GaussDB(for Redis)揭秘第八期:用高斯 Redis 进行计数

    摘要:高斯Redis,计数的最佳选择! 一.背景 当我们打开手机刷微博时,就要开始和各种各样的计数器打交道了.我们注册一个帐号后,微博就会给我们记录一组数据:关注数.粉丝数.动态数-:我们刷帖时,关注 ...

  2. 华为云PB级数据库GaussDB(for Redis)揭秘第七期:高斯Redis与强一致

    摘要:在KV数据库领域,"强一致性"不仅是一个技术名词,它更是业务与运维的重要需求. 清明刚过,五一假期就要来了.大好春光,不如去婺源看油菜花吧!小云迅速打开APP刷出余票2张,赶 ...

  3. 华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历

    摘要:华为云数据库GaussDB(for Cassandra) 是一款基于计算存储分离架构,兼容Cassandra生态的云原生NoSQL数据库:它依靠共享存储池实现了强一致,保证数据的安全可靠. 本文 ...

  4. 华为云企业级Redis评测第一期:稳定性与扩容表现

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

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

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

  6. 即时通讯系统为什么选择GaussDB(for Redis)?

    摘要:如果你需要一款稳定可靠的高性能企业级KV数据库,不妨试试GaussDB(for Redis). 每当网络上爆出热点新闻,混迹于各个社交媒体的小伙伴们全都开启了讨论模式.一条消息的产生是如何在群聊 ...

  7. 华为云企业级Redis揭秘第16期:超越开源Redis的ACID"真"事务

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

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

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

  9. 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?

    摘要:近日,华为云数据库业务总裁苏光牛在ACMUG中国MySQL用户组主办的 "华为云专场" 技术沙龙中分享了华为云数据库重磅新品GaussDB的核心能力与竞争优势.那么, Gau ...

  10. 揭秘GaussDB(for Redis):全面对比Codis

    摘要:Codis集群在国内Redis生态圈很流行,社区已停止维护.本文从架构和特性两方面对比,带你感受华为云GaussDB(for Redis)的全新价值. 本文分享自华为云社区<华为云Gaus ...

随机推荐

  1. NativeBuffering,进一步提升字符串的序列化性能

    在<NativeBuffering,一种高性能.零内存分配的序列化解决方案[性能测试篇]>我比较了NativeBuffering和System.Text.Json两种序列化方式的性能,通过 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (131)-- 算法导论11.2 3题

    三.用go语言,Marley 教授做了这样一个假设,即如果将链模式改动一下,使得每个链表都能保持已排好序的顺序,散列的性能就可以有较大的提高.Marley 教授的改动对成功查找.不成功查找.插入和删除 ...

  3. L2-033 简单计算器

    #include <bits/stdc++.h> using namespace std; int cal(int a, int b, char c) { int t; if (c == ...

  4. Flask Session 登录认证模块

    Flask 框架提供了强大的 Session 模块组件,为 Web 应用实现用户注册与登录系统提供了方便的机制.结合 Flask-WTF 表单组件,我们能够轻松地设计出用户友好且具备美观界面的注册和登 ...

  5. 运维初级实践——Linux系统命令教程

    区块链运维工程师在Linux环境中常用的命令.快捷键,以及安装软件和文件管理的最佳实践. 1. 常用Linux命令 1.1 文件和目录操作 ls:列出目录内容 cd:更改目录 mkdir:创建新目录 ...

  6. 解决Vscode中代码格式化时老换行

    问题: 小颖用vscode的格式化代码后发现代码老是换行,有时看起来就很难受,比如下面的: 问度娘后终于弄好啦,记录下,省的以后换电脑了重装了vscode又不会了,主要是百度给的解决方法好几个,但有的 ...

  7. .NET微信网页开发相关文章教程

    前言 今天我们主要总结一下.NET微信网页开发的相关文章教程. 微信网页开发详细文档可以看微信官方文档:https://developers.weixin.qq.com/doc/offiaccount ...

  8. JQuery_1

    1.概念:一个JavaScript框架.简化js开发 JavaScript框架:本质上就是一些js文件,封装了js的原生代码. 2.快速入门: 1.步骤 1.下载JQuery jquery.xxx.j ...

  9. Spring Framework系统架构

  10. GaussDB(DWS)中的分布式死锁问题实践

    本文分享自华为云社区<GaussDB(DWS)中的分布式死锁问题实践>,作者: 他强由他强 . 1.什么是分布式死锁 分布式死锁是相对于单机死锁而言,一个事务块中的语句,可能会分散在集群里 ...