大家好,我是贝克街的捉虫师呀!
咱们开发者日常打交道最多的基础设施之一,肯定离不开数据库。特别是关系型数据库,PostgreSQL更是其中的佼佼者,功能强大又灵活。但大家有没有遇到这样的场景:为了开发或测试,需要快速搭建一个数据库环境,或者在处理数据时,想对某个时间点的数据状态进行“快照”或“分支”,就像使用Git一样方便?又或者,在考虑数据库的可伸缩性和成本时,总是觉得传统架构不够灵活,尤其是面对波峰波谷的访问量?
在寻找更现代化、更灵活的PostgreSQL解决方案时,我偶然发现了今天想要分享的这个宝藏项目——Neon。它正在试图革新我们使用PostgreSQL的方式,让数据库也能拥有云原生的灵活性和弹性。
项目概述:解耦计算与存储,Postgres的新玩法
Neon是一个开源的、无服务器(Serverless)的PostgreSQL替代方案。它的核心理念是将数据库的计算(Compute)与存储(Storage)完全解耦。传统的PostgreSQL,数据是紧密绑定在本地文件系统上的;而Neon则用一个分布式的存储引擎替代了PostgreSQL底层的存储层,计算节点(也就是跑着PostgreSQL进程的地方)变得无状态,所有数据都存储在独立的存储节点网络中。
你可以把它想象成这样:传统的数据库服务器就像你带硬盘的电脑,数据和程序都在一起;而Neon就像你的电脑连接到云盘,电脑本身可以随时更换,但数据始终安全地保存在云端。这种架构带来了很多过去难以想象的便利和强大功能。
它完全开源,并且用高性能的Rust语言构建其核心存储部分,同时保持了与标准的PostgreSQL高度兼容。
项目数据:人气与技术实力并存
截止我写这篇文章的时候,Neon这个项目在GitHub上累计收揽了17805颗星,而仅仅在今日就新增了286颗星,这个增长速度足以说明它的受欢迎程度和社区关注度。
项目的主要开发语言是Rust,这为项目的性能和可靠性提供了坚实基础。当然,由于它深度改造了PostgreSQL,项目中也包含了大量的C代码。作者是neondatabase
,背后有一整个团队在积极维护和迭代。从提交历史和文档完整度来看,这是一个非常活跃且正在快速发展中的项目。
功能亮点:不止是无服务器
Neon不仅仅是将PostgreSQL变得“无服务器”那么简单,它通过解耦架构带来了一系列令人兴奋的特性:
✨ 计算与存储分离
这是Neon的基石。计算节点可以按需启动、暂停、扩缩容,甚至可以有多个计算节点连接到同一个存储后端。这意味着你可以根据负载动态调整计算资源,大大提高了效率并可能降低成本。我在体验时发现,如果你的实例长时间不活跃,它会自动暂停,再次访问时快速恢复,这种体验非常“无服务器”。
🌳 强大的数据库分支能力 (Branching)
这个功能是我个人觉得最酷的!就像Git一样,你可以轻松地从主分支(Main)创建一个新的数据库分支。这个新分支包含了创建时主分支的所有数据快照,但后续的所有修改都只会发生在分支上,不会影响主分支。这太适合开发、测试、数据分析、运行实验性查询等场景了!你可以为每个功能开发创建一个独立数据库分支,测试通过后再决定是否“合并”(虽然目前Neon的概念更接近Git的分支,而不是双向合并,但已经非常实用了)。
🕰️ 时间旅行 (Time Branching)
基于其存储架构,Neon能够保留历史数据版本,让你不仅可以创建当前状态的分支,还可以基于过去任意一个时间点的数据创建一个分支!这简直是数据恢复、回溯问题或分析历史数据的利器。
💡 与PostgreSQL高度兼容
尽管底层架构大变,Neon在用户接口层面努力保持与标准PostgreSQL的兼容。这意味着绝大多数现有的PostgreSQL客户端、驱动、工具和应用代码都可以直接在Neon上使用,迁移成本相对较低。
🔒 数据持久性与可靠性
Neon的存储引擎设计考虑了数据的持久性和可用性。它使用“Safekeepers”组件确保写入的WAL(预写日志)被安全复制和持久化,并通过Pageserver将数据上传到云存储(如S3),提供了多层数据保护。
🚀 基于Rust的高性能
Rust语言以其内存安全和高性能著称,Neon将存储引擎等核心组件用Rust实现,旨在提供比传统架构更高或至少有竞争力的性能,尤其在处理读操作和分支创建时能体现出优势。
安装与使用:本地探索或云端体验
Neon提供了多种使用方式。最简单的是使用他们提供的云服务(有免费额度),可以直接创建和管理Serverless Postgres实例。
如果想深入了解或在本地进行开发和测试,也可以自己编译和运行:
环境要求 (以Linux为例):
- Rust环境
- PostgreSQL客户端及开发库
- 各种构建工具和依赖库(如
build-essential
,libtool
,protobuf-compiler
,cmake
等,具体请参考README中的详细列表)
本地编译与运行步骤概述:
- 克隆代码 (带子模块):
git clone --recursive https://github.com/neondatabase/neon.git cd neon
- 编译: 根据系统执行
make
命令。# 在 Linux 上,使用所有CPU核心并行编译 make -j`nproc` -s # 在 macOS 上,使用所有逻辑CPU核心并行编译 make -j`sysctl -n hw.logicalcpu` -s
这会编译Neon项目以及它包含的修改版PostgreSQL。
- 初始化和启动本地实例: 使用
cargo neon
命令(Neon的本地控制工具)管理。# 初始化本地仓库和配置 cargo neon init # 启动 pageserver, safekeeper, broker cargo neon start # 创建初始租户并设为默认 cargo neon tenant create --set-default # 创建一个计算节点 (endpoint),连接到主分支 cargo neon endpoint create main # 启动主分支的计算节点 cargo neon endpoint start main
运行成功后,你应该能看到PostgreSQL连接地址和端口(例如
127.0.0.1:55432
)。 -
连接并使用: 使用标准的
psql
或其他客户端连接。psql -p 55432 -h 127.0.0.1 -U cloud_admin postgres
你就可以像操作普通PostgreSQL一样进行查询和操作了。
-
尝试分支功能:
# 从 main 分支创建一个名为 dev-feature 的新分支 cargo neon timeline branch --branch-name dev-feature # 创建并启动连接到 dev-feature 分支的计算节点 cargo neon endpoint create dev-feature --branch-name dev-feature cargo neon endpoint start dev-feature
现在你会有两个独立的PostgreSQL实例在运行,它们的数据在创建分支时一致,但后续修改互不影响。
-
停止与清理:
# 停止所有正在运行的 Neon 组件和 PostgreSQL 实例 cargo neon stop # 清理编译生成的文件 make clean # 如果需要彻底重置,可以删除本地数据库目录 (.neon) # rm -rf .neon
本地编译和运行稍微有点复杂,需要耐心安装依赖。但如果你只是想体验Serverless和分支功能,强烈建议先从他们的云服务免费额度开始。
使用场景与推荐理由:谁该尝试Neon?
我认为Neon特别适合以下几种场景:
- 云原生应用开发者: 如果你的应用追求高弹性、需要根据实际负载自动伸缩数据库资源,或者希望降低数据库闲置时的成本,Neon的无服务器架构非常有吸引力。
- 需要频繁进行开发/测试环境搭建的团队: 数据库分支功能能够极大地简化这部分工作。开发者可以快速创建独立的开发或测试数据库,互不干扰,用完即弃或轻松重建。这比传统的导出导入数据、搭建独立数据库实例要高效得多。
- 希望降低数据库运维复杂度和成本的中小型企业: 对比自建高可用PostgreSQL集群或某些昂贵的托管服务,Neon的托管服务(或其他基于Neon的云服务)可能提供更灵活、更经济的选择。开源版本也给了用户自托管的可能。
- 对数据库新技术感兴趣的技术探索者: Neon的架构是对传统关系型数据库存储方式的大胆创新,深入了解其原理和实现(特别是Rust部分)非常有价值。
推荐理由总结:
- 灵活性和弹性: 计算与存储分离带来的按需伸缩和成本优化。
- 高效的开发流程: 强大的数据库分支能力,简化开发、测试和数据实验。
- PostgreSQL生态兼容: 利用现有的工具和知识。
- 开源: 透明、可控、社区驱动。
- 潜力巨大: 这是一个正在快速发展的新型数据库架构。
与传统的自建PostgreSQL相比,Neon提供了更高的自动化和弹性;与AWS Aurora等云厂商托管服务相比,Neon开源且可以自托管,提供了更高的灵活性和避免厂商锁定的可能性。
结语:Postgres的未来探索者
Neon是一个非常值得关注的开源项目。它没有试图从零开始构建一个全新的数据库,而是巧妙地改造了强大的PostgreSQL,赋予了它适应云原生时代的新特性,尤其是无服务器架构和Git式的数据库分支功能,这解决了许多开发者和企业在实际应用中遇到的痛点。
虽然作为一个相对新兴的项目,它可能还有一些尚待完善的地方,但其核心理念和已实现的功能已经展现出了巨大的潜力。无论你是想为你的下一个云原生应用寻找一个更灵活的数据库,还是苦于复杂的开发测试环境搭建,亦或是单纯对数据库底层技术感兴趣,我都强烈推荐你去看看Neon。
你可以可以通过以下链接访问其GitHub仓库,了解更多细节,甚至参与到这个项目的建设中来:
GitHub项目地址: https://github.com/neondatabase/neon
也别忘了尝试一下他们提供的免费额度云服务,直接体验一下Serverless Postgres和数据库分支的魅力。
如果你已经在使用或者打算尝试Neon,欢迎在评论区分享你的经验和看法!咱们一起捉虫,一起探索新世界!