《刘用涛-rustconf-0615.pdf》由会员分享,可在线阅读,更多相关《刘用涛-rustconf-0615.pdf(26页珍藏版)》请在三个皮匠报告上搜索。
1、第三届中国第三届中国Rust开发者大会开发者大会CnosDBCnosDB时序数据库的时序数据库的RustRust实践实践Yongtao Liu CnosDB 研发工程师Rust China Conf 2023 CnosDB 是一款基于 Rust 开发的开源的分布式时序数据库1.1.CnosDBCnosDB 架构与选型架构与选型2.2.为何从为何从 GoGo 切换到切换到 RustRust3.3.使用使用 RustRust 经验分享经验分享4.4.反哺社区反哺社区 1.CnosDB 1.CnosDB 架构与选型架构与选型特性特性 横/纵 向扩展 计算存储分离 平衡存储性能与成本 查询引擎支持矢量
2、化查询 兼容多种时序协议 可观测性 支持云原生 原生支持多租户 租户Quota可动态配置 云边端协同 云上生态融合整体架构整体架构1.2 1.2 存储引擎存储引擎version_setVnodeIndexEngineDataEnginecacheimcache VnodeVnodesummary process taskForward IndexInverted Indextsfile delta tombWALmetrics.Write Request1.3 1.3 基于基于 DataDataFuFusionsion 的高性能查询引擎的高性能查询引擎 9SQLResultDataFusion
3、 ParserDataFusion SqlToRelDataFusion Logical OptimizerDataFusion Physical PlannerDataFusion Logical OptimizerDataFusion SchedulerDataFusion ExecutionInjectable parser rulesInjectable transform rules&Customizable logical nodeInjectable logical opt rulesInjectable transform rules&Customizable physical
4、 rulesInjectable physical opt rulesParseRBOCBOScheduleExecuteQuery State Machine Pluggable Query DispatcherPluggable Query ExecutionPluggable Cascade OptimizerPluggable SchedulerLogical transformPhysical transform1.41.4基于基于DataDataFuFusionsion的高性能查询引擎的高性能查询引擎 扩展数据源 扩展 SQL 语句 扩展流处理引擎 扩展优化规则 扩展时序函数 1.
5、5 1.5 分布式分布式1.Shared nothing2.Leaderless NRW Peer to peer model3.Leader repica group(Coming soon)1.5 1.5 分布式分布式MetaMetaDN1MetaMeta ClusterDN2DN3DN4vnodevnodevnodevnodevnodevnodevnodevnodevnode.Time LineTime LineMeta集群:schema,tenant信息,分片信息数据节点:存储 vnode数据Raftwritepointreplica set.bucketbucketreplica s
6、et 2.2.为何从为何从 Go Go 切换到切换到 Rust Rust高性能:无高性能:无 GCGC 实时控制实时控制安全:内存安全安全:内存安全 线程安全线程安全表达能力强:支持范型,表达能力强:支持范型,matchmatch 表达式表达式 3.3.Rust Rust 使用经验分享使用经验分享3.1 3.1 内存内存布局布局offsetIntegerFloatComplex0Discriminator(0)Discriminator(1)Discriminator(2)8i64f64f6416f64Rust 中的枚举与 C 语言中的联合体类似,如左图所示的枚举代码,实际大小为16字节加8个
7、字节的鉴别器,总共24字节。3.2 3.2 流式处理流式处理3.2 3.2 流式处理流式处理3.3 Rust3.3 Rust 的锁的锁2.异步死锁检测 https:/ 1.sync rwlock parking_lot async rwlock tokio 1.找出目标系统的三元组 arch-vendor-sys-abi2.Rust编译工具链 rustup target add$target,-target=$rustc_target3.配置链接器-C linker=$gcc_prefix-gcc 指示rustc采用的C链接器程序cross 提供了“零设置”的交叉编译 rust crate 它
8、提供了一个环境、交叉工具链和交叉编译库,可以生成最便携的二进制文件3.4 Rust3.4 Rust 交叉编译交叉编译1.IO 1.IO 异步化异步化 平台兼容性 隔离阻塞 IO 异步化 2.2.io_uringio_uring 性能有40%提高3.5 3.5 异步异步 IOIO 4.4.反哺社区反哺社区4.1 4.1 DataFusionDataFusion在开发过程中,我们发现一些 DataFusion 的 bug,我们也多次为 DataFusion 提出 issue 和提交 pr。DataFusion:https:/ Rust 分享课程,为萌新提供一个学习 Rust 的渠道,同时也分享我们在开发中学习到的内容。4.2 Rust4.2 Rust 分享分享我们的B站账户名称:CnosDB谢谢关注直播间地址:https:/ Cnos4.3 CnosDBDBhttps:/使用手册:https:/源代码:https:/ you!