DAOS INTERNEL

本文的目的是描述DAOS使用的内部代码结构和主要算法,包含以下部分:

DAOS Components


如下图所示,DAOS安装涉及多个组件,这些组件可以是同一位置的,也可以是分布式的。DAOS软件定义存储(SDS)框架依赖于两种不同的通信通道:用于管理的带外TCP/IP网络和用于数据访问的高性能fabric。实际上,同一个网络可以用于管理和数据访问。IP over fabric也可用作管理网络。

image.png

DAOS System

DAOS服务器是一个多租户守护进程,运行在Linux实例(即物理节点、VM或container)上,管理分配给DAOS的本地连接的SCM和NVM存储。它侦听由IP地址和TCP端口号寻址的管理端口,以及由网络URI寻址的一个或多个fabric端点。DAOS服务器是通过YAML文件(/etc/DAOS/DAOS_server.yml,或命令行提供的其他路径)配置的。启动和停止DAOS服务器可以与不同的守护进程管理或编排框架(例如systemd脚本、Kubernetes服务,甚至通过pdsh或srun之类的并行启动程序)集成。

DAOS系统由一个系统名标识,它由一组连接到同一结构的DAOS服务器组成。两个不同的系统由两组不相交的服务器组成,彼此不协调。DAOSpool 不能跨多个系统。

在内部,DAOS服务器由多个守护进程组成。第一个要启动的是控制平面(二进制名为daos_server),它负责解析配置文件、配置存储并最终启动和监视数据平面的一个或多个实例(二进制名为daos_engine)。控制平面用Go编写,并在gRPC框架上实现DAOS管理API,该框架提供了一个安全的带外通道来管理DAOS系统。每个服务器要启动的数据平面实例的数量以及存储、CPU和结构接口关联可以通过daos_server.yml YAML配置文件进行配置。

数据平面是一个用C编写的多线程进程,它运行DAOS存储引擎。它通过CART通信中间件处理传入的元数据和I/O请求,并通过PMDK(用于存储类内存,又称SCM)和SPDK(用于NVMe ssd)库访问本地NVM存储。数据平面依赖于argobot进行基于事件的并行处理,并导出可通过fabric独立寻址的多个目标。在DAOS系统中,每个数据平面实例都被分配一个唯一的rank值。

控制平面和数据平面进程通过Unix域套接字和称为dRPC的定制轻量级协议进行本地通信。

For further reading:

Client APIs, Tools and I/O Middleware

应用程序、用户和管理员可以通过两个不同的client api与DAOS系统交互。

DAOS management Go包允许从任何(可以通过带外管理通道与DAOS服务器通信的)节点管理DAOS系统。此API保留给通过特定证书进行身份验证的DAOS系统管理员。DAOS管理API旨在与不同的特定于供应商的存储管理或开源编排框架集成。名为dmg的CLI工具是在DAOS管理API上构建的。有关管理API和dmg工具的进一步阅读:

DAOS库(libdaos)实现DAOS存储模型,主要面向希望将数据集存储到DAOScontainer中的应用程序和I/O中间件开发人员。它可以从连接到目标DAOS系统使用的结构的任何节点使用。应用程序进程通过DAOS代理进行身份验证(请参阅下一节)。libdaos导出的API通常称为DAOS API(与DAOS管理API不同),允许通过不同的接口(例如键值存储或数组API)管理container和访问DAOS对象。libdfs库模拟libdaos上的POSIX文件和目录抽象,并为需要POSIX命名空间的应用程序提供平滑的迁移路径。有关libdaos、不同编程语言和libdf的绑定的进一步阅读:

libdaos 和libdfs 库为支持特定领域的数据格式(如HDF5和Apache Arrow)提供了基础。有关I/O中间件集成的进一步阅读,请查看以下外部参考资料:

Agent

DAOS代理是驻留在客户机节点上的守护程序。它通过dRPC与DAOS客户机库交互,以验证应用程序进程。它是一个可信任的实体,可以使用本地证书对DAOSclient 凭据进行签名。DAOS代理可以支持不同的身份验证框架,并使用Unix域套接字与客户机库通信。DAOS代理用Go编写,通过gRPC与每个DAOS服务器的控制平面组件进行通信,向客户机库提供DAOS系统成员信息,并支持pool 列表。

Network Transport and Communications


如前一节所述,DAOS使用三种不同的通信信道。

gRPC and Protocol Buffers

gRPC为DAOS管理提供了双向安全通道。它依赖于TLS/SSL来验证管理员角色和服务器。协议缓冲区用于RPC序列化,所有proto文件都位于proto目录中。

dRPC

dRPC是在Unix域套接字上构建的用于进程间通信的通信通道。它提供了C和Go接口,以支持以下两者之间的交互:

  • the daos_agent and libdaos for application process authentication
  • the daos_server (control plane) and the daos_engine (data plane) daemons Like gRPC, RPC are serialized via protocol buffers.

CART

CART是一个用户空间函数传递库,它为DAOS数据平面提供低延迟高带宽通信。它支持RDMA功能和可扩展的集合操作。CART 是在Mercury (水银)和libfabric上建造的。CART库用于libdaos和daos_engine 实例之间的所有通信。

DAOS Layering and Services


Architecture

如下图所示,DAOS堆栈被构造为client/server体系结构上的存储服务集合。DAOS服务的例子有pool 、container、对象和重建服务。

image.png

DAOS服务可以分布在控制和数据平面上,并通过dRPC进行内部通信。大多数服务都有client 和服务器组件,可以通过gRPC或CART进行同步。跨服务通信总是通过直接的API调用来完成的。这些函数调用可以跨服务的client 或服务器组件调用。虽然每个DAOS服务都被设计成相当自治和隔离的,但有些服务的耦合比其他服务更紧密。这通常是重建服务的情况,它需要与pool 、container和对象服务密切交互,以便在DAOS服务器发生故障后恢复数据冗余。

基于服务的体系结构提供了灵活性和可扩展性,它与一组基础结构库相结合,这些库提供了可供所有DAOS服务访问的丰富软件生态系统(例如,通信、持久存储访问、具有依赖关系图的异步任务执行、加速器支持等)。

Source Code Structure

每个基础结构库和服务在src/下分配一个专用目录。服务的客户机和服务器组件存储在不同的文件中。作为客户机组件的一部分的函数的前缀是dc \(代表DAOS client),而服务器端函数的前缀是ds \(代表DAOS server)。client 和服务器组件之间使用的协议和RPC格式通常在名为RPC.h的头文件中定义。
在控制平面上下文中执行的所有Go代码都位于src/control下。管理和安全是分布在控制(Go语言)和数据(C语言)平面上的服务,通过dRPC进行内部通信。

向最终用户(即i/O中间件或应用程序开发人员)公开的官方DAOSAPI的标头位于src/include下,并使用DAOS\前缀。每个基础结构库导出一个API,该API在src/include/daos下可用,可以由任何服务使用。给定服务导出的client API(带有dc前缀)也存储在src/include/daos下,而服务器端接口(带有ds前缀)则存储在src/include/daos\srv下。

Infrastructure Libraries

GURT和common DAOS(即libdaos_ common)库为DAOS服务提供日志记录、调试和公共数据结构(如哈希表、btree等)。

本地NVM存储由版本对象存储(VOS)和blob I/O(BIO)库管理。VOS在SCM中实现持久索引,而BIO负责根据分配策略将应用程序数据存储在NVMe SSD或SCM中。VEA层集成到VOS中,并管理NVMe ssd上的块分配。

DAOS对象分布在多个目标上,以实现性能(即分片)和恢复能力(即复制或擦除代码)。placement库实现不同的算法(例如,基于环的放置、跳转一致性散列…)从目标列表和对象标识符生成对象的布局。

复制服务(RSVC)库最终提供了一些支持容错的公共代码。pool 、container和管理服务与RDB库结合使用,RDB库在Raft上实现复制的键值存储。

For further reading on those infrastructure libraries, please see: 有关这些基础结构库的更多信息,请参阅:
· Common Library
· Versioning Object Store (VOS)
· Blob I/O (BIO)
· Algorithmic object placement
· Replicated database (RDB)
· Replicated service framework (RSVC)

Software Compatibility

DAOS中的互操作性是通过持久数据结构的协议和模式版本控制来处理的。

Protocol Compatibility

DAOS存储堆栈将提供有限的协议互操作性。将执行版本兼容性检查以验证:

  • All targets in the same pool run the same protocol version.
  • Client libraries linked with the application may be up to one protocol version older than the targets.

如果在同一pool 中的存储目标之间检测到协议版本不匹配,则整个DAOS系统将无法启动,并将向控制API报告失败。类似地,来自运行与目标不兼容的协议版本的client 的连接将返回错误。

PM Schema Compatibility and Upgrade

持久数据结构的模式可能会不时地演变,以修复错误、添加新的优化或支持新的特性。为此,持久数据结构支持模式版本控制。

升级模式版本不是自动完成的,必须由管理员启动。将提供一个专用的升级工具,将模式版本升级到最新版本。同一pool 中的所有目标必须具有相同的模式版本。版本检查在系统初始化时执行,以强制执行此约束。

为了限制验证矩阵,每个新的DAOS版本都将发布一个受支持的模式版本列表。要使用新的DAOS版本运行,管理员需要将DAOS系统升级到受支持的模式版本之一。新target将始终使用最新版本重新格式化。此版本控制模式仅适用于存储在持久内存中的数据结构,而不适用于只存储用户数据而不存储元数据的块存储。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容