如何优雅实现存算分离:缓存及 Tablespace 讲解与演示
![如何优雅实现存算分离:缓存及Tablespace讲解与演示](https://static001.geekbang.org/infoq/6c/6c616dabd9aee245697d14efa2b94b90.png)
在传统的紧耦合系统设计中,存储与计算密不可分,但随着业务的发展,常常会为了扩存储而带来额外的计算扩容,这其实就是一种浪费;同理,只为了提升计算能力,也会带来一段时期的存储浪费。存算分离的架构已然成为行业发展的客观需要。
在设计大型系统时,我们必须深入思考底层存储该如何设计。如果单纯依赖扩容存储来应对前端访问的增长,会引发难以预料的延迟问题。在存算分离的框架下,我们需要对存储进行设计改造,以避免牺牲性能。
上次直播中,由酷克数据资深解决方案架构师王老师与我们探讨了存算分离的基本原则和实现技术,深入讲解了 HashData 云数仓如何通过引入缓存层来提高数据访问速度,以及如何利用 Tablespace 技术实现更灵活的数据存储和管理。以下根据直播文字内容整理成稿。
存算分离实现原则及关键技术
存算分离,即将存储与计算资源进行独立管理,以提升系统灵活度与性能。这种设计的显著优势在于将数据的存储与逻辑计算过程解耦,使得两者能够各自独立地进行优化和扩展,有效地解决了传统 MPP 架构数据库中面临的性能瓶颈,降低了扩容成本的不一致性,显著提升了系统的整体访问效能。
存算分离的架构设计思路非常清晰:首先将存储和计算明确划分为不同的层次,详细定义各层的具体职责和交互接口。通过设计独立的计算节点来专门负责数据的处理和计算任务,而分布式存储系统则被用来存储海量的数据,提供高可用性和扩展性。为了保障存储节点和计算节点之间的数据传输和协调顺畅,需要建立高效的通信机制。当然,实现存算分离并非易事,它依赖于一系列关键技术,如数据切分与分发技术、数据缓存技术、数据索引机制、负载均衡以及容错机制等。
然而,在实现存算分离架构之后,新的挑战也随之而来:在解耦存储和计算资源后,如何确保两者之间的顺畅交互?如何高效管理这些数据?这些问题成为我们面临的新课题。
引入缓存层:解决存算分离带来的延迟
传统的 MPP 架构数据库存储、计算紧耦合,数据存储在本地系统,存储能力的扩展通过增加集群节点实现,这样就会导致计算资源的浪费,无法匹配业务的灵活发展。
实现存算分离架构后,为解决存储扩容的问题,数据通常会被推送至远端存储,需要通过网络远程访问。而远程访问一般来讲会带来性能的下降。通常磁盘的读写速度可以达到 100-200M/秒,网络带宽常常不容易达到这样高的速率。如果频繁远程操作,会对系统造成很大的影响。
![](https://static001.geekbang.org/infoq/87/8746a6ed127ffb6b83382735f95f861b.png)
为了解决这个问题,HashData 云原生数据仓库在存算分离架构之间增加了缓存层,以大幅降低访问远端存储的频率,从而缓解性能下降的问题。
缓存在许多场景中都有应用,比如 CPU 的缓存、磁盘的缓存,以及我们日常使用的浏览器等等。缓存的主要作用就是提高数据的访问速度,减少延迟。
HashData 的缓存策略采用目前流行的 LRU 算法,来实现热点数据的识别和保留。LRU 本质上是一个固定大小的队列,对于需要频繁访问的数据,队列排序靠前;对于不经常访问的数据,排序靠后。随着队列的逐渐增加,经常访问的数据会在最前面,不经常访问的数据会在最后面。最终,不经常访问的数据会被剔除掉。缓存层屏蔽了所有远程文件操作,因此数据库内核在访问对象存储时不会察觉到远程操作的存在。
同时,HashData 使用的是对象存储,独立于计算节点,提供近乎无限的扩展能力。它与缓存层共同构成了一个统一的底层高性能存储。这种设计不仅避免了传统数据平台基于成本考虑的归档需求和计算成本浪费,还提高了数据访问速度,降低了延迟,从而提升了整体系统性能。
Tablespace:实现灵活的数据存储和管理
在存算分离的架构下,数据的存储和计算被分开处理。表空间(Tablespace)作为一种逻辑存储结构,可以帮助数据库管理员(DBA)更好地组织和管理这些数据。
表空间(Tablespace)在数据库系统中扮演着重要角色,它是数据库逻辑结构和文件系统物理结构之间建立映射的重要存储结构。它作为数据库与实际存储数据的物理存储设备之间的中间层,用来指明数据库中数据存放的物理位置。任何表的创建都必须显式或隐式地为其指定表空间,且数据库中的所有数据均位于表空间中。
继承于 PostgreSQL 的表空间,HashData 云数仓创新性地在传统的表空间与对象存储中的存储桶(Bucket) 之间建立映射关系,通过不同的表空间无缝对接多个跨平台、跨地域的对象存储系统,从而实现在一个集群中访问不同平台、不同类型、不同地域的对象存储系统,使得应用可以根据数据重要性、访问地域等因素选择性地将不同数据放在不同的对象存储系统中。
借助这种设计,HashData 在数据的生产端和消费端之间构建了一个灵活的存储层。在存储层面,我们可以针对不同的存储产品开发相应的扩展,使 Tablespace 能够适应多样化的存储需求。这种设计理念不仅适用于跨云存储,还适用于跨不同存储产品的统一管理。我们可以通过定义不同的 Tablespace 来实现用户自定义的数据隔离,确保不同的数据可以归属到不同的数据分布区域。
![](https://static001.geekbang.org/infoq/f8/f8e5840b4cc75344bb879d3429b88c3f.png)
Demo 演示:如何优雅地实现存算分离
在了解了缓存层和 Tablespace 的概念后,我们将通过一个 Demo 演示来帮助大家进一步加深对存算分离的理解。这个演示将直观地展示如何在实际应用中优雅地实现存算分离,从而提升系统的整体性能和灵活性。
结语
存算分离架构将存储与计算分离处理,解决了传统系统紧耦合带来的资源浪费问题,成为行业发展的新趋势。HashData 云数仓通过引入缓存层和创新的 Tablespace 管理,不仅提高了数据访问速度,还实现了更灵活高效的数据存储与管理,为企业数据处理带来了革命性的提升。
评论