华为云 PB 级数据库 GaussDB(for Redis) 揭秘第九期:与 HBase 的对比
摘要:高斯 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
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/29e2c18b052cbfc1dd1a7d2ed】。文章转载请联系作者。
评论