元件設定

這種做法在 Fuchsia 中稱為「元件設定」。本頁面會定義元件設定,並討論需要設定的不同情況的一些特性。

如要進一步瞭解 Fuchsia 為元件設定提供的不同機制,以及用來解決每個問題的機制,請參閱元件設定機制

什麼是元件設定?

「元件設定資料」是提供給元件執行個體的資料,它可以用來瞭解及調整啟動的情境 (例如產品板型建構類型omaha 通道、法規區域或整合測試領域)。「元件設定」是定義、提供及使用這類資料的程序。設定元件的功能非常實用,因為可讓在不同情境中使用相同的元件。舉例來說,相同的元件可用於不同產品或不同硬體平台。如果沒有元件設定,開發人員就必須建立多個元件,例如「foo_for_product_a」、「foo_for_product_b」和「foo_for_testing」。

元件會取用多種輸入資料。這些輸入內容大多可能會變更元件的行為,但只有部分輸入內容應視為「元件設定資料」,而非較為籠統的「資料」,例如系統的狀態或一些使用者輸入內容。元件設定資料與其他形式資料之間的界線可能有模糊不清的問題,但這些差別非常重要,因為專為元件設定資料設計的機制在套用至其他情況下通常無法正常運作。例外狀況

  • 在元件執行個體的生命週期中,通常保持不變
  • 在部分裝置上通常相同
  • 通常是由開發人員、維護人員或管理員設定,而非使用者。

以下是元件設定的常見範例:

  • 功能旗標 - 使用布林值設定啟用或停用元件的某些功能。這通常對於需要迅速停用的新功能相當實用,舉例來說,2022 年使用了一個功能旗標,以安全的方式讓 Pinweaver 加密帳戶資料分區。
  • 面板調整 - 根據執行元件的主面板調整元件的行為。例如,提供 CPU 時脈的中位數錯誤和錯誤限制。
  • 產品調整 - 配合執行產品,修改元件的行為。例如,指定工作階段管理員應啟動哪個工作階段元件。
  • 測試控制項 - 指定元件使用測試時的不同行為。例如,在整合測試中使用元件時,設定更快的重試逾時,以縮短測試執行所需的時間。
  • 偵錯控制項:啟用或停用其他元件診斷以協助偵錯。舉例來說,在 eng 版本中啟用管理 FIDL 介面,但不在 user 建構中。

以下跡象表示資料實際上並非元件設定資料

  • 資料會由元件本身修改。會變更某些可設定狀態的元件 (例如回應 FIDL 要求) 必須在設定輸入變更後,合理化這些可設定狀態的元件。這類情況下,通常有兩個必須定義的類似但不同狀態:元件設定狀態 (例如「default_foo」) 和系統狀態 (例如「foo」)。元件一開始會將 foo 設為 default_foo,但之後兩者可能會獨立變更。元件擁有 foo 狀態,但設定系統擁有 default_foo 的狀態。
  • 元件執行個體會針對與其互動的每個元件使用不同的資料。如果伺服器支援來自不同用戶端的連線,並允許每個用戶端自訂互動,則設定會是「連線設定」,而非「元件設定」。本文討論的機制並非為解決此一情況,但如上所述,系統可能仍有元件設定狀態來定義新連線使用的「預設」。
  • 資料在執行階段會頻繁且頻繁地變更。元件設定資料反映了元件執行個體啟動的環境。這些環境通常都是固定的,但在某些情況下,環境或與環境相關聯的設定資料可能會在執行階段變更。例如,使用者可能會飛往其他法規地區,或者產品可能會啟用新功能。不過,這些執行階段變更的頻率仍低於許多系統狀態的變更頻率,而本文討論的機制則專為這種低變化率設計而設計。

元件設定情況類型為何?

需要元件設定的每種情況都不同。本節將逐步說明幾個重要問題,您在調查需要設定的情況時該思考。這些問題的答案將協助您選取適當的設定機制。

資料由誰負責設定?

  • 元件開發人員。以便元件的開發人員提供設定值。例如,測試用和實際工作環境不同的一組值,或是每個建構類型有不同的值組合。
  • 產品整合商。這裡的開發人員負責根據該產品或主面板將元件與特定產品或主面板提供設定值整合。他們也許是開發元件的人員。
  • 機群管理員。管理一機群裝置的團隊會提供設定值。例如,在推出作業發生問題時停用功能旗標。
  • 裝置管理員:在這裡,管理裝置的人員或機構會提供價值。例如啟用新的實驗功能。對於開發裝置,管理員是指使用該裝置的開發人員。如果產品以 Fuchsia 支援的企業用途為基礎,擁有裝置的企業可能會擔任裝置管理員。
  • 使用者。在這裡,裝置使用者會提供值,例如在設定流程中設定裝置的區域。

相同的設定資料可能需要由多個發動者設定,而且可能由不同的演員在不同的情況中設定。舉例來說,某個產品中的產品整合商可能會停用某項功能,但其他產品中的管理員卻設定該功能。

資料何時修正?

  • 發布時修正。如果只有元件開發人員或產品整合商 (在某些情況下,或機群管理員) 才能變更設定資料,則產品發布時將會修正該資料。這表示發布程序可以在簽署之前驗證設定。舉例來說,Fussia 團隊可驗證在正式版中一律停用偵錯選項。
  • 可修改執行階段。裝置管理員或使用者 (在某些情況下) 可以變更的設定資料,在裝置執行期間必須能夠變更。

在某些產品或建構類型的發布時,系統可能會修正相同的設定資料,但在其他產品或建構類型中則可修改執行階段。

有多少元件會使用這項資料?

  • 單一元件。在大多數情況下,只有一個元件會耗用設定資料。該元件的開發人員可以定義資料,如有需要,設定可以緊貼元件實作。
  • 多個元件。在某些情況下,多個元件必須共用相同的設定資料。例如,數個不同的元件可能需要知道一組已核准的 SSL 根金鑰。

元件的所有執行個體設定是否不同?

  • 。這裡只有一個元件執行個體,或是多個元件執行個體一律使用相同的設定值。例如,在讀取主面板架構的裝置上,所有元件執行個體應都會收到相同的值。
  • 可以。在較複雜的情況下,您必須為相同元件的不同執行個體提供不同的設定值。這通常發生在整合測試中。舉例來說,與在實際工作環境中執行整合測試中的元件執行個體時,可能需要較低的逾時值。

資料有多大?

  • 。大多數元件的設定資料都很小或中等,只有幾位元組到數十 KB。典型的例子就是需要一些整數來設定效能,再加上一些十個布林值來啟用實驗或功能。
  • Large。在某些情況下,設定資料會大幅增加,且以 MB 為單位。例如,大型機器學習模型的感應器或參數校正地圖。