DAOS架构
DAOS架构
概述
DAOS是什么
分布式异步对象存储 (DAOS) 是一种开源软件定义的对象存储,专为大规模分布式非易失性内存 (NVM) 而设计。DAOS 利用存储级内存 (SCM) 和 NVM express (NVMe) 等下一代 NVM 技术,同时呈现键值存储接口并提供事务性非阻塞 I/O、在商用硬件上具有自我修复功能的高级数据保护、端到端数据完整性、细粒度数据控制和弹性存储等功能,以优化性能和成本。
DAOS产生背景
商业、政府和学术界数据密集型应用程序的出现使现有 I/O 模型超出了限制。 现代 I/O 工作负载的特征是越来越多的元数据与未对齐和零散的数据相结合。 传统的存储堆栈通过增加大量延迟和引入对齐约束来为这些工作负载提供较差的性能。 经济实惠的大容量持久内存与集成结构相结合,为重新定义存储范式和高效支持现代 I/O 工作负载提供了独特的机会。
为了释放这项新技术的全部潜力,新堆栈必须从头开始采用字节粒度的无共享接口,并能够支持故障将成为常态的大规模分布式存储,同时保持低延迟和高带宽数据访问。
DAOS 是一个完整的 I/O 架构,它将分布在整个结构中的 SCM 和 NVMe 存储聚合到全局可访问的对象地址空间中,在不影响性能的情况下提供一致性、可用性和弹性保证。
资源地址:
- DAOS文档:https://docs.daos.io/v2.2/
- DAOS源代码GitHub地址:https://github.com/daos-stack/daos
- DAOS社区:https://daosio.atlassian.net/wiki/spaces/DC/overview
架构
DAOS软件堆栈依赖于客户端-服务器模型。I/O操作将在与应用直接连接的DAOS库中处理,并由在DAOS服务器节点 (DN) 上的用户空间中运行的存储服务提供支持。
DAOS特征:
DAOS依赖Open Fabric Interface(OFI)实现低延迟通信,在SCM和NVMe设备上存储数据,提供的原生键-列-值存储接口可以用来移植HDFS,MPI-IO,Apache Hadoop等数据模型。通过原生DAOS API构建实现文件和目录的POSIX IO仿真层。
DAOS的IO操作会被记录并插入维护在SCM中的持久化索引,每个IO都被打上时间标签并与特定版本的数据集相关联。对于读操作,DAOS服务回遍历持久索引并构建一个收发RDMA描述符来在应用缓存中直接重构所需版本的数据。对写操作。。。
SCM被直接内存映射到DAOS服务的地址空间,该空间通过直接加载/存储管理持久化索引。通过IO的不同特点,DAOS决定将IO存储在SCM或者NVMe中。应用元数据以及字节粒度等延迟敏感型IO被保存在前者中,检查点和批量数据被存储在后者中。这样DAOS可以将批量数据流存储到NVMe设备发挥NVMe带宽,同时在SCM中维护内部元数据索引。PMDK提供对于SCM的事务性访问,SPDK提供对于NVMe设备的用户空间IO。
DAOS目标:
- 超高细粒度、低延迟和真正零拷贝的 I/O
非阻塞型数据和元数据操作,以支持 I/O 和计算重叠
先进的数据放置,以解决故障域
由软件管理冗余,可通过在线重建,支持复制和擦除代码
端到端 (E2E) 数据完整性
可扩展的分布式事务,提供可靠的数据一致性和自动恢复功能
数据集快照功能
安全框架,用于管理存储池的访问控制
软件定义存储管理,用于调配、配置、修改和监控存储池
通过 DAOS 数据模型和 API,为 I/O 中间件库(例如 HDF5、MPI-IO 和 POSIX)提供原生支持。应用无需移植代码,即可直接使用 DAOS API
- Apache Spark* 集成
- 使用发布/订阅 API,实现原生生产者/消费者工作流程
- 数据索引和查询功能
- 存储内计算,以减少存储和计算节点之间的数据移动
- 容灾工具
- 与 Lustre* 并行文件系统无缝集成,并能扩展到其他并行文件系统,从而为跨多个存储层的数据访问提供统一的命名空间
- 数据搬运器,用于在 DAOS 池之间迁移数据集,将数据集从并行文件系统迁移到 DAOS,反之亦然
DAOS系统
数据中心可能有众多计算节点通过高性能网络互联,其中一部分存储节点可以直接访问NVMe存储。DAOS涉及多个组件,这些组件可以被并置,也可以被分发。
DAOS系统由系统名称标识,由多个DAOS存储节点通过网络互联。DAOS 存储节点每个节点运行一个 DAOS 服务器实例,进而为每个物理套接字启动一个 DAOS 引擎进程。DAOS 服务器的成员资格记录到系统映射中,系统映射为每个引擎进程分配一个唯一的整数排名。两个不同的 DAOS 系统由两组不相交的 DAOS 服务器组成,并且彼此不协调。DAOS 服务器是在每个存储节点的 Linux 实例(本机在物理节点上或在虚拟机或容器中)上运行的多租户守护程序。其引擎子进程通过网络导出本地连接的 SCM 和 NVM 存储。
DAOS引擎内部,存储存储被静态划分到多个targets中来优化并发性。为了避免争用,每个target都有私有存储、自己的私有线程池、可以独立其他target的可直接寻址的专用网络上下文。
- SCM模块被配置在AppDirect interleaved模块,作为单个PMem命名空间呈现给操作系统(在fsdax模式)
- 当每个引擎配置N个tagets时,每个target使用对应socket的1/N容量
- 每个target也使用连接在对应socket上的NVMe设备的部分容量,例如在一个4NVMe,16targets引擎上,每个target管理1/4个NVMe disk
target内部没有针对存储介质失效的数据保护机制,因此target是数据错误的单位。每个target都会有动态变化的状态。target同时也是性能单位,连接在其上的后端存储介质,cpu核数,网络的性能都有限制
单个DAOS引擎上的target数量是可配置的,取决于底层硬件设备(具体来说取决于该引擎实例服务的SCM模块以及NVMe SSD数量)。从实践角度讲,一个引擎上的最佳target数量应该是该引擎服务的NVMe设备的整数倍。
资源链接:
DAOS安装配置
https://docs.daos.io/v2.2/QSG/setup_rhel/
DAOS管理
https://docs.daos.io/v2.2/admin/hardware/
DAOS测试与Benchmarking
https://docs.daos.io/v2.2/testing/autotest/
词条解释:
SCM:即Storage Class Memory存储级内存,不仅享有DRAM的性能表现,同时拥有NAND Flash的容量优点,这样一类兼得DRAM与NAND Flash优点的创新介质,具备存储级的持久化和内存快速字节级的访问的共性。