儲存空間功能

儲存空間功能 分配個別元件 檔案系統目錄中的「獨立」儲存空間。藉此防止元件 執行個體,無法存取屬於其他元件的檔案 所以

不同的儲存機制可能支援不同的儲存功能。A 罩杯 元件不應假設整個儲存體之間可以原子的 IO 作業 即便沒有技術背景,也能因這些工具的功能而受益

如需可在元件之間共用目錄的相關資訊,請參閱 目錄功能

標準儲存空間能力名稱

標準名稱經常用於儲存功能。每個 標準名稱意味著 並提供特定行為只要元件收到 具備上述其中一種標準名稱的儲存空間能力,可能會假設其提供 行為。

請注意,儲存空間能力名稱「不一定」能從全域識別為 儲存空間能力例如在部分產品中,不同的儲存空間 名為 data 的功能位於元件執行個體的不同位置 拓撲這些儲存空間功能由不同目錄提供支援 儲存空間磁碟區不同,但每項元件的用途都相同 執行個體

並非所有儲存空間功能都會使用下列其中一個標準名稱。在這些情況下 儲存空間能力行為行為的預期應記錄在 其中已定義儲存空間能力,且位於元件中的每一個位置 能力重新命名的執行個體拓撲

請注意,在測試儲存空間功能期間,建立的儲存功能可能不一致 這些行為舉例來說,整合測試可能會提供 data 針對不同測試案例清除的能力。

data

名為「資料」的儲存空間功能目的在於儲存一般用途 提供永久性資料

元件可能會假設這些儲存空間中的檔案 但不會被系統刪除元件使用時必須較為保守 data的原因是合約不允許系統在 磁碟空間有限,已耗盡。在多數情況下,建議您使用 cache

cache

名為「快取」的儲存空間功能目的在於儲存資料 捨棄或重新產生例如,匯出的圖片 重新擷取。

儲存在 cache 中的檔案通常會在相同執行作業之間保留 但不保證一定如此。檔案可遭到 任何時間都沒問題

tmp

名為「tmp」的儲存空間功能用於儲存臨時或中級檔案 資料。

元件執行期間,系統可能會刪除儲存在 tmp 中的檔案。 元件執行期間,系統不會刪除檔案。tmp 元件啟動時,通常會空白,但不保證一定如此。 元件不得假設 tmp 在啟動時會是空白,但也不應使用 任何檔案

備份目錄

每項儲存空間能力都必須以 目錄功能 來託管 每個元件的子目錄當元件執行個體嘗試存取 儲存空間能力、架構 在該元件的後置目錄中產生一個唯一的子目錄。

架構會根據 執行個體的 猴子 或從 20 個 HTTP 伺服器 執行個體 ID ,直接在 Google Cloud 控制台實際操作。每個執行個體 ID 都是 元件 ID 索引檔案中列出的 256 位元全域專屬 ID。

以下是元件 ID 索引檔案中的項目範例,其中包含 穩定的執行個體 ID:

{
    instances: [
        {
            instance_id: "47c3bf08f3e560c4dee659c28fa8d863dbdc0b1dbb74065e6cb1f38441ac759c",
            moniker: "/core/my_component",
        },
    ],
}

執行個體 ID 可讓元件儲存空間在變更期間持續保留 例如將元件執行個體移至不同領域 對於測試或其他用途,使用路徑名稱是不錯的次要做法 無需持久可用的儲存空間

如要進一步瞭解執行個體 ID,請參閱元件 ID 索引

提供儲存空間功能

如要提供儲存空間能力,元件必須宣告 從self

{
    capabilities: [
        {
            storage: "tmp",
            from: "self",
            backing_dir: "memfs",
            storage_id: "static_instance_id",
        },
    ],
}

您必須使用有效的目錄能力指定 backing_dir 名稱。

from 欄位會宣告提供備份目錄的元件。 如果供應程式,您可以提供元件參考資料 另一個元件

轉送儲存空間功能

無法向父項元件公開儲存空間功能。元件 將支援目錄轉送至適當的父項元件 其中可宣告儲存空間,並提供給所需的 。

如要進一步瞭解架構如何轉送元件功能, 請參閱功能轉送

提供

提供儲存空間能力可讓子項元件存取該功能 功能:

{
    offer: [
        {
            storage: "data",
            from: "self",
            to: [ "#storage-user" ],
        },
    ],
}

使用儲存空間功能

如要使用儲存空間能力,元件必須要求能力並 開啟對應的路徑 命名空間 ,直接在 Google Cloud 控制台實際操作。

如要要求這項能力,請為該功能新增 use 宣告:

{
    use: [
        {
            storage: "data",
            path: "/example_dir",
        },
    ],
}

這會在元件的命名空間中,填入所提供的 path 目錄 包含隔離儲存空間的內容

使用選用的儲存空間功能

請參閱連結元件:使用選用功能

儲存空間範例

請考慮以下示例:元件 A 要求獨立儲存空間 來自父項的 tmp

// A.cml
{
    use: [
        {
            storage: "tmp",
            path: "/example_dir",
        },
    ],
}

這可在命名空間的 /example_dir 提供獨立的儲存空間目錄 組成元件A 父項元件 B 使用備份目錄,為 A 提供這項能力 由同一領域中的 memfs 元件提供:

// B.cml
{
    capabilities: [
        {
            storage: "tmp",
            from: "#memfs",
            backing_dir: "memfs",
        },
    ],
    offer: [
        {
            storage: "tmp",
            from: "self",
            to: [ "#A" ],
        },
    ],
    children: [
        { name: "A", url: "fuchsia-pkg://...", },
        { name: "memfs", url: "fuchsia-pkg://..." },
    ],
}

如要進一步瞭解如何實作目錄,請參閱 目錄功能