Hacker News 中文摘要

RSS订阅

从零构建PlanetScale:基础设施篇 -- Let's Build PlanetScale from Scratch: Infrastructure

文章摘要

作者回顾了早年构建数据库克隆工具的经历,受此启发开始开发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卷、创建不可变快照、从快照克隆出新的可写卷并启动数据库进程。

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 对项目与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. 对项目技术细节的认可与建议(评论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)
  3. 其他评论(评论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、快照管理),并建议参考现有方案。整体上,项目被评价为“简化版”而非完整替代品。