隆重推出Cloudflare關(guān)系數(shù)據(jù)庫(kù)連接器

來(lái)源: Cloudflare
作者:Cloudflare
時(shí)間:2021-11-30
15087
Cloudflare 正在打造世界上最優(yōu)秀的計(jì)算平臺(tái)。我們希望使通過(guò) Cloudflare 構(gòu)建應(yīng)用的工作變得輕松、無(wú)縫和順理成章。但僅僅打造最優(yōu)秀的計(jì)算平臺(tái)并不足夠——應(yīng)用的核心在于與其交互的數(shù)據(jù)。

Cloudflare 正在打造世界上最優(yōu)秀的計(jì)算平臺(tái)。我們希望使通過(guò) Cloudflare 構(gòu)建應(yīng)用的工作變得輕松、無(wú)縫和順理成章。但僅僅打造最優(yōu)秀的計(jì)算平臺(tái)并不足夠——應(yīng)用的核心在于與其交互的數(shù)據(jù)。

Cloudflare 現(xiàn)已提供多種數(shù)據(jù)存儲(chǔ)解決方案:Workers KV、R2 和 Durable Objects。三者均遵循 Cloudflare 針對(duì) Workers 的設(shè)計(jì)目標(biāo):默認(rèn)全球性,可無(wú)限擴(kuò)展,便于開(kāi)發(fā)人員使用。我們與 Fauna、 MongoDB 和 Prisma 等第三方存儲(chǔ)解決方案進(jìn)行合作,它們都打造了與我們的設(shè)計(jì)目標(biāo)完美一致的數(shù)據(jù)平臺(tái),并為已經(jīng)支持 HTTP 連接的數(shù)據(jù)庫(kù)編寫(xiě)了教程。

但有一個(gè)領(lǐng)域被嚴(yán)重忽視:關(guān)系數(shù)據(jù)庫(kù)。Cloudflare 本身就是運(yùn)行于關(guān)系數(shù)據(jù)庫(kù)上的。對(duì)于這一次 Full Stack Week,我們自問(wèn):我們能如何以一種符合我們?cè)O(shè)計(jì)目標(biāo)的方式來(lái)支持關(guān)系數(shù)據(jù)庫(kù)?

現(xiàn)在,我們隆重宣布 Workers 對(duì)關(guān)系數(shù)據(jù)庫(kù)的支持,包括 Postgres 和 MySQL。這是我們向那個(gè)領(lǐng)域邁出的第一步。

我們作出這一宣布的目的是,邀請(qǐng)您與我們的開(kāi)發(fā)人員合作解決從 Workers 內(nèi)訪問(wèn)數(shù)據(jù)庫(kù)帶來(lái)的獨(dú)特痛點(diǎn)。如果您希望與我們合作,請(qǐng)?zhí)顚?xiě)這個(gè)表單或在 Discord 上加入我們 。

為什么構(gòu)建 Datebase Connectors 如此困難?

首先,數(shù)據(jù)庫(kù)需要長(zhǎng)時(shí)間連接——它們往往要求 TCP 連接,因?yàn)樗鼈円趹?yīng)用程序服務(wù)器和數(shù)據(jù)庫(kù)之間保持長(zhǎng)時(shí)間連接。Workers 運(yùn)行時(shí)目前不支持 TCP 連接,因此我們只能支持基于 HTTP 的數(shù)據(jù)庫(kù)或代理。

其次,只是建立聯(lián)系是遠(yuǎn)遠(yuǎn)不夠的。為了方便提交查詢(xún)和管理響應(yīng),開(kāi)發(fā)人員使用數(shù)據(jù)庫(kù)的客戶(hù)端庫(kù)。由于 Workers 運(yùn)行時(shí)并非完全兼容 Node.js,因此我們要么推出自己的數(shù)據(jù)庫(kù)庫(kù),要么找到一個(gè)不使用不受支持內(nèi)建庫(kù)的數(shù)據(jù)庫(kù)。

最后,數(shù)據(jù)庫(kù)是敏感的。通常需要外部庫(kù)來(lái)管理應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)之間的共享連接,因?yàn)榻⑦@些連接的成本往往很高。

克服挑戰(zhàn)

我們今天的方法為我們今后以創(chuàng)造性的方式應(yīng)對(duì)其中每一個(gè)挑戰(zhàn)奠定了基礎(chǔ)。

我們利用 cloudflared 在 Cloudflare 和您現(xiàn)有基礎(chǔ)設(shè)施內(nèi)的專(zhuān)用網(wǎng)絡(luò)之間創(chuàng)建一條安全隧道。

接下來(lái),我們創(chuàng)建了一個(gè)中介層(shim-layer),它從一個(gè)流行的運(yùn)行時(shí)來(lái)適配套接字 API,以使用 WebSocket 直接連接到數(shù)據(jù)庫(kù)。這允許我們按現(xiàn)狀捆綁代碼,而不需要分叉或?qū)?shù)據(jù)庫(kù)庫(kù)進(jìn)行重大更改。

最后,這種方法將讓我們能夠開(kāi)始管理連接共用和連接建立的開(kāi)銷(xiāo)。雖然我們目前的技術(shù)演示需要在您自己的基礎(chǔ)設(shè)施上設(shè)置 Cloudflare 隧道,但我們正在尋找客戶(hù)來(lái)試驗(yàn)一個(gè)由 Cloudflare 托管隧道的模型。

后續(xù)開(kāi)發(fā)方向

我們才剛開(kāi)始。我們今天作出這一宣布的目的是,尋找希望構(gòu)建新應(yīng)用或?qū)F(xiàn)有應(yīng)用遷移到 Workers 并使用關(guān)系數(shù)據(jù)庫(kù)的客戶(hù)。

首先,我們希望在運(yùn)行時(shí)中添加對(duì) TCP 的原生支持。通過(guò)原生支持 TCP,我們不僅可以更好地支持?jǐn)?shù)據(jù)庫(kù),還可以擴(kuò)展 Workers 運(yùn)行時(shí),以便使用更廣泛的數(shù)據(jù)基礎(chǔ)設(shè)施。

鑒于我們?cè)诙褩5木W(wǎng)絡(luò)層所處的位置,提供性能、安全優(yōu)勢(shì)并極大地降低到全球數(shù)據(jù)庫(kù)的出口成本變得有可能成為現(xiàn)實(shí)。為做到這一點(diǎn),我們將調(diào)整現(xiàn)有 HTTP 到 TCP 代理服務(wù),將其作為面向開(kāi)發(fā)人員的連接池服務(wù)來(lái)運(yùn)行,代其管理數(shù)據(jù)庫(kù)連接。

最后,我們的網(wǎng)絡(luò)使得緩存數(shù)據(jù)并實(shí)現(xiàn)全球低延遲訪問(wèn)成為可能。一旦我們實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)的連接,使其能通過(guò) Cloudflare 實(shí)現(xiàn)全球訪問(wèn),就會(huì)解鎖一個(gè)分布式數(shù)據(jù)的全新架構(gòu)。

試用我們的連接器

希望試用我們的數(shù)據(jù)庫(kù)連接器嗎?啟動(dòng)和運(yùn)行有三個(gè)主要步驟:

  1. 在您的基礎(chǔ)設(shè)施內(nèi)部署 cloudflared。

  2. 部署一個(gè)連接到 cloudflared 的數(shù)據(jù)庫(kù)。

  3. 部署一個(gè)附帶數(shù)據(jù)庫(kù)驅(qū)動(dòng)(用于提交查詢(xún))的 Worker。

Postgres 教程在這里。全部完成后,類(lèi)似如下的樣子:

遇到任何困難?請(qǐng)?zhí)顚?xiě)這個(gè)表單,加入我們的 Discord ,讓我們聊一下吧

立即登錄,閱讀全文
版權(quán)說(shuō)明:
本文內(nèi)容來(lái)自于Cloudflare,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開(kāi)掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
個(gè)人VIP
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家