Cyborg 内部 API 规范¶
本文档大致规定了 Cyborg 各组件之间的 API 调用。驱动程序、Agent、Conductor 和 API 端点。
这些 API 是内部的,因此可能会在版本之间发生变化,恕不另行通知或保持向后兼容性。本文档作为开发者参考,在进行任何内部破坏性更改之前进行编辑。
问题描述¶
编写 Cyborg 组件的开发者需要知道如何与 Cyborg 的另一个组件通信,希望不必深入研究该组件的代码。
用例¶
更快乐的 Cyborg 开发者
提议的变更¶
内部 API 的版本控制
备选方案¶
一团糟
数据模型影响¶
固定的内部 API 有助于保持数据模型的一致性。
REST API 影响¶
API 更改将向以下添加资源端点
驱动程序
POST 从 Agent 开始加速器发现
GET 从 Agent 获取已发现的加速器及其属性的列表
Agent
POST 从 Driver 注册驱动程序
POST 从 Conductor 开始跨所有驱动程序的加速器发现
GET 从 Conductor 获取跨所有驱动程序的所有加速器列表
Conductor: * POST 从 Agent 注册 Agent
将创建以下新的 REST API 调用
Driver ‘POST /discovery’¶
触发特定驱动程序的发现和设置过程
Content-Type: application/json
{
"status":"IN-PROGRESS"
}
Driver ‘GET /hardware’¶
获取硬件列表,而不是加速器。加速器是可通过公共 API 使用的已准备好的条目。硬件是节点上的物理设备,可能尚未准备好使用,甚至完全支持。
200 OK
Content-Type: application/json
{
"hardware":[
{
"uuid":"8e45a2ea-5364-4b0d-a252-bf8becaa606e",
"acc_specs":
{
"remote":0,
"num":1,
"device_type":"CRYPTO"
"acc_capability":
{
"num":2
"ipsec":
{
"aes":
{
"3des":50,
"num":1,
}
}
}
}
"acc_status":
{
"setup_required":true,
"reboot_equired":false
}
}]
}
Driver ‘POST /hello’¶
注册驱动程序已安装在机器上并已准备好使用。以及它的端点和硬件支持。
Content-Type: application/json
{
"status":"READY",
"endpoint":"localhost:1337",
"type":"CRYPTO"
}
Agent ‘POST /discovery’¶
触发所有已注册驱动程序的发现和设置过程
请参阅驱动程序示例
Agent ‘GET /hardware’¶
获取节点上所有驱动程序的硬件列表
请参阅驱动程序示例
Conductor ‘POST /hello’¶
注册 Agent 已安装在机器上并已准备好使用。
Content-Type: application/json
{
"status":"READY",
"endpoint":"compute-whatever:1337",
}
安全影响¶
必须小心保护内部端点免受恶意调用
通知影响¶
N/A
其他最终用户影响¶
此更改可能会对 python-cyborgclient 产生影响
性能影响¶
在这种模型中,Agent 负责处理计算中的多个驱动程序,而 Conductor 负责处理所有 Agent,以便快速轻松地向 API 呈现连贯的答案。我尚未包含 API <-> Conductor 调用,因为我假设 API 将主要从数据库工作,而 Conductor 尝试使该数据库保持最新,并偶尔进行设置调用。
其他部署者影响¶
在这种模型中,我们实际上无法知道我们是否缺少 Agent。如果它之前报告过,然后消失了,我们可以为此发出警报。但是,如果 Agent 从未报告过,我们只能假设该名称下不存在实例。这意味着确保 Cyborg 驱动程序/Agent 已安装并正在运行是部署工具的责任。
开发者影响¶
Cyborg 中更多的内部通信
实现¶
负责人¶
- 主要负责人
jkilpatr
- 其他贡献者
zhuli
工作项¶
N/A
依赖项¶
N/A
测试¶
N/A
文档影响¶
N/A
参考资料¶
N/A
历史记录¶
发布名称 |
描述 |
|---|---|
Queens |
引入 |