乐趣区

关于数据库:干货关于云原生数仓存算分离的15个问答

存储是数据的长久化载体,也是数据库系统重要的基础设施。高质量的存储系统设计,对数据库的性能有着至关重要的影响。
随着云计算技术的倒退,数据库也开始拥抱云原生时代,“存算拆散”的概念逐步为大家所熟知。
“存算拆散”不仅能节约老本,还能够让资源依据业务需要弹性伸缩。HashData 为了谋求极致的弹性和扩展性,计算集群和长久化存储严格履行物理拆散:计算集群由相似 AWS EC2 的虚拟机组成,长久化存储则应用对象存储。
在上次的直播中,HashData 数据库内核研发工程师刘晓宇与杉岩数据售前技术专家申国斌介绍了 HashData 在存算拆散、对象存储优化等方面的技术摸索与实际,并围绕大家关注的问题进行了深度解答。

HashData 利用云存储作为数据长久存储层,并与计算资源物理上拆散、逻辑上集成。因为本身的高可用性和近乎有限的可扩展性,云存储大大简化了数据仓库零碎谬误复原、多维度扩缩容、备份复原等流程,同时使得不同集群间共享同一份数据、对立的数据存储平台成为可能。

以下为直播问答文字实录摘选:
1. 相比本地化存储,近程拜访是否会带来性能上的降落?
刘晓宇:近程拜访一般来讲会带来性能的降落。通常磁盘的读写速度能够达到 100-200M/ 秒,而网络带宽通常达不到这样高的速率。如果频繁近程操作,会对系统造成很大的影响。
HashData 通过在计算节点和对象存储两头减少缓存层,能够大幅升高拜访对象存储的频率,缓解性能降落的问题。
传统的 MPP 架构数据库存储、计算紧耦合,数据存储在本地零碎,存储能力的扩大通过减少集群节点实现,这样就会导致计算资源的节约,无奈匹配业务的倒退。
HashData 应用的是对象存储,独立于计算节点。利用对象存储技术,能够提供近乎有限的扩大能力,防止了传统数据平台基于老本思考的归档需要和计算成本节约。通过测试能够看到,HashData 在计算节点和对象存储之间减少缓存层之后,相比 MPP 架构,简直没有性能上的损耗,同时计算量能够晋升近 5 倍。

2. 缓存层设计理念是在元数据集群和对象存储集群之间,适度减少计算资源和缓存层,具体是怎么实现的?
刘晓宇:HashData 的缓存策略采纳目前比拟风行的 LRU 算法,来实现热点数据的辨认和保留。LRU 实质上是一个固定大小的队列,对于须要频繁拜访的数据,会放到队列后面;对于不常常拜访的数据,会放在前面。随着队列缓缓的减少,最终常常拜访的数据会在最后面,不常常拜访的数据会在最初面。最终,不常常拜访的数据会被剔除掉。
同时,对于缓存层屏蔽掉了所有近程文件操作。数据库内核在拜访对象存储的时候,对近程操作不会有任何感知。

3. 缓存的优化对象包含哪些?
刘晓宇:HashData 针对高并发、小文件等场景做了大量的优化,进一步升高零碎开销,使近程拜访的性能能够达到跟本地简直齐全一样。
针对对象存储,HashData 通过批量解决的形式对数据的查改删进行优化,大幅晋升了操作效率。
另外,HashData 对数据的写和读做了很多的优化。比方企业业务场景上应用大文件比拟多,那么咱们采纳分片上传形式将大文件传输到对象存储上。对于每个上传的文件,HashData 通过测试配置了一个最优的分片大小去做分片上传,将文件在对象存储上合并。
HashData 的缓存零碎采纳按块缓存,做到了按需下载须要的数据,防止下载整个文件。比方应用缓存零碎去读取数据,将每个块设置 8M,对于 64M 的文件会被切分为 8 个块,如果用户须要的数据分布在其中的一个块内,那么咱们数据库在读取数据时只须要取其中一个块即可,不须要把整个数据全都下载下来,这样做到了按需下载。

4. 计算节点应用的是 SSD 吗?
刘晓宇:目前大多数用户应用的都是 SSD。当然也有应用一般存储。SSD 读写速度远远优于一般存储的性能。

5. 通过网络获取到数据是否会导致网络 IO 的压力过大?
刘晓宇:网络 IO 压力大有两方面。一方面是对象存储压力过大。另一方面是集群自身随着主机和业务增多会更多地去拜访对象存储,由此会带来集群整体和拜访对象存储的网络开销越来越大。
对于对象存储压力过大咱们通过多 bucket 形式来解决。将文件扩散存储到其余的 bucket 上以此来分流对象存储上的压力。
对于集群因为业务增多呈现网络压力过大,咱们采纳动静算法让零碎依据以后的压力调整发送申请的距离。再者能够通过调整参数升高集群发送网络申请次数。

6. 缓存须要多少容量?一批数据量须要多少缓存?
刘晓宇:缓存容量由本机配置来决定,依据不同场景去定制缓存的大小。个别咱们会配给零碎的 10% 左右用于缓存,但具体的容量还要依据零碎的状况去做调整。
如果大文件数量比拟多,则缓存越大越好。如果碎片化的小文件比拟多,缓存容量只须要适量即可满足需要。

7. 缓存也分是不是长久?
刘晓宇:失常状况下,缓存是长久化存储在磁盘内的。如果遇到集群重启,读写失败或扩容等问题,作为缓存的这些数据,都会存在的。当第二次集群发动的时候,会通过过程把这些长久化的数据从新加载起来。

8. 元数据缓存是在本地存储还是在云端?
刘晓宇:目前,缓存元数据留在本地是一个比拟好的抉择。如果元数据上云,可能面临的状况会更多更简单一些。

9. 对象存储的数据要依据业务进行切分吗?还是在缓存层切分?
刘晓宇:MPP 写到对象存储上的数据不须要依据业务进行切分。缓存零碎是依照块来缓存的,所以能够依据用户须要的数据按需取相应的数据块即可。

10. 通过网络如果申请没有达到对象存储应该怎么办?
刘晓宇:如果申请最终没有达到对象存储,会因为超时触发重试机制从新再次发送申请。如果对象存储给来返回码比方 http code 500,可能以后对象存储压力过大,产品会做算法上的调整延后发送申请,而后再次重试发送该申请。

11. 如果元数据缓存在本地,怎么可能保障节点间一致性及节点故障的可靠性?
刘晓宇:元数据缓存到本地,是通过 Foundationdb 去管制,这部分有牢靠的保障,而且缓存是跟着事务去运行,HashData 会有一套机制去保障缓存的一致性。

12. 存储层构造是底层采纳对象存储,下层对资源进行分片,保障全数据类型的反对、拓展能力、高可用和高长久,是否举例具体阐明?
刘晓宇:首先,因为咱们通过缓存层,构建了对立的存储层,存储层能够保障所有的计算集群去拜访缓存文件,从肯定水平上解决了资源孤岛的问题。
此外,对于大量集群拜访,HashData 会依据计算集群的规模进行分片存储,其余节点能够也同时拜访这些文件,相互不会影响。
在底层的存储方面,HashData 采纳对象存储,反对多集群同时拜访一个文件,整个架构能适配更多的云。
同时,对于对象存储,HashData 做了大量的优化,包含对存储数据的格局、多线程、动静调整数据包大小等,这些优化都能够对拜访存储层带来更高的性能。

13. 磁盘故障后,对象存储怎么控制数据的复原速度?
申国斌:咱们的数据重构速度很快。很多人会有疑难,重构速度很快是否会影响业务。咱们内置了多种不同的模式,包含自适应、业务优先、复原优先等。依据不同的场景抉择不同的恢复模式,能够在确保业务运行的根底上实现数据的尽快恢复。

14. 基于对象存储的底座构建云数仓的益处是什么,当初是支流趋势吗?
申国斌:存算拆散的架构须要对存储底座做选型。云数仓的特点是规模很大,对扩展性的要求很高。咱们的集群能够拓展到 4096 个点,保障大规模数据存得下。此外,咱们在并发拜访的反对、前端利用的调用等方面,因为接口间接,以及采纳老本可控的分布式架构,相比块存储和 NAS 存储有很大劣势,对象存储因而是云数仓的支流趋势底座。

15. 对象存储相比于 HDFS 有什么劣势?
申国斌:HDFS 默认采纳三正本,整体老本更高。对象能够采纳纠删办法,能够实现更高的利用率。HDFS 适宜存储大文件,更适宜 Hadoop 的非结构化场景。数仓中小文件的场景很多,不适宜 HDFS。数仓通常将 HDFS 作为数据导入的入口,而不是存储的底座。

退出移动版