作者:李亚舟

Databend Cloud 负责人

github.com/flaneur2020

Databend 是一个开源的、彻底面向云架构的新式数仓,它将廉价的云存储作为首要存储,并供给方便高效的剖析功能,已协助许多客户完结了数仓、行为日志等场景的降本增效并广受好评。

当然,Databend 也供给了云服务!Databend Cloud 能够协助您托管 Databend 实例,并供给 Serverless 的布置形式,按核算时长而非固定的硬件资源进行计费。Serverless 布置不只能够下降本钱,还能够进步体系的弹性和可靠性。经过运用 Databend Cloud,您能够轻松构建低本钱、高功能的数据仓库,并专心于剖析而非根底架构的保护。

Databend Cloud 与 Databend 项目几乎在同一时刻启动开发,在建造 Databend Cloud 期间,会一起发生一些对可扩展性、高可用性等根底设施需求,也正与 Databend 以云为中心的定位相契合。两者继续的打磨,使得 Databend Cloud 更加易用的一起,也使得 Databend 社区版更易于布置、办理和拜访。

怎么更高效、更安全、更低本钱地利用云上资源,逐步成为职业的一项共同重视。本文将介绍 Databend Cloud 架构的规划与取舍,以及各个组件的作业机制。期望本文能够协助您更好地发挥云的优势,使云上数仓更廉价、更高效、更安全且更易用。

规划思路

如下规划思路贯穿 Databend Cloud 开发进程的始终:

  • 按需付费,并最小化用户在核算、存储与流量等资源方面的开支
  • Serverless 架构,根据 Kubernetes 和 IaC 主动化全部,总是最新版
  • 默许安全,按 SOC2 规范规划零信任架构,租户之间强阻隔,默许加密
  • 融入数据生态,并为大数据生态参加更多云原生与 Rust 要素

上述规划思路互为彼此:为了最小化用户的资源开支,咱们会经过 Serverless 架构,及时地开释未运用的资源不再发生任何费用;凭借 Kubernetes 和 IaC,咱们完结了规范化的根底设施,使规范化的安全机制内建于不同的云厂商与区域;此外,外部数据体系能够快捷地与 Databend Cloud 互通,而无需关怀根底设施的细节。

接下来,咱们会详细介绍 Databend Cloud 的整体架构与各组件的作业机制。

架构概览

下图为 Databend Cloud 在一个区域中的架构概览:

Databend Cloud 平台的 Serverless 架构实践

大体而言,Databend Cloud 在架构上,采用了操控面与数据面别离的多租户存储层 + Serverless 核算层的规划:

  • 将目标存储作为首要存储,并按租户进行存储阻隔
  • 根据 Kubernetes 办理核算资源,将 Operator 作为操控面的中心,每个区域露出一个内网的 Manage Grpc 服务用于跨云办理
  • 经过多租户的元数据中心来存储表结构、身份认证等元信息
  • 经过自研的 Query Gateway 作为数据面的进口
  • 共同的跨区 Cloud Console 作为办理界面的进口,用于办理账号与安排信息、收集用量信息等

目标存储作为首要存储

Databend 将目标存储作为首要的存储,因而第一天起就是存储与核算彻底别离的架构。这一点大大简化了 Cloud 产品的开发难度:只需求办理、调度无状况的核算节点即可,不需求完结复杂的节点状况迁移、主从切换等机制。

不过目标存储在带来本钱优势的一起,也为咱们的查询引擎带来了新的应战:

  1. 目标存储的拜访时刻延不稳定
  2. 云厂商或许会在目标存储的拜访上施加限额

因而咱们在流水线调度上针对目标存储的性质做了许多优化:

  1. 大规模地并行扫描目标文件,使 IO 带宽跑满
  2. 动态的流水线调度结构,动态适应不同延时的恳求
  3. 针对云存储的限额等报错,动态地退避重试,确保查询成功
  4. 增加本地 SSD Cache 以加速热数据拜访

根据 Kubernetes 办理核算资源

咱们将核算层放置于云厂商的 Kubernetes 中进行办理。经过 Kubernetes,咱们能够抹平不同云厂商之间的差异,运用同一套 API 来和谐核算资源的伸缩。Kubernetes 社区中通行的 Operator 开发形式,答应咱们灵敏地扩展操控逻辑。除了核算资源的调度,还有用量核算、主动伸缩等操作,也均由 Operator 来和谐完结。

Operator 正是操控面的中心。它首要定义了 Tenant 和 Warehouse 两种 CRD,分别办理租户和 Warehouse 的生命周期。在 Databend Cloud 上创立的 Warehouse,均会对应一个 Warehouse CRD,随后 Operator 会为 Warehouse 创立一个 StatefulSet 以启动 Databend 集群。

Databend Query 自身是无状况的,那么为什么挑选 StatefulSet 而非 Deployment?首先 StatefulSet 中的 Pod 能够拥有一个固定编号,咱们会挑选 0 号 Pod 作为和谐者,使恳求固定地拜访同一个和谐者进行 Plan 与和谐执行;其次,咱们也为 Databend 集群绑定了了一个 SSD Cache,用于加速拜访。

此外,为了进步整体的资源利用率,咱们运用了 Karpenter 作为 Scaler,它能够在集群的物理资源不足时,动态向云厂商请求更多物理资源并主动参加集群,并在用量较低时主动开释物理资源,这使得 Kubernetes 集群构成了一个弹性的资源池,能够动态适应咱们对物理资源需求的变化。

多租户的元信息中心

Databend 会尽或许多地缓存从 Metasrv 中得到的元信息,因而对 Metasrv 的拜访压力往往并不高。因而咱们挑选将 Metasrv 布置为多租户的同享集群,经过 Key 前缀来区分不同租户的元数据。

Databend Cloud 平台的 Serverless 架构实践

在 Databend Cloud 中,Metasrv 不只用于保存表结构、用户认证信息等元数据,也为 Databend Cloud 中的表写入供给了事务性支撑。目标存储往往没有供给强共同性的写入语义,咱们经过根据 Raft 的 metasrv 集群补齐了这一短板:在 Databend 中表的每次写入操作均会生成新的 Snapshot 文件,在 Metasrv 中写入成功对应表的 Snapshot Key,才标志着这次写入是成功的,Metasrv 正是 Databend 完结 ACID 的根底。

Metasrv 作为 Databend Cloud 根底设施中仅有的有状况组件,其可靠性至关重要,咱们为它设置了主动的备份机制,并继续地对它进行可靠性演练。从 Metasrv 中孵化的 openraft 结构是 Metasrv 确保正确性的坚实根底,它现在已是 rust 生态圈中最受好评的 Raft 结构,现在已为微软、火币等企业运用于生产。

数据面

数据面代表 Databend Cloud 中从数据导入、执行核算到展示的路径,它会按公网的 Query Gateway 作为拜访进口,将来自外部的 HTTPS 恳求转发给 Kubernetes 中的 Databend 实例执行核算,并最终将结果返还给运用方。

咱们的 Query 协议挑选了根据 HTTP 协议作为通信传输层。在云原生环境中,包含 Query Gateway 在内的全部组件都随时或许重启,原因或许是版本发布,也或许是机器保护。这时相比于四层的 MySQL、Postgres 等协议,无状况的 HTTP 协议会有很大的优势:不需求对衔接进行保活,只需运用程序满意 Kubernetes 对退出信号的做到正确的平滑退出,就能够在版本发布与机器保护期间不中止任何用户的恳求。

Databend Cloud 平台的 Serverless 架构实践

不过咱们在将自有的 Query 协议与大数据生态集成时遇到了一些困难:咱们需求完结不同言语的 SDK、也需求针对诸多不同的体系做1对1的对接,这关于一个新产品而言是一项不小的作业量。现在咱们已供给了 Go、Java、Python、Rust 四种言语的 SDK,也供给了 Metabase、Grafana、Quick BI、Deepnote、Airbyte、Kafka、DataX、Flink CDC 等数据体系的对接。咱们也开始测验完结根据 Flight SQL 的协议,凭借 Arrow 社区的 SQL 协议规范,使 Databend Cloud 更易于与其他体系集成,与更大的生态相交融。

主动休眠与主动唤醒

为了减少核算资源的开支,咱们会定期收集活泼的 Warehouse 的目标,如果超越 Suspend 时刻,则使 Warehouse 进入休眠状况,然后开释核算资源,不再发生费用。咱们默许为 Warehouse 设置 5 分钟的主动休眠时长,你能够根据自己的需求,将休眠时长缩短到最低 1 分钟。

Databend Cloud 平台的 Serverless 架构实践

Operator 中的 SuspendController 会继续地检查活泼的 Warehouse 的 Pod,经过 /v1/status 接口获取 Databend 实例的运转状况,若一个 Warehouse 的一切 Pod 均没有活泼查询、且前次活泼的时刻超越 Suspend 时长,则删去该 Warehouse 的 StatefulSet 开释核算资源。

当恳求抵达 Query Gateway 时,如果对应的 Warehouse 未启动,它会告诉 Operator 测验唤醒该 Warehouse,在 StatefulSet 安排妥当后再继续发送 Query,获益于 Databend 实例快速的启动速度(1s 左右),一般只需几秒等候即可执行查询。经过这一主动唤醒机制,用户不再需求关怀 Warehouse 的状况,每个 Warehouse 都是一个 Serverless 服务。

在这儿咱们并没有挑选 knative 等 Serverless 结构,由于咱们期望将该操控流程做到足够简单,经过更少的依靠与 CRD 定义完结作业,然后下降保护本钱,并能够更灵敏地调整 Serverless 战略。

多云与多区域支撑

前面说到 Databend Cloud 的架构首要分为数据面和操控面两条链路,在多云与多区域布置上,Cloud Console 能够将每个区域视为露出操控面进口的黑盒:

Databend Cloud 平台的 Serverless 架构实践

Databend Cloud 中支撑的一切的区域均经过 Pulumi 进行 IaC 办理。经过 IaC 来办理一切的云上根底资源,使得咱们在不同区域的根底设施环境彻底规范、共同,答应咱们构造与生产共同的测验环境,也答应咱们快速地敞开新区。

每增加一个区域,Cloud Console 均经过内网的 Manage Grpc 进行衔接。当新用户注册时,会经过 SetupTenant 调用来初始化租户,这时它会为当前租户初始化一个 IAM Role,并绑定目标存储的 Prefix 拜访权限。关于不同的云厂商,SetupTenant 的行为会有所不同,咱们在这儿为不同云厂商适配了不同的初始化逻辑。

除了操控面流量,额外的一条通信来自用量信息的同步。每个区域内的 Operator 会在收集到 Warehouse 的用量、存储用量的信息后,异步地将用量信息推送给 Cloud Console。Cloud Console 会将用量信息收集集中存储于自己的数据库中,经聚合后生成用量核算数据,并在每月生成账单。

数据安全

数据安满是 Cloud Warehouse 平台的重中之重,在建造 Databend Cloud 期间,咱们期望运用 State of Art 的安全实践,最大限度地确保用户的数据安全。

咱们期望租户间有严厉的数据拜访阻隔性,一起,咱们也期望尽或许少地运用长生命周期的 AccessKey/SecretKey 来拜访云上资源,由于长生命周期的 Key 一旦走漏,就会发生极大的安全隐患。幸运的是,云厂商大多供给了根据 Kubernetes 的 Bound Service Account Token 的身份认证机制,很好地协助咱们处理了这一问题。它能够为服务供给一个主动轮换的 Token(比方半小时主动失效),并经过云厂商的 STS 服务与 IAM Role 建立身份相关,继而经过 IAM 规矩约束该服务的拜访权限,完结精密的拜访操控。

Databend Cloud 平台的 Serverless 架构实践

Databend Cloud 平台会在 SetupTenant 时为租户赋予单独的 IAM Role,并经过 IAM 规矩约束每位租户只能拜访特定前缀下的文件。由于没有长生命周期的 Key 存在,拜访 S3 等云上资源时也变得更加安全可信。

在 Databend Cloud 上存储的一切数据均默许敞开加密。除此之外,你也能够在 Databend Cloud 上经过 Assume Role 的机制,挂载自己 AWS 账号中的 S3 Bucket 答应 Databend Cloud 进行剖析。

RBAC

在 Databend 中,能够为每位用户绑定多个角色,角色之间能够有依靠联络,不过同一时刻中只要一个活泼的 Role。Databend Cloud 中现在内置了 AccountAdmin 和 Public 两种特别的 Role,分别作为办理员和普通用户运用,它们的特别之处在于,AccountAdmin 是一切 Role 的父 Role,而 Public Role 归于一切 Role 的子 Role,其层级联络大约如下:

Databend Cloud 平台的 Serverless 架构实践

经过为不同责任的用户分配不同的角色和权限,能够确保只要获得授权的人员才能拜访敏感数据。RBAC 机制正是数据安全的一项重要确保。

更多服务

除了使 Databend 作为根底设施更加易用与安全,咱们也期望经过云服务供给更多的或许性。Cloud Data Warehouse 中的高级功能往往由更多的微服务组成,微服务架构答应咱们继续迭代地增强 Data Cloud 服务才能,这也正是云数仓与传统数仓的最大不同。咱们会继续地在 Databend Cloud 中开发更多的微服务,为 Data Cloud 架构添砖加瓦。比方:

  • 主动数据导入流水线(Pipe):答应主动从目标存储同步数据到 Databend Cloud 的表中,能够主动发现新的文件并建议导入,也能经过 API 告诉接口更实时地告诉新文件,现在暂只支撑 AWS,正在开发与其他云厂商的对接;
  • 主动冷热别离:答应将目标存储中的数据主动降级到更廉价的 Tier 上,进一步下降存储本钱。
  • 主动 Compact 与主动优化:根据运用的元信息,主动地建议优化,免费进步你的查询功能;
  • Data Masking:答应设定规矩,针对特定 Role 去屏蔽特定的行与列,确保你的数据隐私;
  • Data Market:经过 Sharing 机制,主动地订阅其他租户同享的数据,构成数据集市;

总结

到这儿您已对 Databend Cloud 的规划与架构有所了解,欢迎拜访 app.databend.cn 请求注册体验!Databend Cloud 致力于供给廉价、高效、易用且安全的 Cloud Data Warehouse 处理方案。如果您有大量数据,期望能用更低的本钱满意自己的剖析诉求,欢迎参加社区与咱们联络!

关于Databend

Databend 是一款开源、弹性、低本钱,根据目标存储也能够做实时剖析的新式数仓。期待您的重视,一起探究云原生数仓处理方案,打造新一代开源 Data Cloud。

‍‍ Databend Cloud:databend.cn

Databend 文档:databend.rs/

Wechat:Databend

✨ GitHub:github.com/datafuselab…