IEEE HPCA 2024|LightPool:高性能、轻量级的存储池化架构

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: IEEE HPCA 2024|LightPool:高性能、轻量级的存储池化架构

【阅读原文】戳:IEEE HPCA 2024|LightPool:高性能、轻量级的存储池化架构


image.png


2024 年 3 月 2 日至 3 月 6 日,在英国爱丁堡举行了第30届IEEE高性能计算机体系结构国际研讨会HPCA(30th IEEE International Symposium on High-Performance Computer Architecture),HPCA是计算机体系结构领域的四大顶级会议之一,由阿里云服务器研发团队和蚂蚁数据基础设施与高可用团队合作完成的论文《LightPool: A NVMe-oF-based High-performance and Lightweight Storage Pool Architecture for Cloud-Native Distributed Database 》入选,本届会议共收到410篇投稿,最终接受75篇,录用率 18.3%。


论文背景


论文阐述了在云计算背景下,阿里云基础设施服务器研发团队蚂蚁数据基础设施与高可用团队在数据库面临存储的性能、成本、稳定性的多重压力下,以其面向云原生业务快速高效的软硬件融合解决问题的能力,创新性的提出了一种全新的基于云原生的本地存储池化架构,该架构不仅能在性能上能和本地存储媲美,同时融入了云原生架构,解决了本地存储的弹性问题,在业务上能显著的降低业务的存储使用成本,提升存储的资源利用率。


论文解读

分布式数据库面临的存储选择


数据库作为企业关键的IT基础设施,承担着存储、访问和分析关键数据的重要任务,它直接关联到运营效率的提升、客户体验的改善,以及数据驱动决策的支持。企业的业务特性对数据库提出了高可用性、高性能和低成本的需求;在此背景下,作为数据库底层支撑的存储服务类型选择显得至关重要。


目前,数据库的三种主要基础架构分别为:


1.计算存储结合:这种本地存储服务以其高性能、低成本的优势而受到青睐。然而,它可能导致资源调度问题和资源利用率的不均衡,即服务器与业务需求的不匹配可能会造成资源的碎片化,降低了单个服务器资源的使用效率。


2.计算存储分离(ECS + EBS/S3):计算存储分离架构利用分布式云存储的能力解决资源碎片问题。尽管如此,分布式存储服务可能会带来较大的爆炸半径(从计算端到存储端的高收敛比)、增加成本(存储层额外的数据副本)和增加延迟(较长的I/O链路)。这一架构适用于中小规模业务,但对于那些对集群规模、I/O性能、吞吐量和成本敏感的大型业务来说,可能并不合适。


3.共享存储架构(例如PolarStore、Aurora、Oracle RAC):共享存储架构能够有效解决上述问题,通过与存储产品内核深度集成的共享分布式存储,它能够在降低成本和减少副本的同时提供满意的性能。但是,这种方案的通用性较差,每个存储产品都需要深度定制和优化。


在蚂蚁的业务场景中,整个数据库产品(包括RDBMS、KV、Doc)的规模非常庞大。我们的目标是在不降低稳定性和性能的前提下,解决当前基于计算存储结合架构中的资源碎片问题,降低成本并提升资源效率。


为了提升资源效率和解决资源碎片问题,最直接且有效的方法是将闲置资源以内销(产品自用)或外销(供其他产品使用)的形式利用起来。分布式存储架构和共享存储架构均能解决这一问题,但在满足大规模和多样化存储需求的通用性和稳定性方面仍有不足。鉴于此,我们开始探索HPC(High-Performance Computing)高性能存储服务,并设计了LightPool存储服务,该服务通过池化所有服务器上的存储资源,在不牺牲稳定性和性能的条件下,显著提高了存储资源的使用效率。



云原生下的本地存储池化架构


image.png


LightPool的集群架构如上图所示,LightPool的整体架构包含了几个关键设计:


1.云原生设计,调度机制基于k8s设计,标准CSI接口,容器化部署;


2.高性能,轻量化存储引擎,支持本地零拷贝挂载,支持多种存储介质;


3.基于高性能存储互联协议NVMe over Fabric,支持TCP,RDMA,运行在 overlay网络。


上图集群中包含了不同的ECS服务器,其中存储型的ECS(如Node 1)搭载了大量的本地SSD,而计算型的ECS如(Node 2 和Node 3)搭载了少量甚至不搭载本地SSD。这种服务器的配置在现实中较为常见,源于上层不同的业务因为不同的负载对服务器的需求不同,但是随着服务器数量和业务的变更,后续又往往会考虑不同的业务进行服务器资源的共池来提升资源的使用效率。在这种情况下当业务通过容器在整个资源池进行动态调度和部署的时候,需要同时考虑CPU,内存,磁盘三个维度的资源,而数据库业务对存储的大容量需求进一步导致了调度的复杂度,使得资源池的资源利用率无法达到较高的水平。LightPool架构目的就是这种情况下解耦了调度对磁盘的耦合性,使得容器调度主要聚集考虑CPU和内存,磁盘可以通过弹性的方式进行挂载,从而解决资源利用的问题。


LightPool集群角色分为控制节点和工作节点:


1.控制节点,负责集群所有SSD的池化管理,SSD资源的分配和回收的管控,控制节点融入了k8s管控框架,通过资源调度器的方式和k8s的master服务进行交互,和k8s master节点部署在一起,控制节点只会在容器申请/释放存储资源的时候介入,而在IO的正常读写阶段,控制节点被bypass,IO的读写只会在工作节点之间交互。


2.工作节点,运行了业务的容器,同时部署了LightPool的存储引擎以及CSI插件,存储引擎负责接管工作节点上的所有本地存储资源,CSI插件等负责容器申请到的存储资源的挂载。在控制节点完成容器存储资源的分配后,容器所在的工作节点和存储资源所在的工作节点之间通过NVMe over Fabric高性能存储协议互联,实现了本地存储的弹性。


该架构和传统的分布式存储相比,没有元数据服务器的单点瓶颈,因此爆炸半径大大缩小,在实际业务中,同时其轻量化的存储引擎和互联协议的设计使得整个存储部署非常轻量化,对集群的资源消耗非常小,最后LightPool存储服务本身也可以通过容器进行部署,从而真正实现了云原生的设计。



云原生调度设计


集群控制平面节点上的Controller和Agent是LightPool的核心组件。Controller管理存储资源,并从存储池中分配存储卷。Controller维护集群中所有存储资源的整体视图,并根据工作节点的请求分配存储卷。存储调度器采用调度策略,识别具有足够自由存储空间的目标工作节点,以满足请求的存储容量。


随后,卷管理器通知目标工作节点创建具有指定容量的自由卷。最后,发起请求的工作节点上的kubelet通过NVMe-oF连接调用CSI驱动程序中的实现调用,与目标工作节点上相应卷建立连接。


Agent安装在每个后端节点上,除了管理该节点上的存储资源以外,还需要配合调度器,上报所在后端节点的健康状态。维持Agent心跳是十分必要的,因为当节点发生严重故障时,需要有机制可以让中心调度器感知到节点故障,从而让节点变为不可调度。


LightPool参考了K8S Node的心跳机制,复用了Lease对象,用于记录心跳。Agent端负责更新Lease对象的RenewTime,Controller端负责检测这个心跳是否超时,如果超时则认为这个节点对应的StoragePool不可调度。StoragePool生命周期和K8S Node绑定,Node被下线后,StoragePool也会联动标记下线。


Controller调度器需要预先把集群中资源加载到内存中,预加载过程通过 EventHandler实现,确保先加载完成才能提供调度服务。


调度过程参考了Pod的调度流程,先经过一系列Filter过滤符合条件的节点,再经过计算Priority打分,挑选比较合适的节点。默认的过滤器包含:


· 基本过滤器, 根据StoragePool状态,剩余资源,卷的PositionAdvice参数等进行过滤


· 亲和过滤器, 根据Node或者Pool的标签亲和进行过滤


LightPool支持在代码中自定义过滤器,通过配置确定是否启用和过滤顺序。


默认的Priority有优先使用资源较少的节点,根据PositionAdvice参数判断优先性。


因为需要考虑本地盘调度,LightPool提供了两种方案去实现保证本地盘调度正确性,一种是更新K8S Node的扩展资源,表示本地存储资源,当节点分配远程盘后,联动减少节点的扩展资源。这种方式在低并发调度时效果较好,不会有太多冲突。


另一种是对接了K8S的 Scheduler Framework把本地存储调度融入K8S调度器。每次调度Pod时,在绑定调度结果之前,可以在内存中保留预分配的计算和存储资源,这样可以保证调度的正确性。



存储引擎设计


image.png


LightPool存储引擎作为存储系统的核心组件,LightPool针对存储引擎做了很多创新性的设计:


1.基于用户态的轻量化设计,用户态的设计思想也在典型的分布式存储中被大量应用,主要考虑性能和稳定性以及可运维性,而在LightPool存储引擎中除了考虑上述因素外,还考虑到云原生的环境下存储引擎本身可以通过容器化方式进行部署。


2.本地零拷贝存储协议,LightPool架构下所有业务访问存储均需要通过 LightPool存储引擎,哪怕是业务访问本机的SSD,在这种情况下本地访问路径因增加了LightPool的存储层,当存储需处理高带宽和高IOPS时,会对存储引擎产生很大的CPU压力,导致延时上升,这使得存储引擎需要预留较多的CPU资源, LightPool创新性的提出了自研的零拷贝存储协议,零拷贝存储协议在本地存储访问时,摒弃了TCP传输协议,实现了一个更轻量化的自研存储协议,该协议能实现全路径只处理存储命令,而业务实际的数据会直接在SSD硬件和业务buffer间传输,避免了使用传统的NVMe over TCP在本地挂载时的两次数据拷贝。延时,吞吐性能加大的得到了提升,而CPU消耗显著的下降。


3.多存储介质支持,LightPool存储引擎对物理存储介质进行了逻辑卷的管理,对外提供了如快照,raid等功能特性,同时LightPool存储引擎还支持混合SSD 的部署,比如基于QLC SSD的缓存优化技术,让业务真正的摆脱了和SSD硬件的耦合,更容易进一步通过QLC和ZNS等存储技术进行持续的降成本。



高可用的设计


image.png


蚂蚁数据库业务承接了蚂蚁的核心关键数据服务,其稳定性和可靠性的要求极高,尽管上层如OceanBase等分布式数据库上层已经做了多个副本实例的设计,可以在出现故障的时候实现业务的不中断和数据可靠,但是底层的存储故障仍然会导致数据库在某个时间窗口能产生业务抖动。LightPool为了实现线上业务的 always online,结合业务的需求,设计了两大关键性高可用技术,分别是热升级和热迁移技术。


1.热升级技术,存储系统作为业务的底层核心基础设施,热升级技术是解决系统迭代升级和稳定性快速修复的一个非常关键的特性,LightPool的热升级技术相比传统的分布式存储有所不同。一方面,LightPool不依赖副本技术去实现升级,因为在很多的业务场景 LightPool就是以单副本的形式进行部署。另一方面,LightPool在升级的中断时间上做了非常极致的设计,整个存储引擎的热升级时间保持在百ms级别,<1s。


2.热迁移技术,LightPool在大部分场景作为单副本的存储系统,而由于 LightPool的存储池化设计并未像传统的分布式存储,将所有的存储资源视做一个磁盘,其不同的工作节点间的存储资源是独立的分配,为了解决在部分极端场景下,存储的分配出现了不均衡或者运维的需要,比如某个工作节点出现了故障和异常,需要迁移数据,热迁移技术可以使得业务不中断的情况下,将后端的存储从一个工作节点迁移到另外一个工作节点,如上图所示。



展望未来


近年来,阿里云服务器研发团队在基础技术研究领域迈出了坚实且创新的步伐,连续5年在HPCA/ISCA/MICRO三大体系结构顶会上展现卓越的科研实力,屡获佳绩。特别是在数据中心算力资源利用率和稳定性提升、软硬件融合高性能卸载,以及Chiplet软件生态建设等方面取得优异的成果,持续构筑飞天操作系统最结实的硬件基础设施底座。


未来,面向大内存计算时代和AI算力需求爆炸的场景;阿里云将持续围绕基于CXL的新型计算架构创新,结合云计算基础设施的规模效益,将基础研究成果转化为工程实践的能力,为客户和整个行业提供更高效、更优质的云服务解决方案。



我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。

欢迎关注 “阿里云基础设施”同名微信微博知乎

获取关于我们的更多信息~

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
人工智能 运维 监控
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
【2月更文挑战第30天】 随着企业应用的复杂性增加,传统的单体应用架构已经难以满足快速迭代和高可用性的需求。微服务架构作为解决方案,以其服务的细粒度、独立性和弹性而受到青睐。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、常用的技术栈选择以及性能优化的最佳实践。我们将分析微服务在处理分布式事务、数据一致性以及服务发现等方面的挑战,并提出相应的解决策略。通过实例分析和案例研究,我们的目标是为后端开发人员提供一套实用的指南,帮助他们构建出既能快速响应市场变化,又能保持高效率和稳定性的微服务系统。 【2月更文挑战第30天】随着信息技术的飞速发展,企业对于信息系统的稳定性和效率要求
|
23小时前
|
存储 数据管理 数据处理
|
2天前
|
JSON API 数据库
后端架构设计与优化:打造高性能应用后端
后端架构设计与优化:打造高性能应用后端
10 2
|
12天前
|
监控 负载均衡 API
构建高性能微服务架构:后端开发的最佳实践
【4月更文挑战第14天】 在当今快速发展的软件开发领域,微服务架构已成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了后端开发人员在设计和维护高性能微服务时需要遵循的一系列最佳实践。我们将从服务划分原则、容器化部署、API网关使用、负载均衡、服务监控与故障恢复等方面展开讨论,并结合实际案例分析如何优化微服务性能及可靠性。通过本文的阅读,读者将获得实施高效微服务架构的实用知识与策略。
|
23天前
|
消息中间件 监控 API
构建高性能微服务架构:从理论到实践
【4月更文挑战第4天】 在当今互联网应用的快速迭代和高并发需求下,传统的单体应用架构已不足以满足市场的灵活性与扩展性要求。微服务架构以其独立部署、弹性伸缩、技术多样性等优势,成为众多企业转型升级的首选方案。本文将深入探讨如何构建一个高性能的微服务系统,涵盖关键组件的选择、系统设计的考量以及性能优化的策略,旨在为开发者和架构师提供一套实用的指导思路和具体实践步骤。
|
1月前
|
缓存 负载均衡 数据库
构建高性能微服务架构:后端开发的终极指南
【2月更文挑战第30天】 随着现代应用程序向微服务架构的转型,后端开发者面临着提高系统性能、确保可靠性和易于维护性等挑战。本文深入探讨了构建高性能微服务的策略,包括服务拆分、数据库优化、缓存机制以及负载均衡等关键技术。通过实际案例分析与最佳实践分享,我们旨在为后端开发人员提供一套全面的指导方针,帮助其在不断变化的技术环境中保持竞争力。
|
1月前
|
消息中间件 缓存 数据库
构建高性能微服务架构:后端开发的进阶之路
【2月更文挑战第30天】 在当今互联网技术迅速发展的背景下,传统的单体应用已经难以满足日益增长的业务需求。微服务架构以其灵活性、可扩展性和容错性成为解决复杂系统问题的有效方案。本文将探讨如何构建一个高性能的微服务架构,包括关键技术选型、系统设计原则以及性能优化实践,旨在为后端开发人员提供一条提升系统处理能力和稳定性的进阶路径。
|
1月前
|
存储 监控 容灾
TiDB存储层深入:分布式存储架构与数据一致性保障
【2月更文挑战第26天】本文将深入探讨TiDB的存储层,详细解析其分布式存储架构、数据复制机制以及数据一致性保障措施。通过了解存储层的核心组件和工作原理,我们可以更好地理解TiDB如何确保数据的可靠性、高可用性和可扩展性。本文将从存储层的架构、数据分布、容错机制等方面展开介绍,帮助读者全面掌握TiDB存储层的关键技术和优势。
|
1月前
|
消息中间件 敏捷开发 运维
构建高性能微服务架构:策略与实践
【2月更文挑战第27天】 在当今快速迭代和持续部署的软件发展背景下,微服务架构因其灵活性、可扩展性和技术异构性的优势而成为众多企业的首选架构模式。然而,随之而来的复杂性管理和性能优化问题也不容忽视。本文深入探讨了构建高性能微服务架构的策略与实践,包括服务拆分原则、通信机制、数据一致性保障以及监控和故障处理等方面。通过分析具体案例和最佳实践,旨在为开发者提供一个清晰、高效的微服务性能优化路径。
|
6天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。