Databend ソース コードの読み取り: 構成管理

著者: Shang Zhuoran (PsiACE)、マカオ科学技術大学修士課程学生、Databend R&D エンジニアインターン

Apache OpenDAL(インキュベーション) コミッター

https://github.com/PsiACE

Databend のような複雑なデータベース サーバー プログラムの場合、多くの場合、運用および保守担当者が実際の使用ニーズに応じてシステムを管理および調整できるように、多数の構成可能なオプションをサポートする必要があります。

Databend は現在、コマンド ライン、環境変数、構成ファイルの 3 つの構成方法をサポートしており、優先順位が低くなります。

  • 一般に、構成ファイルを使用してさまざまな構成を記録および管理することをお勧めします。
  • K8S クラスターの場合、一部の構成 (機能スイッチなど) を柔軟に変更するには、環境変数を使用する方がより洗練された形式になる可能性があります。
  • コマンド ラインは、ローカル環境でいくつかの競合する構成を調整するために使用されます。

データベンドクエリでのマッピング

どのdatabend-queryような構成形式であっても、その構成オプションはほぼコードのフラット ツリー マップとみなすことができ、基本的にはコード内の「構成ドメイン」+「構成項目」のロジックに準拠します。

  • 環境変数および設定ファイルで、serfigコードをネストおよび展開するために使用し、_区切り文字として使用します。
  • コマンド ラインには若干の違いがあります。一方では区切り文字が使用されますが-、他方では、一部のコマンド ライン オプションの名前にはバインドされた構成フィールドがありません。

ここでのマッピング関係をよりよく理解するために、特定の構成を詳しく調べることができます。以下では、admin_api_addressこの構成項目に焦点を当てます。

  • 環境変数の場合、この構成が配置されているドメインを表すQUERY_ADMIN_API_ADDRESSために使用する必要がありますが、特定の構成項目を表す必要があります。QUERYADMIN_API_ADDRESS
  • 設定ファイルでは、通常は toml を使用して設定します。[query]構成が配置されているドメインを示し、admin_api_address特定の構成アイテムです。
[query]
...
# Databend Query http address.
# For admin RESET API.
admin_api_address = "0.0.0.0:8081"
...
  • 構成にはコマンドラインで使用する必要があります--admin-api-address。この項目は「構成ドメイン」にバインドされません。configuration の場合--storage-s3-access-key-id、「storage」+「s3」が構成ドメインを構成し、「access-key-id」が特定の構成項目になります。

設定方法を理解したらadmin_api_address、設定関連のコードを入力して、マッピング関係のコード形式をさらに表示します ( にありますsrc/query/config/src/config.rs)。

pub struct Config {
    ...

    // Query engine config.
    #[clap(flatten)]
    pub query: QueryConfig,
    
    ...
}

/// Query config group.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Args)]
#[serde(default, deny_unknown_fields)]
pub struct QueryConfig {
    ...
    
    #[clap(long, default_value = "127.0.0.1:8080")]
    pub admin_api_address: String,
    
    ...
}

このコードはネストされた階層構造を使用しているため、最上位は ですConfigが、の構成項目です。処理後admin_api_addressまたはを使用してコードが配置されているドメインを表す必要があり、構成項目は のままになりますpub query: QueryConfigserfigQUERY[query]admin_api_address

コマンドラインの特定の構成項目名とデフォルト値が制御され#[clap(long = "<long-name>", default_value = "<value>")]clap構成が引き継がれます。

  • admin_api_addressとなった--admin-api-address
  • --storage-s3-access-key-id一般的に、実際のコードレベルはConfig-> StorageConfig-> S3StorageConfig->でありaccess_key_id、フィールドにアノテーションがあるため、設定に#[clap(long = "storage-s3-access-key-id", default_value_t)]使用する必要があります。--storage-s3-access-key-id

Databend Meta でのマッピング

databend-metaの構成ファイルとコマンド ライン ロジックは、databend-query基本的に の構成ファイルと同じです。ただし、環境変数はserfig組み込みのserde-env自己定義のマッピング関係です (ただし、「構成ドメイン」+「構成項目」によって理解することもできます)。

具体的な構成についても見てみましょう。ここではlog_dir例。

  • 環境変数の場合、この構成が配置されているドメインを表すMETASRV_LOG_DIRために使用する必要がありますが、特定の構成項目を表す必要があります。METASRVLOG_DIR
  • 構成ファイルでは、この構成項目はグローバルに機能し、以下のみが必要です。
log_dir                 = "./.databend/logs1"
  • もちろん、コマンドラインで直接--log-dir設定することもできます。

にあるコードを使用してそのマッピングを分解してみましょうsrc/meta/service/src/configs/outer_v0.rs

#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Parser)]
#[clap(about, version = &**METASRV_COMMIT_VERSION, author)]
#[serde(default)]
pub struct Config {
    ...
    /// Log file dir
    #[clap(long = "log-dir", default_value = "./.databend/logs")]
    pub log_dir: String,
    ...
}

設定ファイルやコマンドラインパラメータに関する設定項目はConfig構造体で管理されており、ロジックはdatabend-queryと一貫しているため、ここでは詳細は説明しません。

環境変数の設定項目はConfigViaEnv以下のような構造で処理されます。

/// #[serde(flatten)] doesn't work correctly for env.
/// We should work around it by flatten them manually.
/// We are seeking for better solutions.
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(default)]
pub struct ConfigViaEnv {
    ...
    pub metasrv_log_dir: String,
    ...
}

Configと の間のマッピング関係は、impl From<Config> for ConfigViaEnvと の2 つの部分にありますimpl Into<Config> for ConfigViaEnvの場合metasrv_log_dir、前のフィールドにマッピングされますlog_dir

200元の罰金と100万元以上を没収 ヨウ・ユシ:高品質の中国語文書の重要性 マスク氏のコアなサーバー移行 TCP輻輳制御がインターネットを救った Apache OpenOfficeは事実上の「保守されていない」プロジェクト Googleが創立25周年を祝う Microsoftオープンソースの Windows-drivers-rs、Rust を使用して Windows ドライバを開発 Raspberry Pi 5 は 10 月末にリリースされ、価格は 60 ドルから macOS コンテナ: Docker を使用して macOS 上で macOS イメージを実行 IntelliJ IDEA 2023.3 EAP がリリース
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/5489811/blog/10114765