博客
Databend 源码阅读:配置管理
PsiACE9月 28, 2023
对于 Databend 这样复杂的数据库服务端程序,往往需要支持大量的可配置选项,以帮助运维人员根据实际使用需要管理和调优系统。
Databend 目前支持三种配置方式:命令行、环境变量和配 置文件,优先级依次递减。
- 一般情况下,推荐使用配置文件来记录和管理各种配置。
- 对于 K8S 集群,为了灵活变更部分配置(比如,特性开关),使用环境变量可能是更优雅的形式。
- 命令行则用于调整本地环境下的少数冲突配置。
Databend Query 中的映射
对于
databend-query
- 环境变量和配置文件中,利用 将代码嵌套展开,使用
serfig
做为分隔符。_
- 命令行中稍有不同:一方面,分隔符使用 ;另一方面,部分命令行选项的名称中没有绑定配置域。
-
为了更好理解这里的映射关系,我们可以深入到具体一项配置,下面将围绕
admin_api_address
- 在环境变量上,需要使用 ,
QUERY_ADMIN_API_ADDRESS
表征这个配置所处的域,而QUERY
是具体的配置项。ADMIN_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
,那么「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: QueryConfig
serfig