将马尼拉添加为二进制存储

https://blueprints.launchpad.net/sahara/+spec/manila-as-binary-store

网络和分布式文件系统是共享分布式架构中文件的一种有效方式。 这种核心用例使它们成为存储作业二进制文件的绝佳选择。

问题描述

虽然内部数据库存储和 Swift 存储是二进制存储的合理选择,但添加马尼拉集成使其成为作业二进制文件存储和检索的第三种选择。 本规范详细介绍了将如何实现此功能。

提议的变更

将在创建作业二进制文件时添加 manila 方案作为选项。 URL 的形式为

manila://{share_id}/绝对路径到文件

作为二进制文件位置存储的 URL 可以通过以下验证

  1. 马尼拉共享 ID 存在。

  2. 共享类型是 Sahara 识别为有效的二进制存储类型。

由于马尼拉共享未挂载到控制平面,也不应该挂载,因此我们将无法评估打算作为作业二进制文件的文件的存在与否。

但是,我们可以通过马尼拉评估共享类型。 对于初始参考实现,仅允许使用 NFS 共享; 其他共享类型可以在后续更改中进行验证和添加。

对于这种二进制类型,Sahara 不会检索二进制文件并将它们复制到相关节点; 预计它们可以通过节点自己的文件系统访问。 相反,Sahara 将

  1. 确保将共享挂载到适当的集群节点(在 Oozie 的情况下,包含 Oozie 服务器的节点组; 在 Spark 的情况下,包含 Spark Master 的节点组等)。 如果共享尚未挂载,Sahara 将使用 blueprint mount-share-api 描述的机制(在默认路径下)将共享挂载到适当的节点组,并更新集群的 DB 定义以记录文件系统挂载。

  2. manila://{share_id} 替换为本地文件系统挂载点,并使用这些本地文件系统路径构建工作流文档或作业执行命令,如引擎指示。 然后可以正常进行作业执行。

值得注意的是,本规范不涵盖马尼拉安全提供程序的支持。 可以在未来的更改中添加此类支持,并且不应影响此机制。

替代方案

虽然在二进制文件创建时验证路径是理想的,但挂载租户文件系统(抽象地说,不一定需要可用的集群)是一种禁止性的安全问题,其重要性超过了这种便利功能(即使我们假设网络不是问题)。

我们也可以创建一个更通用的 file:// 作业二进制文件方案,无论是作为 manila:// 的补充,还是作为其替代方案。 但是,这并不能特别促进集群之间的重用(在用户手动执行大量步骤的情况下),也不能在必要时自动挂载。

我们也可以选择简单地引发异常,如果共享尚未由用户挂载到集群。 但是,由于自动挂载的路径清晰,并且在 mount-share-api 功能完成后将非常简单,因此自动挂载似乎是初始实现中明智的选择。

数据模型影响

无。

REST API 影响

无。

其他最终用户影响

无。

部署者影响

无。

开发者影响

无。

Sahara-image-elements impact

无。

Sahara-dashboard / Horizon 影响

马尼拉将被添加为可见的作业二进制文件存储选项; 没有其他更改。

实现

负责人

主要负责人

egafford

次要分配者/审查者

croberts

工作项

  • 验证更改(URL 方案)。

  • 与挂载功能的集成。

  • 为马尼拉创建“作业二进制文件检索器”策略(鉴于上述策略,这将主要是不操作)。

  • 修改工作流和执行命令代码以促进此流程。

  • Horizon 更改(在单独的规范中)。

  • 文档。

依赖项

无。

测试

假定单元测试;除此之外,完整的集成测试将取决于将马尼拉端点添加到我们的 CI 环境的可行性。 如果这是可行的,那么我们的测试路径将很清晰; 如果不可行,那么将无法进行门控集成测试。

文档影响

此功能需要在 edp.rst 中进行文档记录。

参考资料

如果对马尼拉操作不熟悉,请参阅 https://wiki.openstack.org/wiki/Manila/API