文章摘要
作者回顾了早年构建数据库克隆工具的经历,受此启发开始开发Homescale项目。该项目借鉴Docker的镜像与容器模型,通过不可变快照创建可写数据库实例和时间点分支,无需复制完整数据库。
文章总结
好的,这是根据您的要求,对原文主要内容进行的中文重述,已保留关键细节并删减了与主题无关的内容。
标题:从零开始构建PlanetScale:基础设施篇
本文介绍了作者正在构建的一个名为“Homescale”的开源项目,其目标是实现一个类似PlanetScale的、可在本地运行的数据库分支与克隆工具。
核心概念:镜像与容器
Homescale借鉴了Docker的“镜像”和“容器”模型来管理数据库状态: * 数据库镜像:一个不可变的起始点。 * 数据库容器:从镜像创建的可写克隆。 * 分支:从现有容器的当前状态创建的另一个容器。
其核心思想是,创建分支时不应复制整个数据库(例如100GB),而是通过存储层的写时复制(COW)技术,让新分支与父容器共享未修改的数据,仅对修改部分分配额外存储空间。这使得分支操作在存储层面完成,对数据库引擎本身透明。
技术实现:存储与计算分离
Homescale通过将数据库的存储层与计算层分离来实现上述模型。数据库进程读写一个看似普通块设备的文件系统,而该块设备的生命周期独立于使用它的进程。这允许Homescale在存储层创建快照和克隆,而无需数据库引擎自身实现分支功能。
核心技术:写时复制(COW)与Ceph
COW是实现可写克隆的关键。Homescale使用Ceph的RADOS块设备(RBD)来提供持久化块设备、不可变快照和可写COW克隆。具体流程如下: 1. Ceph可以对RBD卷创建只读快照。 2. 然后,可以从这个快照创建一个可写的克隆卷。 3. 新克隆卷最初与父卷共享所有数据,仅在写入新数据时,Ceph才会在后台复制相关的数据对象。
编排平台:Kubernetes
Homescale不直接管理数据库进程或存储操作,而是通过Kubernetes资源(如PVC和VolumeSnapshot)来描述期望状态,并由Kubernetes控制器(如Ceph CSI和Rook)来实际执行。这使得Homescale可以: * 利用Kubernetes的控制器来确保数据库Pod和存储卷的期望状态。 * 通过Ceph CSI驱动将存储资源请求(创建卷、快照、克隆)转化为底层的RBD操作。 * 通过Rook来管理和操作Ceph集群本身。
部署方案
Homescale计划支持两种部署模式:
1. 本地部署:在macOS上的单节点Kubernetes集群中运行,使用单个Ceph OSD。
2. 云端部署:部署在作者于Hetzner Cloud上搭建的私有Talos Kubernetes集群中,利用多节点和复制池(如size: 3)实现高可用。
下一步计划
文章预告了下一部分将详细介绍Homescale的服务层,包括API、控制器以及Postgres适配器。重点将放在实现“镜像”和“容器”的创建流程上,即如何初始化Postgres卷、创建不可变快照、从快照克隆出新的可写卷并启动数据库进程。
评论总结
根据评论内容,总结如下:
主要观点与论据:
对项目与PlanetScale比较的质疑(评论3、5)
- 评论3指出项目未提及分片和网关/反向代理,与PlanetScale的核心目标(简化数据库扩展)不符,更像普通托管数据库(如RDS)。
- 评论5认为仅实现单节点功能,未解决托管数据库的规模化和数据安全挑战,称“构建1/100的PlanetScale”。
- 关键引用:
- “There's no mention of sharding whatsoever... Without that this has very little to do with Planetscale” (评论3)
- “You did the easy part... Otherwise this isn't 'building PlanetScale' - it's building 1/100th of it” (评论5)
对项目技术细节的认可与建议(评论2、6、7)
- 评论2表示对PITR(时间点恢复)感兴趣,愿意测试并贡献。
- 评论6询问快照清理策略,关注分支深度问题。
- 评论7提到类似项目(如Xata、Neon),并指出计算与存储分离的性能局限。
- 关键引用:
- “I've been playing exploring PITR stuff recently... Will give it a go and try to contribute” (评论2)
- “How do you plan to clean up snapshots once branches get a few generations deep?” (评论6)
其他评论(评论1、4)
- 评论1调侃转发给PlanetScale的朋友。
- 评论4对F1团队采访感兴趣,但未直接评价项目。
- 关键引用:
- “Lolz, just forward to my friend who works at Planetscale” (评论1)
- “OP's interview with the F1 team sounds super cool” (评论4)
平衡性总结:
评论对项目存在分歧:部分认为其与PlanetScale的对比不准确,缺乏关键功能(分片、零停机);另一部分认可技术细节(PITR、快照管理),并建议参考现有方案。整体上,项目被评价为“简化版”而非完整替代品。