写点什么

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

发布于: 2 小时前

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


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

1、引言

       

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

2、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 中,所有的数据都是以字节码的方式进行存储。

3、HBase 大显身手

3.1 标签数据的存储

        

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



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



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

       

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

3.2 车联网数据的收集

        

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



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

       

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

3.3 交易记录的保存

       

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


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

4、HBase 并不全能

      

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

4.1 HBase 的阿克琉斯之踵

    

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 上的数据将变得不可用,对于这部分数据的请求会被阻塞。

4.2 Redis 的伊卡洛斯之翼

4.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 万次读写。

4.2.2 开源 Redis 的显著弱点

       

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

    

1. 大数据量下的噩梦

       

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

    

2. 断电后该何去何从

       

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

5、高斯 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 烦恼。

6、结语

       

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

7、附录


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

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

更多技术文章,请关注高斯 Redis 官方博客

https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813

高斯 Redis 官方首页

https://www.huaweicloud.com/product/gaussdbforredis.html


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

发布于: 2 小时前阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比