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