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

简介: 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的新型计算架构创新,结合云计算基础设施的规模效益,将基础研究成果转化为工程实践的能力,为客户和整个行业提供更高效、更优质的云服务解决方案。



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


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
存储 缓存 安全
某鱼电商接口架构深度剖析:从稳定性到高性能的技术密码
某鱼电商接口架构揭秘:分层解耦、安全加固、性能优化三维设计,实现200ms内响应、故障率低于0.1%。详解三层架构、多引擎存储、异步发布、WebSocket通信与全链路防护,助力开发者突破电商接口“三难”困境。
|
7月前
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
845 0
|
4月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
4月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
396 1
|
5月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的&quot;神经网络&quot;,强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
8月前
|
存储 关系型数据库 MySQL
成本直降30%!RDS MySQL存储自动分层实战:OSS冷热分离架构设计指南
在日均订单量超500万的场景下,MySQL数据年增200%,但访问集中在近7天(85%)。通过冷热数据分离,将历史数据迁移至OSS,实现存储成本下降48%,年省72万元。结合RDS、OSS与Redis构建分层架构,自动化管理数据生命周期,优化查询性能与资源利用率,支撑PB级数据扩展。
576 3
|
7月前
|
缓存 监控 数据安全/隐私保护
京东平台商品详情接口技术解密:高性能架构与实战经验
本文深入解析京东商品详情接口技术架构,涵盖微服务设计、多级缓存、异步加载及数据一致性保障等关键策略,分享高并发场景下的性能优化实践,助力电商系统稳定高效运行。
|
8月前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
4月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路