searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

DAOS简介

2024-04-29 03:23:45
178
0

DAOS(Distributed Asynchronous Object Storage)是intel开源的一个全闪分布式存储系统,主要采用了SPDK、RDMA、用户态线程等技术,数据从应用发起到存储在分布式存储硬件设备的整个过程都在用户态,针对的存储介质是持久内存(SCM)和NVMe,整体结构如下图所示。

DAOS结构图

DAOS将元数据和小块IO存放在持久内存中,使用PMDK(Persistent Memory Development Kit)访问。大块IO则存放在NVMe中,使用SPDK访问。在系统启动时,DAOS使用系统调用来初始化对持久内存的访问。之后可以通过load和store之类的内存指令直接访问用户空间中的持久内存,而不需要经过很长的存储调用栈。

  • 架构

DAOS系统的架构如下图所示,从物理部署的角度,DAOS可以分为管理节点、客户端节点和存储节点。其中管理节点用于部署管理工具dmg,通过DAOS Mgmt API访问服务器节点。

DAOS架构图

DAOS系统从逻辑视图可以划分为Control Plane和Data Plane,即系统的控制面和数据平面。控制面使用Go语言开发,对应图中的蓝色框,与客户端使用gRPC通信,与本机的数据平面通过dRPC通信。数据平面是图中红色的部分,用C语言开发,主要实现了IO的数据通道,通过高性能的RDMA实现数据通信。

daos_server是一个daemon进程,部署在存储节点的Control Plane侧,用于管理本地节点挂载的持久内存和NVMe存储设备。daos_engine是一个daemon进程,部署在存储节点的Data Plane侧,提供数据服务器,一个存储设备对应一个daos_engine进程。daos_agent是一个部署在客户端节点上的Control Plane侧独立的进程,为客户端提供鉴权和权限管理,并通过gRPC访问存储节点获控制面获取集群相关信息。daos Library(libdaos)是部署在client node上的data plane侧,是数据的读写的客户端。

DAOS系统的通信主要使用了下面三个:

gRPC:通过tcp/ip实现了网络通信,用于管理面客户端和服务端之间的通信。

dRPC:基于Unix Socket实现,用于本地进程间通信:Control Plane和Data Plane组件通信。

CART:用户态实现的网络通信库,用于Data Plane侧,提供低延迟高带宽的网络通信,支持RDMA操作。

  • 基本概念

DAOS Storage Node:一个Storage Node包括多个DAOS target物理设备。

DAOS Target:可以理解为物理存储设备(与ceph OSD类似),设备包括持久内存和NVMe。一个设备对应一个Target:类似于ceph中的一个磁盘对应一个OSD的概念。Target没有针对存储介质故障实现任何内部数据保护机制。因此,一个Target就是一个单点故障,同时也是故障单元。每个Target有相关的状态,状态可以是“up and running”,也可以是“down and not available”。

DAOS pool:逻辑存储空间,一个pool里包含若干个pool shard。

每个pool shard 分布在一个target上。一个target上可以承载多个pool shard。pool shard是target上的子空间。

DAOS Container:每个container是一个独立的对象地址空间,类似于S3的bucket概念。Container被一个UUID标识。这个概念对用户是可见的,在使用时需要用户自己创建。

一个Data Pool 可以承载多个(数量在100个左右)DAOS Container。每个 Container都是一个私有的对象地址空间,可以对其进行事务性修改,并且独立于在同一 Pool中的其他Container。Container是快照和数据管理的单元。一个Container内的DAOS对象通过Jump Consistent Hash算法可以分布在当前Pool的任何一个Target上以提高性能和恢复能力。

DAOS相关的管理数据例如pool,container等集群相关的数据保存在基于Raft协议实现的key-value的高可用的存储系统。类似于Ceph的monitor的功能。DAOS的 RSVC(replicated service)实现了一个基于Raft协议的服务框架,和具体的RDB(replicated database)组合来实现高可用,持久化保存相应的管理数据。具体实现在DAOS源码中src/rsvc和src/rdb中。

0条评论
0 / 1000
刘****辉
1文章数
0粉丝数
刘****辉
1 文章 | 0 粉丝
Ta的热门文章查看更多
刘****辉
1文章数
0粉丝数
刘****辉
1 文章 | 0 粉丝
原创

DAOS简介

2024-04-29 03:23:45
178
0

DAOS(Distributed Asynchronous Object Storage)是intel开源的一个全闪分布式存储系统,主要采用了SPDK、RDMA、用户态线程等技术,数据从应用发起到存储在分布式存储硬件设备的整个过程都在用户态,针对的存储介质是持久内存(SCM)和NVMe,整体结构如下图所示。

DAOS结构图

DAOS将元数据和小块IO存放在持久内存中,使用PMDK(Persistent Memory Development Kit)访问。大块IO则存放在NVMe中,使用SPDK访问。在系统启动时,DAOS使用系统调用来初始化对持久内存的访问。之后可以通过load和store之类的内存指令直接访问用户空间中的持久内存,而不需要经过很长的存储调用栈。

  • 架构

DAOS系统的架构如下图所示,从物理部署的角度,DAOS可以分为管理节点、客户端节点和存储节点。其中管理节点用于部署管理工具dmg,通过DAOS Mgmt API访问服务器节点。

DAOS架构图

DAOS系统从逻辑视图可以划分为Control Plane和Data Plane,即系统的控制面和数据平面。控制面使用Go语言开发,对应图中的蓝色框,与客户端使用gRPC通信,与本机的数据平面通过dRPC通信。数据平面是图中红色的部分,用C语言开发,主要实现了IO的数据通道,通过高性能的RDMA实现数据通信。

daos_server是一个daemon进程,部署在存储节点的Control Plane侧,用于管理本地节点挂载的持久内存和NVMe存储设备。daos_engine是一个daemon进程,部署在存储节点的Data Plane侧,提供数据服务器,一个存储设备对应一个daos_engine进程。daos_agent是一个部署在客户端节点上的Control Plane侧独立的进程,为客户端提供鉴权和权限管理,并通过gRPC访问存储节点获控制面获取集群相关信息。daos Library(libdaos)是部署在client node上的data plane侧,是数据的读写的客户端。

DAOS系统的通信主要使用了下面三个:

gRPC:通过tcp/ip实现了网络通信,用于管理面客户端和服务端之间的通信。

dRPC:基于Unix Socket实现,用于本地进程间通信:Control Plane和Data Plane组件通信。

CART:用户态实现的网络通信库,用于Data Plane侧,提供低延迟高带宽的网络通信,支持RDMA操作。

  • 基本概念

DAOS Storage Node:一个Storage Node包括多个DAOS target物理设备。

DAOS Target:可以理解为物理存储设备(与ceph OSD类似),设备包括持久内存和NVMe。一个设备对应一个Target:类似于ceph中的一个磁盘对应一个OSD的概念。Target没有针对存储介质故障实现任何内部数据保护机制。因此,一个Target就是一个单点故障,同时也是故障单元。每个Target有相关的状态,状态可以是“up and running”,也可以是“down and not available”。

DAOS pool:逻辑存储空间,一个pool里包含若干个pool shard。

每个pool shard 分布在一个target上。一个target上可以承载多个pool shard。pool shard是target上的子空间。

DAOS Container:每个container是一个独立的对象地址空间,类似于S3的bucket概念。Container被一个UUID标识。这个概念对用户是可见的,在使用时需要用户自己创建。

一个Data Pool 可以承载多个(数量在100个左右)DAOS Container。每个 Container都是一个私有的对象地址空间,可以对其进行事务性修改,并且独立于在同一 Pool中的其他Container。Container是快照和数据管理的单元。一个Container内的DAOS对象通过Jump Consistent Hash算法可以分布在当前Pool的任何一个Target上以提高性能和恢复能力。

DAOS相关的管理数据例如pool,container等集群相关的数据保存在基于Raft协议实现的key-value的高可用的存储系统。类似于Ceph的monitor的功能。DAOS的 RSVC(replicated service)实现了一个基于Raft协议的服务框架,和具体的RDB(replicated database)组合来实现高可用,持久化保存相应的管理数据。具体实现在DAOS源码中src/rsvc和src/rdb中。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0