元件設定

通常有助於自訂元件的行為。 在 Fuchsia 中,這稱為「元件設定」。本頁面定義元件組態,並討論需要設定的不同情況的部分特性。

如要進一步瞭解 Fuchsia 為元件設定提供的各種機制,以及用於解決各項問題的機制,請參閱「元件設定機制」。

什麼是元件設定?

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

元件會使用各種不同的輸入內容。這些輸入內容大多可能會改變元件的行為,但只有部分輸入內容應視為「元件設定資料」,而非較為一般化的「資料」,例如系統的某些狀態或使用者輸入內容。元件設定資料和其他形式的資料之間的界線可能模糊,但區分這兩者十分重要,因為為元件設定資料設計的機制,在套用至其他情況時通常無法正常運作。每個情況都會有例外狀況,但設定值如下:

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

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

  • 功能旗標:使用布林值設定啟用或停用元件的部分功能。這項功能通常適用於新功能,如果遇到問題,可能需要快速停用。舉例來說,我們在 2022 年使用了功能旗標,讓 Pinweaver 可安全地加密帳戶資料區隔。
  • 板子調整 - 修改元件的行為,以符合其運作板子。例如,為 CPU 時脈提供中位誤差和誤差界限。
  • 產品調整 - 修改元件的行為,以符合其執行的產品。例如,指定 Session Manager 應啟動哪個工作階段元件。
  • 測試控制項:指定元件在測試中使用的不同行為。舉例來說,在整合測試中使用元件時,設定更快的重試逾時,以縮短執行測試所需的時間。
  • 偵錯控制項:啟用或停用其他元件診斷功能,以利偵錯。例如,在 eng 版本中啟用管理 FIDL 介面,但在 user 版本中不啟用。

以下是資料並非實際元件設定資料的徵兆:

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

元件設定情況的類型為何?

每個需要元件設定的情況都不盡相同。本節將逐步說明在調查需要設定的情況時,您應問自己的一些重要問題。這些問題的答案有助於您選擇適當的設定機制。

誰設定資料?

  • 元件開發人員。此處是元件開發人員提供設定值的地方。例如,測試環境和正式版環境使用不同的值組合,或是每個建構類型使用不同的值組合。
  • 產品整合服務供應商。開發人員在此負責將元件與特定產品或電路板供應器設定值整合,並根據該產品或電路板提供設定值。這些人可能就是開發元件的開發人員。
  • 車隊管理員。在此,管理車隊裝置的團隊會提供設定值。例如,如果在推出時發生問題,可以停用功能旗標。
  • 裝置管理員。這裡是指管理裝置的人員或機構提供的值。例如啟用新的實驗功能。對於開發裝置,管理員就是使用該裝置的開發人員。如果以 Fuchsia 為基礎的產品支援企業用途,擁有裝置的企業可能會擔任裝置管理員。
  • 使用者。在此,裝置的使用者會提供值,例如在設定流程中設定裝置的區域。

同一個設定資料可能需要由多個這些行為者設定,也可能在不同情況下由不同行為者設定。舉例來說,產品整合業者可能會在某項產品中停用某項功能,但管理員可以在其他產品中設定這項功能。

資料何時會修正?

  • 已修正。如果只有元件開發人員或產品整合人員 (或在某些情況下為車隊管理員) 可以變更設定資料,則在產品發布時,系統會將其固定。也就是說,發布程序可以在簽署前驗證設定。舉例來說,Fuchsia 團隊可以確認正式版本中一律停用偵錯選項。
  • 可在執行階段修改。裝置管理員或使用者 (在某些情況下為車隊管理員) 可以變更的設定資料,必須能在裝置執行期間變更。

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

有多少元件會使用資料?

  • 一個元件。在大多數情況下,只有一個元件需要使用設定資料。該元件的開發人員可以定義資料,並在需要時將設定與元件實作項目緊密結合。
  • 多個元件。在某些情況下,多個元件需要共用相同的設定資料,例如多個不同元件可能需要知道一組核准的 SSL 根鍵。

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

  • 。此處只有一個元件例項,或有多個元件例項一律使用相同的設定值。舉例來說,讀取板卡架構的裝置上,所有元件例項都應會收到相同的值。
  • 。在較複雜的情況下,您需要為同一個元件的不同執行個體提供不同的設定值。這類問題經常發生在整合測試中。舉例來說,元件執行個體在整合測試中執行時,逾時值可能需要比在實際環境中執行時低。

資料量有多大?

  • 。大多數元件的設定資料大小都很小或適中,從幾個位元組到幾十個千位元組不等。典型例子是元件會使用少數整數來設定效能,再加上數十個布林值來啟用實驗或功能。
  • :在某些情況下,設定資料會大幅增加,並以 MB 為單位。例如感應器的校正對照表,或大型機器學習模型的參數。