Cloudflare 正在打造世界上最優(yōu)秀的計算平臺。我們希望使通過 Cloudflare 構(gòu)建應用的工作變得輕松、無縫和順理成章。但僅僅打造最優(yōu)秀的計算平臺并不足夠——應用的核心在于與其交互的數(shù)據(jù)。
Cloudflare 現(xiàn)已提供多種數(shù)據(jù)存儲解決方案:Workers KV、R2 和 Durable Objects。三者均遵循 Cloudflare 針對 Workers 的設計目標:默認全球性,可無限擴展,便于開發(fā)人員使用。我們與 Fauna、 MongoDB 和 Prisma 等第三方存儲解決方案進行合作,它們都打造了與我們的設計目標完美一致的數(shù)據(jù)平臺,并為已經(jīng)支持 HTTP 連接的數(shù)據(jù)庫編寫了教程。
但有一個領域被嚴重忽視:關系數(shù)據(jù)庫。Cloudflare 本身就是運行于關系數(shù)據(jù)庫上的。對于這一次 Full Stack Week,我們自問:我們能如何以一種符合我們設計目標的方式來支持關系數(shù)據(jù)庫?
現(xiàn)在,我們隆重宣布 Workers 對關系數(shù)據(jù)庫的支持,包括 Postgres 和 MySQL。這是我們向那個領域邁出的第一步。
我們作出這一宣布的目的是,邀請您與我們的開發(fā)人員合作解決從 Workers 內(nèi)訪問數(shù)據(jù)庫帶來的獨特痛點。如果您希望與我們合作,請?zhí)顚戇@個表單或在 Discord 上加入我們 。
為什么構(gòu)建 Datebase Connectors 如此困難?
首先,數(shù)據(jù)庫需要長時間連接——它們往往要求 TCP 連接,因為它們要在應用程序服務器和數(shù)據(jù)庫之間保持長時間連接。Workers 運行時目前不支持 TCP 連接,因此我們只能支持基于 HTTP 的數(shù)據(jù)庫或代理。
其次,只是建立聯(lián)系是遠遠不夠的。為了方便提交查詢和管理響應,開發(fā)人員使用數(shù)據(jù)庫的客戶端庫。由于 Workers 運行時并非完全兼容 Node.js,因此我們要么推出自己的數(shù)據(jù)庫庫,要么找到一個不使用不受支持內(nèi)建庫的數(shù)據(jù)庫。
最后,數(shù)據(jù)庫是敏感的。通常需要外部庫來管理應用服務器和數(shù)據(jù)庫之間的共享連接,因為建立這些連接的成本往往很高。
克服挑戰(zhàn)
我們今天的方法為我們今后以創(chuàng)造性的方式應對其中每一個挑戰(zhàn)奠定了基礎。
我們利用 cloudflared 在 Cloudflare 和您現(xiàn)有基礎設施內(nèi)的專用網(wǎng)絡之間創(chuàng)建一條安全隧道。
接下來,我們創(chuàng)建了一個中介層(shim-layer),它從一個流行的運行時來適配套接字 API,以使用 WebSocket 直接連接到數(shù)據(jù)庫。這允許我們按現(xiàn)狀捆綁代碼,而不需要分叉或?qū)?shù)據(jù)庫庫進行重大更改。
最后,這種方法將讓我們能夠開始管理連接共用和連接建立的開銷。雖然我們目前的技術演示需要在您自己的基礎設施上設置 Cloudflare 隧道,但我們正在尋找客戶來試驗一個由 Cloudflare 托管隧道的模型。
后續(xù)開發(fā)方向
我們才剛開始。我們今天作出這一宣布的目的是,尋找希望構(gòu)建新應用或?qū)F(xiàn)有應用遷移到 Workers 并使用關系數(shù)據(jù)庫的客戶。
首先,我們希望在運行時中添加對 TCP 的原生支持。通過原生支持 TCP,我們不僅可以更好地支持數(shù)據(jù)庫,還可以擴展 Workers 運行時,以便使用更廣泛的數(shù)據(jù)基礎設施。
鑒于我們在堆棧的網(wǎng)絡層所處的位置,提供性能、安全優(yōu)勢并極大地降低到全球數(shù)據(jù)庫的出口成本變得有可能成為現(xiàn)實。為做到這一點,我們將調(diào)整現(xiàn)有 HTTP 到 TCP 代理服務,將其作為面向開發(fā)人員的連接池服務來運行,代其管理數(shù)據(jù)庫連接。
最后,我們的網(wǎng)絡使得緩存數(shù)據(jù)并實現(xiàn)全球低延遲訪問成為可能。一旦我們實現(xiàn)了對數(shù)據(jù)庫的連接,使其能通過 Cloudflare 實現(xiàn)全球訪問,就會解鎖一個分布式數(shù)據(jù)的全新架構(gòu)。
試用我們的連接器
希望試用我們的數(shù)據(jù)庫連接器嗎?啟動和運行有三個主要步驟:
在您的基礎設施內(nèi)部署 cloudflared。
部署一個連接到 cloudflared 的數(shù)據(jù)庫。
部署一個附帶數(shù)據(jù)庫驅(qū)動(用于提交查詢)的 Worker。
Postgres 教程在這里。全部完成后,類似如下的樣子:
遇到任何困難?請?zhí)顚戇@個表單,加入我們的 Discord ,讓我們聊一下吧