加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

何昱晨:替代Redis与HBase?新一代大数据存储Pegasus

发布时间:2022-11-17 17:00:48 所属栏目:大数据 来源:转载
导读: 导读:今天和大家分享一下Pegasus的设计实现和开源之路。分以下四个部分:
01
Pegasus基本介绍
1. 背景
在目前的大数据生态中,我们已经有许多成熟的存储系统,例如 Redis、HBase,但这些存

导读:今天和大家分享一下Pegasus的设计实现和开源之路。分以下四个部分:

01

Pegasus基本介绍

1. 背景

在目前的大数据生态中,我们已经有许多成熟的存储系统,例如 Redis、HBase,但这些存储系统往往不能解决所有的问题。比如说 Redis,它有很强的性能,但不支持强一致性,并且由于数据存储在内存中,成本较高;HBase 虽然支持强一致性,但读写路径过长,加上 Java 语言的 GC 问题,会造成较严重的长尾延迟。为了解决以上痛点,Pegasus 诞生了。

2. 系统架构

大数据数据存储_大数据数据存储管理方式_大数据分布式存储

在Pegasus系统中,

Pegasus采用hashkey、sortkey的二级索引Key-Value存储数据模型。hashkey作为一级索引用于hash分片,每个hashkey下可拥有多个sortkey,sortkey以字典序存储。相同hashkey的数据存储在同一分片中,这种数据模型设计可以使得我们针对同一hashkey下的数据支持原子批量读写。

大数据数据存储管理方式_大数据分布式存储_大数据数据存储

Pegasus采用了特殊的双WAL写入方案来保证低延迟写入。在传统的解决方案中,数据和WAL被部署在相同的磁盘,客户端写数据时,会先写到 WAL 中,再写入存储引擎,而数据盘的Compaction操作以及其他大量的随机读写,会增加 IO 负载,严重影响到 WAL 同步写的性能,进而影响写性能。

在实践中,部署Replica的机器往往有多块磁盘,Pegasus使用其中一个磁盘专门存储 WAL,以避免数据盘的高负载带来的写入抖动。但是,如果所有分片的WAL都存储在一起,则将花费大量时间进行负载均衡或故障恢复。所以,Pegasus选择了双WAL架构,写请求会先同步写入shared log作为WAL,再同步写入RocksDB实例,同时异步写入各个分片的private log以用于负载均衡和故障恢复。这种设计在实践中能有效减轻长尾延迟并避免负载均衡及故障恢复的低效率问题。

3. 性能测试

大数据数据存储_大数据数据存储管理方式_大数据分布式存储

以上是最新发行版2.2.0在YCSB下的测试结果。

02

Pegasus新特性

在基本的介绍之后,我们将介绍Pegasus的一些新特性。

1. 热备份

大数据分布式存储_大数据数据存储管理方式_大数据数据存储

首先是热备份功能,它用于跨机房在线备份。其设计原理是:源集群通过重放写请求日志,把数据异步传输到远端目标集群。热备份支持单主和多主两种模式,基于这个功能我们有了更多拓展场景。

大数据数据存储_大数据数据存储管理方式_大数据分布式存储

热备份的一个简单应用是在线迁移。当用户跨集群迁移数据,并希望在迁移过程中不停止客户端读写时大数据数据存储,我们可以结合使用冷备份和热备份来解决。首先创建热备份以让源集群表保留其日志快照点,并通过冷备份将全量数据备份到 HDFS 等远程存储,然后目标集群从HDFS等远程存储恢复数据。当目标集群恢复该备份快照后,下一步就是从源到目标开始热备份,待目标区域与源区域保持相同的数据,随后客户端就可以切换到目标表。

大数据数据存储_大数据数据存储管理方式_大数据分布式存储

这是另一个经典的用户案例,双机房主从模式。在region1客户端读取数据和写入数据,在region2客户端只读取数据。为了避免跨区域读取,我们将部署一个主从集群。在主集群中,Client将写入和读取数据,然后通过热备份传输数据。部署在从集群域的客户端可以在本地读取数据,这种读取可以保证最终一致性。

未来,我们会做更多的事情来增强这个功能。比如,在实践中支持master-master模式,我们现在大多部署master-slave模式来实现多集群热备份。热备份还可以支持远程容灾,客户端通常从master机房读/写数据,如果master region出现严重错误或完全不可用,client可以自动切换到slave机房。此外,除了Pegasus集群之间的热备份之外,未来,我们可能还会提供CDC,将数据传输到其他系统,例如ES或 RabbitMQ。

2. Bulk Load

大数据数据存储管理方式_大数据分布式存储_大数据数据存储

Bulk Load用于快速导入大量数据。由于其本质是数据文件的批量加载,相较于传统的逐条写入导入方式能够大幅提高数据灌入速度。首先,用户可以通过Pegasus-Spark将原始数据转换为Pegasus能够识别的SST文件,存储到远程文件系统。生成文件后Pegasus服务端将这些文件下载到Replica Server上,然后将它们快速加载到Pegasus表中。

3. Access Control

大数据数据存储_大数据分布式存储_大数据数据存储管理方式

与Hadoop系统一样,我们使用Kerberos进行身份验证。当集群打开访问控制时,客户端使用 keytab 文件完成鉴权。Pegasus现在使用基于表级访问控制的白名单,在图示的这个例子中,客户端只能访问表A,不能访问表B。

4. Partition Split

大数据数据存储_大数据分布式存储_大数据数据存储管理方式

最后,我们来介绍一下分区分裂Partition Split。Pegasus使用hash分区,很难实现分区的任意拆分,我们的解决方案仅支持分区倍增。如图所示,如果表的原始分区数为4,则新分区数为8。分区0将拆分为分区0和分区4,分区1将拆分为分区1和分区5。为方便起见,我们称旧分区为父分区,新分区为子分区。

分裂开始时,第一阶段是从父分区异步复制数据给子分区,直到他们拥有相同的数据。在这个阶段客户端只知道父分区,所有请求都将发送给父分区。当子分区同步完父分区的所有数据后,主父分区将在MetaServer上注册子分区,暂时拒绝客户端读写。注册成功后,分区分裂完成,父分区和子分区成为独立分区,重复的数据将被RocksDB的Compaction机制进行垃圾回收。Partition Split功能的所有代码已经合并在主分支中,这个特性将在下一个版本中得到支持。

03

Pegasus生态

接下来我们介绍一下Pegasus周边生态。

众所周知,系统的核心部分提供了最主要的功能特性,为了更好的发挥和强化Pegasus的能力,我们同时开发和提供了丰富的周边生态工具。

1. Pegasus-Spark

大数据分布式存储_大数据数据存储_大数据数据存储管理方式

首先要介绍的就是Pegasus-Spark,它提供简单易用的连接Spark的功能,利用Spark强大的分布式处理能力,能够快速构建一个Spark任务。Pegasus-Spark是利用RocksJava + JNI开发的一个HDFS环境下的SST文件读写Connector。其中,两个最重要的场景就是离线分析能力和离线加载数据的能力。

离线数据分析,目的是提供数据的统计分析能力。用户首先需要利用数据导出工具在HDFS上生成离线快照,随后使用Pegasus-Spark连接该快照数据。用户既可以直接使用SparkSQL构建分析任务,也可以生成Parquet文件导入到Hive进行更加方便快捷的统计分析。

离线数据加载,目的是为了Pegasus的Bulk Load功能而开发的。如前面描述的那样,Bulk Load的离线加载需要从远程文件系统直接下载转换好的SST数据文件,然而SST数据文件的生成需要严格的规则保证:首先,待生成的数据必须是去重的;然后,它的分区个数必须和目标表的分片数目一致;最后,也是最重要的,所有的分区内数据必须是有序的。而去重-分区-排序恰好是Spark擅长的能力,因此基于Spark,我们可以很快的构建一个数据转换任务生成SST文件并被Bulk Load所使用。

2. Meta Proxy

大数据数据存储管理方式_大数据数据存储_大数据分布式存储

Meta Proxy,它本质上是Pegasus Meta Server的连接代理。Meta Proxy主要目标是屏蔽不同业务对不同集群的感知,以提供一个统一的接入入口。这样做可以带来很多好处:首先,不同的客户端不用再维护不同的集群的地址了;然后,由于屏蔽了MetaServer的地址,MetaServer节点的任何变更将变得透明而不再需要通知客户端。

大数据数据存储_大数据数据存储管理方式_大数据分布式存储

这些特性带来的一个显著优点就是:对于使用热备开启主备集群的用户,当主集群出现故障宕机后,Meta Proxy可以透明的切换主备集群,以增强系统的容灾能力。

3. 磁盘数据迁移工具

大数据数据存储管理方式_大数据分布式存储_大数据数据存储

我们最后要推荐给大家的是磁盘数据迁移工具。随着数据不断的写入,对于使用多磁盘卷的部署架构来说,磁盘的使用不均极易导致分布式存储的容量瓶颈。在以前,我们往往因为单盘的使用量告警而不得不添加新的节点,这不仅增加了成本,而且由于节点间的分片迁移并不考虑磁盘容量,所以有时候收效甚微。

磁盘数据迁移工具提供了在线的磁盘均衡能力,它首先选择使用量最大的两个磁盘,然后选中符合要求的待迁移分片,随后执行分片迁移。在这个过程,服务端的分片需要经过拷贝->关闭->注册新路径->数据同步等一系列分片变更流程,好在这个过程对用户是透明的,用户基本不会感受到它带来的影响。

04

Pegasus社区建设

大数据数据存储管理方式_大数据分布式存储_大数据数据存储

Pegasus最初在2015年立项和调研,并在一年后发布了第一个内部版本。2017年,我们开源了稳定版本1.7.0,并在随后的2020年加入Apache基金会成为孵化器项目。同年9月,我们发布了更为稳定和完善的2.0.0版本,基本涵盖了此次演讲的绝大部分特性。

社区的活跃性是我们关注的一个重点,为促进开源爱好者加入并共建Pegasus社区,我们建议贡献者可以从工具集开发入手,包括 client、shell等一系列增强工具。

Pegasus2.3.0发布时包含150多个commit,其中包含了Partition Split、用户自定义Compaction、集群负载均衡、一次性冷备份等功能。欢迎大家到Github上关注我们的Issue。未来对Pegasus还会增加周期性批量导入、热备份相关功能优化、热点分片检测、读吞吐限流、全链路追踪Tracing、Admin Service统一服务等功能。后续Pegasus还会继续优化架构,支持双副本、单副本架构。Pegasus的更长远规划上会尝试结合新存储引擎和新硬件。

Pegasus的开源社区方面的计划优化Benchmark,和更多其他K-V存储系统做对比,数据说话、发现不足。提供更多技术文档和文章,更多举办线上WorkShop活动和线下Meetup活动,增强和开发者的沟通。

如何参与Pegasus开源社区?在GitHub上提issue,没有issue就创建一个issue。GitHub:。

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!