Databend 源码阅读:配置管理
作者:尚卓燃(PsiACE)澳门科技大学在读硕士,Databend 研发工程师实习生
Apache OpenDAL(Incubating) Committer
对于 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
处理后,需要使用 QUERY
或者 [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
,METASRV
表征这个配置所处的域,而LOG_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
和 impl Into<Config> for ConfigViaEnv
这两个部分。对于 metasrv_log_dir
而言,就是映射到前面的 log_dir
字段。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【AIGC】只要10秒,AI生成IP海报,解放双手!!! | 京东云技术团队
看完这篇文章,你将学会以下价值连城的内容 1、云端部署(配置不行的小伙伴看)+ 云端模型放置位置 2、本地部署(配置达标的小伙伴看) 3、运用SD训练IP的流程和技巧(LoRA篇) 4、运用SD稳定生成高质量IP海报 众所周知,各大厂目前都在AIGC的领域探索实践,也有非常多的外部设计师制作了大量的AIGC相关授课,很多同学因为不清楚具体能得到什么价值或者收获而停止了脚步。今天我来为大家分享一下经过实际探索且落地的Stable diffusion的IP海报生成流程,内容很干请上车坐稳 📌 先来看一下达达骑士IP的效果: · 浅看一下IP海报生成过程 · V1模型生成 · V2模型生成 •V3模型生成 1、云端部署 应该有很多小伙伴苦于没有一个趁手的电脑配置,以及繁琐的本地配置,最终卡在了配置这个环节,今天我将带大家完成SD的云端部署,看完你就能完美的打开SD了 1、打开云端地址:https://www.autodl.com/home 1、注册登陆后,点击算力市场 2、选择按量计费、内蒙A区(注:不要选北京区可能需要SHH企业打开的问题) 3、...
- 下一篇
GaussDB数据库SQL系列-自定义函数
目录 一、前言 二、自定义函数(Function)概述 三、使用场景 四、优缺点 1、数据库中Function的使用优点 2、数据库中Function的使用缺点 五、GaussDB中的Function示例与解析 1、示例一:定义函数为SQL查询 2、示例二:返回一个包含多个输出参数的记录 3、示例三:返回RECORD类型结果集 六、小结 一、前言 华为云GaussDB数据库是一款高性能、高安全性的云原生数据库,在GaussDB中,自定义函数是一个不容忽视的重要功能。本文将简单介绍一下自定义函数在GaussDB中的使用场景、使用优缺点、示例及示例解析等,为读者提供指导与帮助。 二、自定义函数(Function)概述 在SQL中,自定义函数(Function)是一种用于执行特定任务并返回结果的可重复使用代码块。Function可以接受参数,并且可以返回指定的结果等。 在GaussDB中,Function是数据库管理和开发人员的重要“工具”。通过Function,可以封装复杂的逻辑,以简化数据处理流程并提高工作效率。 三、使用场景 数据库中Function的使用场景包含但不限于以下,例如: ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度