DAOS 分布式异步对象存储|相关组件
DAOS 的安装涉及多个组件,这些组件可以是集中式的,也可以是分布式的。
DAOS 软件定义存储 (software-defined storage, SDS) 框架依赖于两种不同的通信通道:
- 用于带外管理 (out-of-band management) 的 TCP/IP 网络;
- 用于数据访问的高性能结构。
实际上,同一个网络可以用于管理和数据访问。IP over Fabric 也可用作管理网络。

DAOS 系统
DAOS 服务器是一个多租户守护进程,运行在 Linux 实例(物理节点、VM 或容器)上,管理分配给 DAOS 本地连接的 SCM (Storage-Class Memory) 和 NVM (Non-Volatile Memory) 存储。它监听由 IP 地址和 TCP 端口号寻址的管理端口,以及由网络 URI 寻址的一个或多个结构端点。
DAOS 服务器是通过 YAML 文件 /etc/daos/daos_server.yml(可通过命令行指定的其他路径)进行配置的。服务的启动和停止可以与不同的守护进程管理或编排框架集成(systemd 脚本、Kubernetes 服务、或类似 pdsh 和 srun 的并行启动程序)。
DAOS 系统由一个系统名标识,它由一组连接到同一结构的 DAOS 服务器组成。两个不同的系统由两组不相交的服务器组成,彼此不能相互协调。DAOS Pool 也不能跨多个系统。
在内部,DAOS 服务器由多个守护进程组成:
首先要启动的是控制平面(control plane,二进制名 daos_server)。
- 它负责解析配置文件、配置存储并最终启动和监视数据平面的一个或多个实例。
- 控制平面用 Go 编写,并在 gRPC 框架上实现 DAOS management API。该框架提供了一个安全的带外通道来管理 DAOS 系统。
- 每个服务器要启动的数据平面实例的数量以及存储、CPU 和 Fabric Interface Affinity 可以通过
daos_server.yml进行配置。
然后是数据平面(data plane,二进制名 daos_engine)。
数据平面是一个用 C 编写的多线程进程,负责运行 DAOS 存储引擎。它通过 CART 通信中间件处理传入的元数据和 I/O 请求,并通过 PMDK(Persistent Memory Devevelopment Kit,用于 SCM)和 SPDK(Storage Performance Development Kit,用于 NVMe SSD)访问本地 NVM 存储。
数据平面依赖于 ABT (Argobots) 进行基于事件的并行处理,并导出可通过结构独立寻址的多个 Target。
在 DAOS 系统中,每个数据平面实例都被分配一个唯一的等级。
控制平面和数据平面进程通过 Unix Domain Sockets 和被称为 dRPC 的定制轻量级协议进行本地通信。
进一步阅读:
- DAOS 控制平面 DAOS control plane (daos_server)
- DAOS 数据平面 DAOS data plane (daos_engine)
- Persistent Memory Devevelopment Kit
- Storage Performance Development Kit
客户端 API,工具和 I/O 中间件
应用程序、用户和管理员可以通过两个不同的客户端 API 与 DAOS 系统交互。
DAOS management Go package 允许从任何可以通过带外管理通道与 DAOS 服务器通信的节点管理 DAOS 系统。此 API 保留给通过特定证书进行身份验证的 DAOS 系统管理员。DAOS management API 旨在与不同供应商的存储管理或开源编排框架集成。名为 dmg 的命令行工具是在 DAOS management API 上构建的。
进一步阅读:
DAOS 库 libdaos 实现了 DAOS 存储模型,主要面向希望将数据集存储到 DAOS container 中的应用程序和 I/O 中间件开发人员。它可以被连接到目标 DAOS 系统所使用的结构的任何节点使用。
应用程序进程通过 DAOS 代理进行身份验证。libdaos 导出的 API 通常称为 DAOS API(不同于 DAOS management API),允许通过不同的接口(例如键值存储或 array API)管理 container 和访问 DAOS 对象。
libdfs 库模拟 libdaos 上的 POSIX 文件和目录抽象,并为需要 POSIX 命名空间的应用程序提供平滑的迁移过程。
进一步阅读:
- DAOS Library (
libdaos) and array interface and KV interface built on top of the native DAOS API - Python API bindings
- Go bindings and API documentation
- POSIX File & Directory Emulation (
libdfs)
libdaos 和 libdfs 库为支持特定的数据格式(例如 HDF5 和 Apache Arrow)提供了基础。
进一步阅读:
代理
DAOS 代理 (DAOS agent) 是驻留在客户端节点上的守护程序,它通过 dRPC 与 DAOS 客户端库进行交互,以验证应用程序进程。
DAOS 代理是一个可信任的实体,可以使用本地证书对 DAOS 客户端凭据进行签名,同时支持不同的身份验证框架,并使用 Unix Domain Sockets 与客户端库通信。
DAOS 代理用 Go 编写,通过 gRPC 与每个 DAOS 服务器的控制平面组件进行通信,向客户端库提供 DAOS 系统成员信息,并支持 Pool 列表。
相关信息
GitHub: https://github.com/storagezhang
Emai: debugzhang@163.com
华为云社区: https://bbs.huaweicloud.com/blogs/255551
DAOS: https://github.com/daos-stack/daos
本文翻译自 https://github.com/daos-stack/daos/blob/master/src/engine/README.md
DAOS 分布式异步对象存储|相关组件的更多相关文章
- 从两个模型带你了解DAOS 分布式异步对象存储
摘要:分布式异步对象存储 (DAOS) 是一个开源的对象存储系统,专为大规模分布式非易失性内存 (NVM, Non-Volatile Memory) 设计,利用了 SCM(Storage-Class ...
- DAOS 分布式异步对象存储|架构设计
分布式异步对象存储 (DAOS) 是一个开源的对象存储系统,专为大规模分布式非易失性内存 (NVM, Non-Volatile Memory) 设计,利用了SCM(Storage-Class Memo ...
- DAOS 分布式异步对象存储|存储模型
概述 DAOS Pool 是分布在 Target 集合上的存储资源预留.分配给每个 Target 上的 Pool 的实际空间称为 Pool Shard. 分配给 Pool 的总空间在创建时确定,后期可 ...
- DAOS 分布式异步对象存储|故障模型
DAOS 依靠大规模分布式单端口存储.因此,每个 Target 实际上都是一个单独的失败点. DAOS 通过在不同的容错域中提供 Target 间的冗余来实现数据和元数据的可用性和持久性.DAOS 内 ...
- DAOS 分布式异步对象存储|事务模型
DAOS API 支持分布式事务,允许将针对属于同一 Container 的对象的任何更新操作组合到单个 ACID 事务中.分布式一致性是通过基于多版本时间戳排序的无锁乐观并发控制机制提供的.DAOS ...
- DAOS 分布式异步对象存储|数据平面
DAOS 通过两个紧密集成的平面进行运转.数据平面处理繁重的运输操作,而控制平面负责进程编排和存储管理,简化数据平面的操作. 模块接口 I/O 引擎支持一个模块接口,该接口允许按需加载服务器端代码.每 ...
- DAOS 分布式异步对象存储|安全模型
DAOS 使用了一个灵活的安全模型,将身份验证和授权分离开来.它的设计令其对 I/O 的影响被降到最小. DAOS 对用于 I/O 传输的网络结构没有提供任何传输安全性保障.在部署 DAOS 时,管理 ...
- OSS与文件系统的对比 文件存储 块存储 对象存储
基本概念介绍_开发指南_对象存储 OSS-阿里云 https://help.aliyun.com/document_detail/31827.html 强一致性 Object 操作在 OSS 上具有 ...
- go语言实现分布式对象存储系统之单体对象存储
对象存储 基本概念 主流存储类型分为三种:块存储.文件存储以及对象存储 NAS(文件存储):Network Attached storage,提供了存储功能和文件系统的网络服务器,客户端可以访问NAS ...
随机推荐
- Cocos Creator 游戏开发
Cocos Creator 游戏开发 https://www.cocos.com/products#CocosCreator 一体化编辑器: 包含了一体化.可扩展的编辑器,简化了资源管理.游戏调试和预 ...
- Scalability & Scale-up & Scale-out
Scalability & Scale-up & Scale-out 架构,弹性,伸缩性 Scalability 可扩展性 https://en.wikipedia.org/wiki/ ...
- DENIEL SOIBIM:如何保持坚持
丹尼尔·索比姆作为加州理工高材生,在2005年通过创建投资俱乐部对潜力公司进行天使投资,获得了美国Blue Run高层的重视,并相继担任Blue Run潜力营收专家评估师,2009年成为星盟集团的副总 ...
- NGK项目为什么要发币
每个区块链创新应用的出现,基本都发行了自己的数字货币,像比特币,以太坊等.数字货币是区块链的资产,是区块链技术的一个应用,实现了用区块链传递价值的目的.目前市面上的数字货币林林总总几千种,其中公链发行 ...
- PAA房产智慧社区:解决社区管理服务的痛点难点
社区,是社交与生活的舞台,更是家的延伸.社区之所有能够有所创新发展,得益于借助数字化和智能化.智能化给社区带来的便利体现在社区门禁可以人脸识别:AI的摄像头可以自动捕获异常的现象,便于社区管理员第一时 ...
- NGK——解决区块链用户之“难”
自比特币诞生以来,区块链行业已发展十余年,而且在在金融.民生.司法存证.供应链协同.税务发票.版权保护等领域得到一定程度的应用,但大多属于边缘业务,以探索试点为主,应用深度和广度不足.为什么会这样?是 ...
- 19_MySQL表的内连接
本节所涉及的SQL语句: -- 表连接查询 -- 查询每名员工(员工名字,编号)的部门信息(部门编号,部门名称) SELECT e.empno,e.ename,d.dname FROM t_emp e ...
- Django简单的使用及一些基础方法
目录 一.静态文件配置 1. 什么是静态文件 2. 静态文件的用法 3. 静态文件的动态绑定 二.请求方式与相应 1. get请求 2. post请求 3. Django后端视图函数处理请求 三.re ...
- linux之docker 安装 mysql
首先进入docker : 命令:systemctl start docker 查詢一下docker的状态: 命令:docker images 现在开始安装mysql了,第一步拉取镜像 命令:doc ...
- Service Cloud 零基础(五)Trailhead学习 Embedded Chat
本篇参考:https://trailhead.salesforce.com/content/learn/modules/web-chat 想一下我们为什么要用service cloud呢?为什么要有s ...