最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Databend 源碼閱讀:配置管理

2023-09-28 11:31 作者:Databend  | 我要投稿

作者:尚卓燃(PsiACE)澳門科技大學(xué)在讀碩士,Databend 研發(fā)工程師實習(xí)生

Apache OpenDAL(Incubating) Committer

https://github.com/PsiACE

對于 Databend 這樣復(fù)雜的數(shù)據(jù)庫服務(wù)端程序,往往需要支持大量的可配置選項,以幫助運維人員根據(jù)實際使用需要管理和調(diào)優(yōu)系統(tǒng)。

Databend 目前支持三種配置方式:命令行、環(huán)境變量和配置文件,優(yōu)先級依次遞減。

  • 一般情況下,推薦使用配置文件來記錄和管理各種配置。

  • 對于 K8S 集群,為了靈活變更部分配置(比如,特性開關(guān)),使用環(huán)境變量可能是更優(yōu)雅的形式。

  • 命令行則用于調(diào)整本地環(huán)境下的少數(shù)沖突配置。

Databend Query 中的映射

對于 "databend-query" ,不管是什么形式的配置,其配置選項幾乎可以看作是代碼的扁平化樹形映射,即基本符合代碼中「配置域」+「配置項」的邏輯。

  • 環(huán)境變量和配置文件中,利用 "serfig" 將代碼嵌套展開,使用 " _?" 做為分隔符。

  • 命令行中稍有不同:一方面,分隔符使用 "-";另一方面,部分命令行選項的名稱中沒有綁定配置域。

為了更好理解這里的映射關(guān)系,我們可以深入到具體一項配置,下面將圍繞 "admin_api_address" 這個配置項展開。

  • 在環(huán)境變量上,需要使用 "QUERY_ADMIN_API_ADDRESS" ,"QUERY" 表征這個配置所處的域,而 "ADMIN_API_ADDRESS" 是具體的配置項。

  • 在配置文件中,通常是使用 toml 來進(jìn)行配置。 "[query]" 表征配置所處的域,"admin_api_address" 為具體的配置項。

  • 命令行中需要使用 "--admin-api-address" 進(jìn)行配置,這一項沒有綁定「配置域」。如果是配置 "--storage-s3-access-key-id" ,那么「storage」+ 「s3」構(gòu)成配置域,「access-key-id」是具體的配置項。

在了解如何對 "admin_api_address" 進(jìn)行配置后,讓我們進(jìn)入到配置相關(guān)的代碼,進(jìn)一步查看映射關(guān)系的代碼形式(位于 "src/query/config/src/config.rs")。

因為代碼中使用了嵌套的層級結(jié)構(gòu),最上層是 "Config",而 "admin_api_address" 是 "pub query: QueryConfig" 中的一個配置項,經(jīng)過 "serfig" 處理后,需要使用 "QUERY" 或者 "[query]" 表征其所處的域,配置項就還是 "admin_api_address" 。

而命令行中具體的配置項名稱和默認(rèn)值會受到 "#[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",字段之上有標(biāo)注 "#[clap(long = "storage-s3-access-key-id", default_value_t)]" ,所以需要使用 "--storage-s3-access-key-id" 進(jìn)行配置。

Databend Meta 中的映射

"databend-meta" 的配置文件和命令行邏輯與 "databend-query" 是基本一致的。但是環(huán)境變量是通過 "serfig" 內(nèi)置的 "serde-env" 自行定義的映射關(guān)系(但同樣可以嘗試按「配置域」+「配置項」進(jìn)行理解)。

同樣具體到單獨的某項配置來看一下,這里以 "log_dir" 為例。

  • 在環(huán)境變量上,需要使用 "METASRV_LOG_DIR" ,"METASRV" 表征這個配置所處的域,而 "LOG_DIR" 是具體的配置項。

  • 而在配置文件中,這一配置項作用于全局,只需要:

  • 在命令行中當(dāng)然也直接 "--log-dir" 進(jìn)行配置。

讓我們通過代碼來解構(gòu)其映射,代碼位于 "src/meta/service/src/configs/outer_v0.rs"。

配置文件和命令行參數(shù)相關(guān)的配置項是由?"Config" 結(jié)構(gòu)體管理的,邏輯與 "databend-query" 一致,就不再贅述。

而環(huán)境變量的配置項是由 "ConfigViaEnv" 結(jié)構(gòu)體進(jìn)行處理的,如下:

與 "Config" 之間的映射關(guān)系位于 "impl From<Config> for ConfigViaEnv?" 和?"impl Into<Config> for ConfigViaEnv" 這兩個部分。對于 "metasrv_log_dir" 而言,就是映射到前面的 "log_dir" 字段。


Databend 源碼閱讀:配置管理的評論 (共 條)

分享到微博請遵守國家法律
八宿县| 巴林右旗| 桐梓县| 海南省| 泸州市| 集安市| 马龙县| 五原县| 澜沧| 沅陵县| 忻城县| 隆安县| 昆明市| 沾益县| 青河县| 察隅县| 禹州市| 彩票| 霍城县| 西安市| 东至县| 滕州市| 墨玉县| 铜山县| 竹北市| 吴桥县| 弥渡县| 高州市| 普格县| 荆门市| 长治县| 星子县| 安仁县| 赫章县| 陕西省| 扎兰屯市| 普安县| 墨玉县| 兴隆县| 修武县| 阿拉尔市|