

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 HealthOmics 工作流程中執行儲存類型
<a name="workflows-run-types"></a>

當您開始執行時，HealthOmics 會配置暫時執行儲存體，供工作流程引擎在執行期間使用。HealthOmics 提供暫時執行儲存做為檔案系統。

對於指定的工作流程或工作流程執行，您可以選擇動態或靜態執行儲存。根據預設，HealthOmics 會提供 DYNAMIC 執行儲存體。

**注意**  
執行儲存體用量會對您的帳戶產生費用。如需靜態和動態執行儲存的定價資訊，請參閱 *[ HealthOmics 定價](https://aws.amazon.com/healthomics/pricing/)。*

下列各節提供決定要使用的執行儲存體類型時要考慮的資訊。

## 動態執行儲存
<a name="workflows-run-type-dynamic"></a>

我們建議對大多數執行使用動態執行儲存，包括需要更快開始時間的執行、您事先不知道儲存需求的執行，以及反覆開發測試週期。

您不需要預估執行所需的儲存體或輸送量。HealthOmics 會根據執行期間的檔案系統使用率，動態擴展或縮減儲存體大小。HealthOmics 也會根據工作流程的需求動態擴展輸送量。執行永遠不會因為**檔案系統錯誤的儲存空間不足**而失敗。

動態執行儲存提供比靜態執行儲存更快的佈建/取消佈建時間。更快速的設定是大多數工作流程的優點，也是開發/測試週期期間的優點。

執行完成後 （成功路徑或失敗路徑），getRun API 操作會在 storageCapacity 欄位中傳回執行所使用的最大儲存體。您也可以在位於日誌群組的執行資訊**omics**清單日誌中找到此資訊。對於在 2 小時內完成的動態儲存執行，最大儲存值可能無法使用。

對於動態執行儲存，執行會佈建使用 NFS 通訊協定的檔案系統。NFS 將 CREATE、DELETE 和 RENAME 檔案操作視為非等冪性，有時可能會導致程式碼必須正常處理這些操作的競爭條件。例如，如果程式碼嘗試刪除不存在的檔案，則不應失敗。採用動態執行儲存之前，建議您調整工作流程程式碼，使其對非等冪檔案操作具有彈性。請參閱 [安全處理非等冪操作的程式碼範例](#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 shell。若要安全地移除檔案，即使檔案不存在，請使用：

```
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 會佈建下列輸送量值：
+ 每個 TiB 佈建儲存容量的基準輸送量為 200 MB/s。
+ 每佈建 TiB 儲存容量的爆量輸送量最高可達 1300 MB/s。

如果指定的儲存體大小太低，則執行會失敗，並因**檔案系統錯誤導致儲存空間不足**。靜態執行儲存非常適合具有已知儲存需求的可預測工作流程。

靜態執行儲存體適用於具有高任務並行的大型高載工作負載 （例如，平行處理的大量 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 （靜態執行儲存體的最小容量） 足以進行此執行。