摘要: 高斯Redis,兼具开源Redis和HBase各自优势,提供成本更低、性能更好、灵活性更强的数据库服务!
本文分享自华为云社区《华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比》,原文做者:高斯Redis官方博客。html
HBase是一个分布式的、面向列的开源数据库,基于Hadoop生态圈,在NoSQL蓬勃发展的今天被国内外众多公司选择,应用于现代互联网系统的不一样业务。本文简要描述了HBase的基本架构和使用场景,重点分析了HBase关键特性在此场景下的表现,以及HBase在使用上尚存的痛点;同时介绍了华为自研的强一致、持久化 NoSQL数据库GaussDB(for Redis)(下文简称高斯Redis)在以上场景中的表现,以及对于HBase痛点问题的改善。java
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中,全部的数据都是以字节码的方式进行存储。redis
标签数据是稀疏矩阵的表明,描述了实体的各种属性,主要应用于智能推荐、商务智能或营销引擎等领域。算法
三个不一样的用户在同一公司旗下的不一样APP中留下了大量的行为数据,这些数据中包含了直接填写的用户资料、使用APP的具体行为以及领域专家对某些现象的标记,经过后台的标签算法能够获得这样的数据:sql
咱们能发现,对用户行为采集存在局限性,所以所能获得的标签种类各不相同,表中大量的数据项只能被置空,也就是所谓的稀疏矩阵。并且随着用户更深度的使用APP,能够预见到,对用户感兴趣领域/不感兴趣领域会逐渐被发掘,那么表的列也会随之增长。数据库
这样的特色对于MySQL是灾难性的,这是由于在MySQL建表时就必须定义表结构,属性的动态增删是巨大的工做量,同时大量NULL值的存储会致使存储成本变得难以接受。可是使用HBase存储时,未指定value的列不会占用任何的存储空间,于是能够将有限的资源高效利用,且HBase表在建立时只需指定ColumnFamily,而对于Column的增删极为容易,有利于应对将来属性的扩张。segmentfault
车联网系统是利用车载设备收集车辆运行时产生的各项数据,经过网络实时上传,在平台进行动态分析和利用。数组
咱们能够发现,车联网系统所面对的数据特色是大量车辆终端高并发的不间断写入TB级甚至PB级的数据,并且对于实时分析来讲,为了保证分析结果的时效性,又要求查询的低时延响应。安全
HBase采用LSM存储模型,能够从容应对高并发写入的场景,同时也能保证读时延在可接受的范围内。同时HBase具备良好的水平扩展能力。经过增减RegionServer来实现对存储容量动态调整,知足对使用成本的要求。
在移动支付领域,保证历史交易记录等敏感信息的安全性是一个重要的话题。当数据中心遭遇天然灾害、外部攻击时,必须保证这些信息不丢,并且从业务角度要保证RTO尽量短、RPO尽量为0。
HBase基于底层的HDFS做为存储系统,HDFS实现了三副本策略,按照必定的规则将副本放在不一样的节点或机架中,自己具备较高的容灾能力。在工程实践中,也产生了Region replica、主备集群、互备双活等策略来尽量进行灾备并保证高可用。
从上文三个例子能够看出,HBase基于其自己的设计,在稀疏矩阵的存储、抗高并发大流量写入、高可用和高可靠场景下表现得至关优秀,但这并不意味着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上的数据将变得不可用,对于这部分数据的请求会被阻塞。
开源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万次读写。
纯内存的操做也使得开源Redis有没法避免的弱点,主要体如今如下两方面:
1. 大数据量下的噩梦
当数据量持续增大时,有限的内存成为使用限制。此时必须使用更大容量的内存才能完成数据的全量加载,而内存价格远高于磁盘价格,会致使使用成本的激增。同时常见的服务器内存可能是GB级,也严重限制了开源Redis在高量级数据库领域的竞争力。
2. 断电后该何去何从
纯内存操做的另外一弊端是宕机后数据会所有丢失。现有的解决方案是使用AOF或RDB的方式将数据持久化,进程重启后能够在内存中将数据恢复。但这两种方式并不完备,AOF是执行命令的集合,所以恢复速度相对较慢;RDB是按期dump内存数据,所以存在数据丢失的风险。除此以外,在最坏场景下须要预留一半内存,下降了内存的使用率。
HBase和开源Redis各有所长,这时一句熟悉的话在脑海中浮现:小孩子才作选择题,成年人固然是全都要,高斯Redis的兼具两者优势,更好的知足了对数据库服务的需求。
延续开源Redis的丰富数据类型,为描述数据和数据关系提供更多选择。例如在稀疏矩阵场景使用Hash类型,甚至无需定义HBase表ColumnFamily,能够更灵活的进行数据组织。
参考【华为云高斯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烦恼。
高斯Redis在兼容Redis5.0协议的基础上,兼具开源Redis和HBase各自优势,结合华为自研DFV存储的相关特性,规避HBase和开源Redis在典型场景下的弱点,提供成本更低、性能更好、灵活性更强的数据库服务。
本文做者:华为云高斯Redis团队。
杭州西安深圳简历投递:yuwenlong4@huawei.com
更多技术文章,请关注高斯Redis官方博客:
https://bbs.huaweicloud.com/c...
高斯Redis官方首页:
https://www.huaweicloud.com/p...