2024 年 10 月 29 日

Prisma Postgres®:使用 Unikernels 和 MicroVM 构建现代 PostgreSQL 服务

在 Prisma,我们相信部署数据库应该像在 Notion 中添加新页面一样简单。今天,我们很高兴分享实现这一愿景的第一个里程碑:Prisma Postgres® благодаря нашей уникальной архитектуре дает разработчикам 始终在线 数据库和 按需付费 定价。 立即试用!

TL;DR(太长不看)

我们很高兴宣布 Prisma Postgres,一种托管式 PostgreSQL 服务,为开发者提供始终在线数据库,并对存储和查询采用按需付费定价模式(无固定成本,无计算成本)。它就像一个无服务器数据库——但没有冷启动和一个慷慨的免费层级!

为了构建具有这些功能的服务,我们设计了一种独特的架构,使用裸机服务器、革命性的毫秒级云堆栈和作为超轻量级微虚拟机运行的 unikernels(可以理解为“超专业化的操作系统”)。

得益于 Prisma 产品的首要集成,Prisma Postgres 开箱即用地提供连接池、缓存、实时订阅和查询优化建议

Prisma Postgres 现已开放 Early Access 🎉


试用 Prisma Postgres

“无服务器” PostgreSQL 的新时代

与现有的云提供商和其他无服务器数据库产品相比,我们的新架构在配置数据库方面采取了根本不同的方法。在本节中,我们将了解无服务器数据库的趋势,并解释 Prisma Postgres 如何适应这一类别。如果您更关心我们的架构和技术细节,请跳转到下一节

什么是无服务器数据库?

无服务器数据库(如 AWS Aurora Serverless、Azure Cosmos DB、Neon 或 Turso)遵循与其在无服务器计算中的对应物相似的模型:它们的主要承诺是让开发者摆脱管理数据库基础设施的困扰,同时提供具有成本效益的“按需付费”定价模式。

当使用无服务器数据库时,开发者无需考虑资源配置(如存储或计算),因为数据库会根据应用程序的需求自动扩展。

冷启动:无服务器数据库的主要缺点

自动扩展的承诺通常意味着数据库可以缩减到零,即暂停。当数据库需要在不活动后“唤醒”时,这可能会导致高查询延迟和糟糕的用户体验,例如

来源:Vercel 文档 | Vercel Postgres 限制

一些数据库提供商甚至要求开发者手动操作来唤醒暂停的数据库。虽然无服务器数据库有其优势,但冷启动是一个主要缺点!

无服务器数据库提供商只能提供非常有限的免费层级

免费层级对于开发者探索数据库服务、构建业余爱好应用程序和创建概念验证至关重要。

然而,近年来,提供免费层级已成为数据库提供商面临的重大挑战。由于技术设计通常依赖于转售来自 AWS 等主要提供商的基础设施,或需要成本高昂、资源密集型的基于容器的系统,这些提供商难以维持可行的免费层级。

这种困境导致 PlanetScaleHeroku 等公司完全停止提供免费层级。

Prisma Postgres:具有慷慨免费层级且无冷启动的“无服务器”数据库

如果您可以获得“无服务器”的所有优势,而没有诸如有限的免费层级和冷启动之类的缺点,那会怎么样?我们正在通过从头开始构建托管式 PostgreSQL 服务,将这一愿景变为现实。

今天,我们很高兴分享朝这个方向迈出的第一步:我们与 Unikraft 合作,使用 Unikraft Cloud 配置 PostgreSQL 实例,这是一个突破性的毫秒级云平台,可消除冷启动,实现毫秒级缩放到零和自动扩展,并允许在单个裸机服务器上运行数千个实例。

冷启动确实令人头疼。Unikraft Cloud 提供毫秒级的冷启动,并具有硬件级隔离。

消灭冷启动消灭冷启动,参见 Unikraft 博客

这种独特的架构不仅消除了冷启动,而且通过在单台机器上支持数千个数据库,提供了卓越的经济性。这种方法使我们能够创建一个慷慨的免费层级,这是其他数据库提供商根本无法负担的。

继续阅读以了解我们新的 PostgreSQL 服务的技术细节!

在毫秒级云基础设施上构建托管式 PostgreSQL 服务

现代 PostgreSQL 提供商通常依赖以下两种方法之一来配置数据库基础设施

  • 构建在 AWS 基础设施之上(本质上是转售
  • 构建自定义的、基于容器的编排系统(例如,使用 Kubernetes)

Prisma Postgres 两者都不是。相反,它使用 Unikraft Cloud,并且基于一种新的独特架构,该架构在处理数据库时提供了无与伦比的效率、安全性(通过强大的硬件级隔离)、速度和开发者体验。

Unikraft Cloud 堆栈概述

让我们更仔细地看看 Unikraft Cloud 的毫秒级云基础设施

来源:Unikraft Cloud 文档 | 工作原理

为了提供高效率和毫秒级语义,Unikraft 团队不得不优化网络组件、云堆栈和应用程序启动时间。以下是 Unikraft Cloud 核心组件 的快速概述(来自上图)

  • 自定义控制器和代理:自定义平台控制器,提供一流的、反应式的毫秒级语义和可扩展性。为了加快网络处理速度,Unikraft Cloud 将此控制器与自定义代理相结合,该代理负责负载均衡,并能够非常快速地响应传入的请求。
  • 基于 Firecracker 和 unikernels 的快速虚拟机监控器 (VMM):Unikraft Cloud 的 unikernels 使用精简镜像,其中仅包含应用程序、应用程序运行所需的代码,以及其他内容。与 Firecracker VMM 的修改版本配对,这些镜像启动速度极快。
  • 快照:优化的网络层和云堆栈可能并不总是足够。某些应用程序可能需要数秒或数分钟才能初始化,这可能会扰乱平台的毫秒级语义。为了解决这个问题,Unikraft Cloud 提供了可选的快照功能。它等待应用程序完全初始化,拍摄内存快照,然后将其缩放到零(背后有大量的工程设计,以确保这在大规模下也能良好工作)。然后,冷启动从快照恢复,即使对于大型应用程序,也将其缩短到毫秒级。

没有云提供商:Prisma Postgres 在裸机上运行

我们正在从第一性原理构建 Prisma Postgres,在性能、成本、安全性和易用性之间取得完美平衡。

为了拥有完全控制权,并避免主要云提供商的限制、约束和定价模式,我们选择在全球各地的数据中心租赁自己的物理机器。

Prisma Postgres 基于以下观察:现代硬件非常强大且便宜,Basecamp 最近也推广了这一点

离开云服务将在五年内为我们节省 700 万美元。

云计算并非适合所有人云计算并非适合所有人,参见 Basecamp 博客

简而言之:使用 Prisma Postgres,您的数据库将在强大的服务器上运行,这些服务器由高 CPU 核心数、大量 RAM 和超快速 NVME 存储提供支持。

Unikernels 作为微虚拟机在 Unikraft 和 Firecracker 中运行

我们架构的核心组件之一是在作为轻量级微虚拟机运行的 unikernels 内部署 PostgreSQL。

Unikernels 以在启动时间、吞吐量和内存消耗等方面的出色性能而闻名,仅举几例。

Unikraft:快速、专业化的 Unikernels,简单易用(研究论文,EuroSys 21)

在过去的几个月中,我们与 Unikraft 团队密切合作,并对其在提高 DX 和使 unikernels 更易于开发者使用方面的工作印象深刻。我们的结论很明确:Unikernels 最终已准备好用于高性能生产工作负载。

Unikraft Cloud 使用 unikernels 作为其核心组件之一,提供最快、最经济、最安全的方式来部署云原生应用程序

  • 快速:有状态的缩放到零,可在个位数毫秒内恢复
  • 经济:无空闲资源成本和卓越的服务器密度,实现最佳经济性
  • 安全:用于容器和功能的硬件级隔离

通过额外的编译步骤,Unikraft 将传统的全栈应用程序容器转换为 unikernel 二进制镜像,该镜像仅包含运行它所需的资源——可以理解为:专为每个特定应用程序的需求量身定制的专业化操作系统

来源:Unikraft Cloud 文档 | 工作原理

Prisma Postgres unikernel 二进制文件比原始 PostgreSQL 镜像小 5 倍

我们与 Unikraft 团队密切合作创建了 Prisma Postgres unikernel 二进制镜像。以下是之前 Unikraft 编译过程的图表——但专门针对 Prisma Postgres

Unikraft 团队设法将原始 PostgreSQL 镜像从 280MB 缩减到 61MB。以下是 Prisma Postgres 镜像 组件的分解

通过识别和删除部署中不需要的软件包,我们将镜像大小缩减到原始大小的约 20%。原始 PostgreSQL 镜像包含许多 Prisma Postgres 不需要的通用功能。

在我们的架构中,这些专业化的二进制镜像作为 unikernels 部署在我们的裸机服务器上;并且,由于 unikernels 最终是虚拟机,因此每个 PostgreSQL 实例都提供强大的硬件级隔离。

得益于 unikraft,单台机器可以托管数千个应用程序(在我们的例子中是:Prisma Postgres)实例

比较标准虚拟机、容器和 unikernels

标准虚拟机 (VM)、容器和 unikernels 提供了创建硬件上的 虚拟环境 的不同方法。

Unikernels 采用第一性原理方法进行云部署。在云中,可以说只有两件事重要

  • 用于提供强大的硬件级隔离的 虚拟机监控器(以及在其之上运行的虚拟机)
  • 您的 应用程序

两者之间的所有内容都是开销。unikernel 在两者之间添加了尽可能薄的软件层,以便应用程序可以以最高的效率在虚拟机监控器上运行

来源:Unikraft 文档 | Unikernels 简介

以下是 unikernels 与标准虚拟机和容器相比的优势摘要

Unikraft 的使命是“使开发者能够为每个应用程序创建一个专业化的操作系统,以确保最佳性能、安全保证和期望的 KPI。”

对于 Prisma 的我们来说,这意味着运行 PostgreSQL 实例的机器是为运行 PostgreSQL 而专业化的。这与在通用操作系统上运行 PostgreSQL 形成对比,后者会消耗与应用程序(即 PostgreSQL)无关的资源。

为什么 Prisma Postgres 没有冷启动?

我们的架构使我们能够在避免冷启动的同时,提供无服务器产品的所有优势。这通过各个组件的轻量级设计来实现

  • 自定义网络层:Unikraft Cloud 的自定义平台控制器和自定义代理提供一流的、反应式的毫秒级语义和可扩展性。
  • 预构建的 unikernel 镜像:我们的 PostgreSQL unikernels 是预构建的,并针对快速部署进行了优化。每个 unikernel 二进制文件都包含 PostgreSQL 和最简操作系统,避免了冗长且资源繁重的初始化过程。
  • 微虚拟机在毫秒内启动:与由于其更大的开销(BIOS、完整操作系统等)而需要更长时间初始化的传统虚拟机不同,我们的微虚拟机剥离了不必要的组件,可以在毫秒内启动。
  • 多层虚拟机快照: Unikraft 虚拟机结合了 Firecracker 的虚拟机监控器 (VMM) 与 unikernels 的打包特性。Firecracker 使创建和恢复虚拟机内存快照成为可能,从而能够在个位数毫秒内从休眠状态恢复机器。对于 Prisma Postgres,我们正在构建一个多层快照系统,该系统将有效地管理快照。此功能将允许我们在短暂的不活动后休眠数据库,同时仍然能够以可忽略不计的启动开销来服务请求。

具有数据库、ORM、缓存、实时事件等的完全集成的数据层

Prisma Postgres 是朝着我们为全球应用程序提供完全集成的数据层愿景迈出的重要一步。

我们的 Prisma 产品套件确保您可以构建、强化和发展数据驱动的应用程序,而无需担心数据建模、迁移、查询或复杂且昂贵的基础设施(如 Redis 或 Apache Kafka)

以下是您使用 Prisma 可以获得的功能概述

  • Prisma Postgres:高性能 PostgreSQL 实例,始终在线,并采用按需付费定价。
  • Prisma ORMTypeScript 生态系统中下载次数最多的 ORM,具有人类可读的模式、自动迁移和直观的类型安全查询。
  • Prisma Accelerate:连接池和全局缓存层,可大幅加快查询速度(具有基于每个查询级别的 TTL 和 SWR 等缓存策略)。
  • Prisma Pulse:实时事件系统,允许您通过简单的方法(如 prisma.user.stream())使用 交付保证 流式传输数据库事件。
  • Prisma Optimize:AI 驱动的查询分析和推荐系统,可帮助您优化数据库查询。
  • Prisma Studio可视化查看和编辑数据的最简单方法。

开始使用 Prisma Postgres

试用 Prisma Postgres 的最快方法是按照此处的说明进行操作


试用 Prisma Postgres

设置数据库后,您将收到下载和运行示例项目的说明。

今天您可以使用 Prisma Postgres 获得什么

Prisma Postgres 今天以 Early Access 形式发布。在 Early Access 阶段,不建议用于生产环境,并且有一些注意事项

  • 有一个慷慨的免费层级,可让您开始使用、试用 Prisma Postgres 并使用它构建小型项目 🎉
  • Prisma Postgres 始终与 Accelerate 和 Pulse 捆绑在一起,这意味着您可以开箱即用地获得连接池、缓存和实时数据库事件。
  • Prisma Postgres 按查询、出口流量和数据库事件的存储/交付收费。您可以在我们的定价页面上找到所有详细信息。

另请查看文档,了解 Prisma Postgres 当前的限制。

试用 Prisma Postgres

Prisma Postgres 提供快速启动时间、低资源开销、通过隔离实现的高安全性以及自动可扩展性——所有这些都同时是您熟悉和喜爱的 PostgreSQL 数据库。

今天标志着 Prisma Postgres 的首次发布。期待明年年初的正式发布!

我们希望您和我们一样对 Prisma 家族的这一新成员感到兴奋。试用一下,并在 X(Twitter) 和我们的 Discord 上告诉我们您的想法!


试用 Prisma Postgres

注意:Postgres、PostgreSQL 和 Slonik 标志是 PostgreSQL Community Association of Canada 的商标或注册商标,经许可使用

不要错过下一篇文章!

注册 Prisma 新闻通讯