2024 年 10 月 29 日

Prisma Postgres®:利用 Unikernels 與 MicroVMs 構建現代化 PostgreSQL 服務

在 Prisma,我們相信部署資料庫應該像在 Notion 中新增一個頁面一樣簡單。今天,我們很高興能分享實現這一願景的第一個里程碑:得益於我們獨特的架構設計,Prisma Postgres® 為開發者提供了一個隨時在線 (always-on) 且具備隨用隨付 (pay-as-you-go) 定價模式的資料庫。 立即試用!

Prisma Postgres®: Building a Modern PostgreSQL Service Using Unikernels & MicroVMs

TL;DR(簡要總結)

我們很高興宣佈推出 Prisma Postgres,這是一項託管式 PostgreSQL 服務,為開發者提供隨時在線的資料庫,並針對儲存和查詢實行隨用隨付的定價模式(無固定成本,運算無需額外付費)。它就像無伺服器 (serverless) 資料庫一樣,但沒有冷啟動 (cold starts) 問題,並提供豐厚的免費額度!

為了構建具備這些功能的服務,我們設計了一種獨特的架構,採用裸機伺服器、革命性的毫秒級雲端技術堆疊,以及作為超輕量級 MicroVM 運行的 unikernels(可理解為「高度專業化的作業系統」)。

由於與 Prisma 產品的一流整合,Prisma Postgres 開箱即用,並內建連線池 (connection pooling)、快取 (caching) 以及查詢優化建議

Prisma Postgres 現已開放搶先體驗 (Early Access) 🎉


試用 Prisma Postgres

「無伺服器」PostgreSQL 的新時代

與現有的雲端供應商和其他無伺服器資料庫產品相比,我們的新架構在預配資料庫方面採取了根本不同的方法。在本節中,我們將探討無伺服器資料庫的趨勢,並說明 Prisma Postgres 如何融入這一類別。如果您更關注我們的架構和技術細節,請直接跳到下一節

什麼是無伺服器資料庫?

無伺服器資料庫(例如 AWS Aurora Serverless、Azure Cosmos DB、Neon 或 Turso)遵循與無伺服器運算類似的模型:它們的主要承諾是讓開發者無需管理資料庫基礎設施,同時提供具成本效益的「隨用隨付」定價模式。

使用無伺服器資料庫時,開發者無需考慮資源預配(如儲存或運算),因為資料庫會根據應用程式的需求自動擴展。

冷啟動:無伺服器資料庫的主要缺陷

自動擴展的承諾通常意味著資料庫可以縮減至零,即處於暫停 (suspended) 狀態。當資料庫在閒置後需要「喚醒」時,這可能導致查詢延遲過高,影響使用者體驗。

Source: <a href="https://vercel.com/docs/storage/vercel-postgres/limits#vercel-postgres-cold-starts">Vercel Docs | Vercel Postgres Limits</a>

資料來源:Vercel 文件 | Vercel Postgres 限制

有些資料庫供應商甚至要求開發者手動操作才能喚醒已暫停的資料庫。雖然無伺服器資料庫有其優勢,但冷啟動是一個主要的缺點!

無伺服器資料庫供應商只能提供非常有限的免費額度

對於開發者探索資料庫服務、構建業餘專案和創建概念驗證 (PoC) 而言,免費額度至關重要。

然而,近年來,提供免費額度對資料庫供應商來說已成為一項重大挑戰。由於技術設計往往依賴於轉售 AWS 等大型供應商的基礎設施,或是需要昂貴且資源密集型的容器化系統,這些供應商難以維持可持續的免費額度。

Prisma Postgres®:利用 Unikernels 與 MicroVMs 構建現代化 PostgreSQL 服務

這種困難導致了像 PlanetScaleHeroku 這樣的公司完全取消了免費方案。

Prisma Postgres:一個擁有豐厚免費額度且無冷啟動的「無伺服器」資料庫

如果能獲得「無伺服器」的所有優點,同時消除諸如有限的免費額度和冷啟動等缺點,會怎樣呢?我們正透過從零開始構建託管式 PostgreSQL 服務,將這一願景變為現實。

今天,我們很高興分享朝此方向邁出的第一步:我們與 Unikraft 合作,利用 Unikraft Cloud 來預配 PostgreSQL 實例。這是一個突破性的毫秒級雲端平台,消除了冷啟動問題,實現了毫秒級縮減至零和自動擴展,並允許在單台裸機上運行數千個實例。

冷啟動確實非常令人頭疼。Unikraft Cloud 提供硬體級隔離,且冷啟動時間僅需幾毫秒。

Death to Cold Starts終結冷啟動,詳見 Unikraft 部落格

這種獨特的架構不僅消除了冷啟動,還透過在單台機器上支援數千個資料庫,提供了卓越的經濟效益。這種方法使我們能夠建立其他資料庫供應商根本無法負擔的豐厚免費額度。

請繼續閱讀以了解我們新 PostgreSQL 服務的技術細節!

在毫秒級雲端基礎設施上構建託管式 PostgreSQL 服務

現代 PostgreSQL 供應商通常依賴以下兩種方法之一來預配資料庫基礎設施:

  • 基於(本質上是轉售)AWS 基礎設施
  • 構建自定義的容器化編排系統(例如使用 Kubernetes)

Prisma Postgres 兩者皆非。相反,它使用 Unikraft Cloud,並基於一種全新的獨特架構,在資料庫操作方面提供了無與倫比的效率、安全性(透過強大的硬體級隔離)、速度和開發體驗。

Unikraft Cloud 技術堆疊概述

讓我們仔細看看 Unikraft Cloud 的毫秒級雲端基礎設施 Source: <a href="https://unikraft.cloud/how-it-works/">Unikraft Cloud Docs | How it works</a>

資料來源:Unikraft Cloud 文件 | 運作原理

為了提供高效率和毫秒級語意,Unikraft 團隊必須優化網路元件、雲端堆疊和應用程式啟動時間。以下是上圖中 Unikraft Cloud 核心元件的快速概述:

  • 自定義控制器與代理 (Proxy):一種自定義平台控制器,提供同類最佳的響應式毫秒級語意和可擴展性。為了加速網路處理,Unikraft Cloud 將此控制器與自定義代理結合,負責負載平衡並能非常快速地對傳入請求做出反應。
  • 基於 Firecracker 與 unikernels 的快速虛擬機器監視器 (VMM):Unikraft Cloud 的 unikernels 使用精簡的映像檔,僅包含應用程式本身及其運行所需程式碼。搭配修改後的 Firecracker VMM,這些映像檔啟動速度極快。
  • 快照 (Snapshotting):優化的網路層和雲端堆疊有時可能仍不夠。有些應用程式可能需要數秒或數分鐘才能初始化,這可能會破壞平台的毫秒級語意。為了解決這個問題,Unikraft Cloud 提供了可選的快照功能。它會等待應用程式完全初始化,拍下記憶體快照,然後將其縮減至零(背後涉及大量工程工作,以確保在大規模場景下運作良好)。冷啟動後將從快照恢復,即使是大型應用程式,啟動時間也能減少到毫秒級。

無雲端供應商:Prisma Postgres 在裸機上運行

我們正從第一原理 (first principles) 出發構建 Prisma Postgres,在效能、成本、安全性和易用性之間取得完美平衡。

為了擁有完全的控制權,並避免主要雲端供應商的限制、約束和定價模式,我們選擇在全球各地的資料中心租用自己的實體機器。

Prisma Postgres 基於一種觀察,即現代硬體非常強大且便宜,這一觀點最近也由 Basecamp 所提倡:

離開雲端將在五年內為我們節省 700 萬美元。

Cloud Computing Isn't For Everyone雲端運算並不適合所有人,詳見 Basecamp 部落格

簡而言之:透過 Prisma Postgres,您的資料庫將在強大的伺服器上運行,這些伺服器擁有高 CPU 核心數、大容量 RAM 和超高速 NVME 儲存。

以 Unikraft 和 Firecracker 作為 MicroVM 運行的 Unikernels

我們架構的核心元件之一是在 以輕量級 MicroVM 運行的 unikernels 中部署 PostgreSQL。

Unikernels 以提供優異的效能而聞名,包括啟動時間、吞吐量和記憶體消耗等指標。

Unikraft:以簡單方式實現快速、專業的 Unikernels(研究論文,EuroSys 21)

在過去的幾個月裡,我們與 Unikraft 團隊進行了密切合作,他們在提升開發體驗 (DX) 並使 unikernels 更容易被開發者採用方面所做的工作讓我們印象深刻。我們的結論很明確:Unikernels 終於準備好被用於高效能生產環境的工作負載了。

Unikraft Cloud 將 unikernels 作為其核心元件之一,提供了一種部署雲端原生應用程式最快速、最經濟、最安全的方式:

  • 快速:具狀態縮減至零,恢復速度僅需個位數毫秒。
  • 經濟:無閒置資源成本,並具備卓越的伺服器密度以實現最佳經濟效益。
  • 安全:為容器和函數提供硬體級隔離。

透過額外的編譯步驟,Unikraft 將傳統的全端應用程式容器轉變為一個 unikernel 二進位映像檔,其中僅包含運行它所需的資源 —— 可以想像成一個為每個應用程式特定需求量身定制的專業作業系統 Source: <a href="https://unikraft.cloud/how-it-works/">Unikraft Cloud Docs | How it works</a>

資料來源:Unikraft Cloud 文件 | 運作原理

Prisma Postgres unikernel 二進位檔比原始 PostgreSQL 映像檔小 5 倍

我們與 Unikraft 團隊密切合作,創建了 Prisma Postgres unikernel 二進位映像檔。以下是之前 Unikraft 編譯過程的圖示 —— 針對 Prisma Postgres 進行了特殊處理: Blog image

Unikraft 團隊成功地將原始 PostgreSQL 映像檔從 280MB 縮減至 61MB。以下是 Prisma Postgres 映像檔的元件分解:

透過識別並刪除部署中不必要的套件,我們將映像檔大小縮減至原始大小的約 20%。原始 PostgreSQL 映像檔包含許多 Prisma Postgres 不需要的一般功能。

在我們的架構中,這些專業的二進位映像檔作為 unikernels 部署在我們的裸機上;由於 unikernels 最終是虛擬機器,因此每個 PostgreSQL 實例都提供了強大的硬體級隔離。

感謝 Unikraft,單台機器可以託管數千個應用程式(在我們的情況下是:Prisma Postgres)實例。

比較標準虛擬機器、容器與 unikernels

標準虛擬機器 (VMs)、容器和 unikernels 提供了在硬體上創建虛擬環境的不同方法。

Unikernels 採取了雲端部署的第一原理方法。在雲端,爭論點可能只在於兩件事:

  • 用於提供強大硬體級隔離的虛擬機器監視器 (Hypervisor)(以及在其之上運行的虛擬機器)
  • 您的應用程式

這兩者之間的一切都是開銷。Unikernel 在這兩者之間添加了盡可能薄的軟體層,以便應用程式能以最高效率在虛擬機器監視器上運行。 Source: <a href="https://unikraft.org/docs/concepts#introduction-to-unikernels/">Unikraft Docs | Introduction to unikernels</a>

資料來源:Unikraft 文件 | Unikernels 簡介

以下總結了 unikernels 與標準 VM 和容器相比的優勢: Blog image

Unikraft 的使命是「讓開發者能夠為每一個應用程式創建一個專業的作業系統,以確保最佳的效能、安全性保證和所需的關鍵績效指標 (KPI)」。

對於 Prisma 而言,這意味著存放您 PostgreSQL 實例的機器是專門為運行 PostgreSQL 而設計的。這與在通用作業系統上運行 PostgreSQL 形成對比,後者會消耗與應用程式(即 PostgreSQL)無關的資源。

為什麼 Prisma Postgres 沒有冷啟動?

我們的架構使我們能夠避免冷啟動,同時提供無伺服器產品的所有優點。這是透過各個元件的輕量級設計實現的:

  • 自定義網路層:Unikraft Cloud 的自定義平台控制器和自定義代理,提供同類最佳的響應式毫秒級語意和可擴展性。
  • 預建的 unikernel 映像檔:我們的 PostgreSQL unikernels 是預先構建並針對快速部署進行了優化。每個 unikernel 二進位檔都包含 PostgreSQL 和一個最小化的作業系統,避免了漫長且消耗資源的初始化過程。
  • MicroVMs 在毫秒內啟動:與傳統虛擬機器相比,由於開銷較大(BIOS、完整作業系統等),初始化時間較長,我們的 MicroVMs 剔除了不必要的元件,可以在毫秒內啟動。
  • 多層虛擬機器快照: Unikraft VMs 將 Firecracker 的虛擬機器監視器 (VMM) 與 unikernels 的封裝特性相結合。Firecracker 使得創建和恢復虛擬機器記憶體快照成為可能,從而能在個位數毫秒內從休眠狀態恢復機器。對於 Prisma Postgres,我們正在構建一個多層快照系統來高效管理快照。此功能將允許我們在短暫閒置後讓資料庫進入休眠狀態,同時仍能在可以忽略不計的啟動開銷下處理請求。

一個完全整合的資料層,包含資料庫、ORM、邊緣快取、連線池等

Prisma Postgres 是我們實現為全球應用程式提供完全整合資料層這一願景的重要一步。

我們的 Prisma 產品套件確保您可以構建、強化和擴展資料驅動的應用程式,而無需擔心資料建模、遷移、查詢或複雜且昂貴的基礎設施(如 Redis 或 Apache Kafka)。

以下是您從 Prisma 獲得的內容概覽:

開始使用 Prisma Postgres

試用 Prisma Postgres 最快的方法是按照此處的說明進行操作。
試用 Prisma Postgres

設定資料庫後,您將收到下載並運行範例專案的說明。

您今天能獲得什麼?

Prisma Postgres 今日正式開放搶先體驗。在搶先體驗階段,不建議用於生產環境,並且有幾點需要注意:

  • 提供豐厚的免費額度,讓您能夠開始使用、嘗試 Prisma Postgres 並構建小型專案 🎉
  • Prisma Postgres 始終捆綁了 Accelerate,這意味著您開箱即用即可獲得連線池和邊緣快取。
  • Prisma Postgres 根據查詢次數、傳出流量以及資料庫事件的儲存/傳遞進行收費。您可以在我們的定價頁面上找到所有詳細資訊。

另請查看文件以了解 Prisma Postgres 目前的限制。

試用 Prisma Postgres

Prisma Postgres 提供快速的啟動時間、低資源開銷、透過隔離實現的高安全性以及自動擴展能力 —— 同時它仍然是您熟悉且喜愛的 PostgreSQL 資料庫。

今天是 Prisma Postgres 的初步發布。敬請期待明年年初的正式發布 (General Availability)!

我們希望您和我們一樣對 Prisma 家族的這個新成員感到興奮。試用看看,並在 X 和我們的 Discord 上告訴我們您的想法!
試用 Prisma Postgres

注意:Postgres、PostgreSQL 和 Slonik 標誌是 PostgreSQL 加拿大社群協會的商標或註冊商標,經許可使用。

不要錯過下一篇貼文!

訂閱 Prisma 電子報

© . This site is unofficial and not affiliated with Prisma Data, Inc.