

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 HealthOmics 工作流程中运行存储类型
<a name="workflows-run-types"></a>

开始运行时， HealthOmics 会分配临时运行存储空间供工作流引擎在运行期间使用。 HealthOmics以文件系统的形式提供临时运行存储。

对于给定的工作流程或工作流程运行，您可以选择动态或静态运行存储。默认情况下， HealthOmics 提供动态运行存储。

**注意**  
运行存储空间使用量会对您的账户产生费用。有关静态和动态运行存储的定价信息，请参阅*[ HealthOmics定价](https://aws.amazon.com/healthomics/pricing/)。*

以下各节提供了在决定使用哪种运行存储类型时需要考虑的信息。

## 动态运行存储
<a name="workflows-run-type-dynamic"></a>

我们建议在大多数运行中使用动态运行存储，包括需要更快启动时间的运行、事先不知道存储需求的运行以及迭代开发测试周期。

您无需估计运行所需的存储空间或吞吐量。 HealthOmics 根据运行期间的文件系统利用率，动态地向上或向下扩展存储大小。 HealthOmics 还可以根据工作流程的需求动态扩展吞吐量。由于**文件系统存储空间不足错误，**运行永远不会失败。

动态运行存储提供的 provisioning/deprovisioning 时间比静态运行存储更快。对于大多数工作流程来说，更快的设置都是一个优势，在 development/test 周期中也是一个优势。

运行完成（成功路径或失败路径）后，GetRun API 操作会在 StorageCapacity 字段中返回运行使用的最大存储空间。您也可以在日志组中的运行清单**omics**日志中找到此信息。对于在 2 小时内完成的动态存储运行，最大存储值可能不可用。

对于动态运行存储，运行会提供使用 NFS 协议的文件系统。NFS 将 “创建”、“删除” 和 “重命名” 文件操作视为非等性，这有时可能会导致您的代码需要优雅处理的这些操作出现竞争条件。例如，如果您的代码尝试删除不存在的文件，则不应失败。在采用动态运行存储之前，我们建议您调整工作流程代码，使其能够适应非等性文件操作。请参阅[用于安全处理非等性运算的代码示例](#idempotent-code-examples)。

## 用于安全处理非等性运算的代码示例
<a name="idempotent-code-examples"></a>

以下 python 示例显示了如果文件不存在，如何删除该文件而不会失败。

```
import os
import errno

def remove_file(file_path):
    try:
        os.remove(file_path)
    except OSError as e:
        # If the error is "No such file or directory", ignore it (or log it)
        if e.errno != errno.ENOENT:
            # Otherwise, raise the error
            raise
            
# Example usage
remove_file("myfile")
```

以下示例使用 Bash 外壳。要安全地删除文件（即使该文件不存在），请使用：

```
rm -f my_file
```

要安全地移动（重命名）文件，请仅在该文件`old_name`存在于当前目录中时才运行移动命令。

```
[ -f old_name ] && mv old_name new_name
```

要创建目录，请使用以下命令：

```
mkdir -p mydir/subdir/  
```

## 静态运行存储
<a name="workflows-run-type-static"></a>

对于静态运行存储，运行会提供使用 Lustre 协议的文件系统。默认情况下，此协议可适应非等效文件操作。您无需调整工作流程代码即可处理非等性文件操作。

HealthOmics 分配固定数量的运行存储空间。您可以在开始运行时指定此值。如果您未指定值，则默认运行存储空间为 1200 GiB。当您在 StartRun API 请求中为存储大小指定值时，系统会将该值四舍五入到最接近的 1200 GiB 的倍数。如果该存储大小不可用，则四舍五入到最接近的 2400 GiB 的倍数。

对于静态运行存储， HealthOmics 请配置以下吞吐量值：
+ 预配置的 MB/s 每 TiB 存储容量的基准吞吐量为 200。
+ 配置的 MB/s 每 TiB 存储容量最高可达 1300 的突发吞吐量。

如果指定的存储大小太低，则运行将失败，并显示**文件系统存储空间**不足错误。静态运行存储非常适合具有已知存储要求的可预测工作流程。

静态运行存储适用于具有高任务并发性的大型、突发性工作负载（例如，并行处理大量 RNASeq 样本）。与动态运行存储相比，它可提供更高的每 GiB 文件系统吞吐量和更低的每 GiB 成本。

## 计算所需的静态运行存储空间
<a name="workflows-run-types-calc"></a>

工作流程在使用静态运行存储（与动态运行存储相比）时需要额外的容量，因为基础文件系统安装使用静态文件系统容量的 7%。

如果您运行动态运行存储工作流程来测量运行使用的最大存储空间，请使用以下计算来确定所需的最小静态存储量：

```
  static storage required = 
         maximum storage in GiB used by the dynamic run storage  
           + (total static file system size in GiB * 0.07)
```

例如：

```
     Maximum storage measured from a dynamic run storage workflow run:  500GiB
       File system size: 1200GiB
       7% of the file system size:  84GiB
       500 + 84 = 584GiB of static run storage required for this run.
```

 因此，1200GiB（静态运行存储的最小容量）足以满足此次运行的需求。