是在今天的 2024 開發者周上,Cloudflare 釋出了一系列令人激動的新特性,例如 Python Worker 以及 Workers AI,把套用開發與交付的便利性拔高到了一個全新的程度。與 Cloudflare 的 Serverless 開發體驗相比,傳統雲廠商號稱 Serverless 的各種產品都顯得滑稽可笑。
Cloudflare 更廣為人知的是它的慷慨免費套餐,一些中小型網站幾乎能以零成本執行在這裏。在 Cloudflare 的鮮明對比之下,天價出租 CPU 、 磁盤 、 頻寬 的公有雲廠商顯得面目可憎。Cloudflare 這樣的雲帶來的開發體驗,才真正配得上「雲」的稱號。在我看來, Cloudflare 應該主動出擊,與傳統公有雲廠商搶奪雲端運算的定義權。
利益相關:Cloudflare 沒給我錢,我倒是給 Cloudflare 付了錢。純粹是因為 Cloudflare 產品非常出色,極好地解決了我的需求,讓我非常樂意付點費支持一下,並告訴更多朋友有這項福利。與之相反的是,我付錢給傳統公有雲廠商之後的感受是這做的都是什麽玩意 —— 必須寫文章 狠狠地罵他們 ,才能緩解內心的精神損失。
Cloudflare 是什麽
Cloudflare是一家提供內容分發網絡(CDN)、互聯網安全性、抗DDoS(分布式拒絕服務)和分布式DNS服務的美國公司。全世界互聯網流量的 20% 由它服務。如果你掛著 VPN 存取一些網站,經常可以看到 Cloudflare 的抗 DDoS 驗證碼頁面和 Logo。他們提供:
- 內容分發網絡(CDN) :Cloudflare的CDN服務透過全球分布的數據中心緩存客戶網站的內容,加快網站載入速度並減少伺服器壓力。
- 網站安全性 :提供SSL加密、防止SQL註入和跨站指令碼攻擊的安全措施,增強網站的安全性。
- DDoS防護 :具備先進的DDoS防護功能,能夠抵禦各種規模的攻擊,保護網站不受幹擾。
- 智能路由 :使用Anycast網絡技術,能夠智能辨識數據傳輸的最佳路徑,減少延遲。
- 自動HTTPS重新導向 :自動將存取轉換為HTTPS,增強通訊的安全性。
- Workers平台 :提供Serverless架構,允許在Cloudflare的全球網絡上執行JavaScript或WASM(WebAssembly)程式碼,無需管理伺服器。
當然,Cloudflare 還有一些非常不錯的服務,例如托管網站的 Pages,物件儲存 R2,分布式數據庫D1 等,開發者體驗非常不錯。
Pages:簡單易用的網站托管
舉個例子,如果您要托管一個靜態網站。用 Cloudflare 有多簡單?首先在 GitHub 建立一個 Repo,把網站內容丟進去,然後在 Cloudflare 連結到你的 Git Repo ,分配一個子網域名稱,然後你的網站就自動部署到全世界的各個角落了。如果你要更新網站內容,只要 git push 到特定分支就足夠了。
如果你使用特定的 網站框架 ,甚至還可以直接線上從倉庫內容中構建:Blazor、Brunch、Docusaurus、Gatsby、Gridsome、Hexo、Hono、Hugo、Jekyll、Next.js、Nuxt、Pelican、Preact、Qwik、React、Remix、Solid、Sphinx、Svelte、Vite 3、Vue、VuePress、Zola、Angular、Astro、Elder.js、Eleventy、Ember、MkDocs。
我從完全沒接觸過 Cloudflare,到把 Pigsty 的網站搬運到 CF 上並完成部署,只用了一個小時左右。我不需要操心什麽伺服器,CI/CD / HTTPS 證書,安全高防抗 DDoS,Cloudflare 已經把一切都替我做好了 —— 更重要的是流量費全免,我唯一做的就是綁了個信用卡花了十幾塊錢買了個網域名稱,但實際上根本不需要什麽額外費用 —— 都已經包含在免費計劃中了。
更令我震驚的是,雖然存取速度慢了一些,但在中國大陸是可以直接存取 CF 上的網站的,甚至不需要備案!說來也滑稽,本土雲廠商雖然可以很快替你完成網站資源置備這件事,但耗時最久的步驟往往是卡在備案上。這一點確實算是 Cloudflare 的一個福利特性了。
Worker:極致的 Serverless 體驗
盡管你可以把許多業務邏輯放在前端在瀏覽器中用 Javascript 解決,但一個復雜的動態網站也是需要一些後端開發的。而 Cloudflare 也把這一點簡化到了極致 —— 你只需要編寫業務邏輯的 Javascript 函數就可以了 。當然,也可以使用 Typescript,現在更是支持 Python 了 —— 直接呼叫 AI 模型,難以想象後面會出現多少新的花活!
使用者編寫的這個函數會被部署在 Cloudflare 全世界 CDN 邊緣伺服器節點上,執行使用者定義的業務邏輯。你可以 幹各種各樣的事情 ,返回動態的HTML與JSON,自訂路由、重新導向、轉發、過濾、緩存、A/B測試,重寫請求,聚合請求,執行認證。當然,你也可以直接使用業務程式碼中呼叫物件儲存 R2 與 SQL 數據庫 D1,或者把請求轉發到你自己的數據中心伺服器上處理。
export interface Env {
// If you set another name in wrangler.toml as the value for 'binding',
// replace "DB" with the variable name you defined.
DB: D1Database;
}
export default {
async fetch(request: Request, env: Env) {
const { pathname } = new URL(request.url);
if (pathname === "/api/beverages") {
// If you did not use `DB` as your binding name, change it here
const { results } = await env.DB.prepare(
"SELECT * FROM Customers WHERE CompanyName = ?"
)
.bind("Bs Beverages")
.all();
return Response.json(results);
}
return new Response(
"Call /api/beverages to see everyone who works at Bs Beverages"
);
},
};
[[d1_databases]]
binding = "DB" # available in your Worker on env.DB
database_name = "prod-d1-tutorial"
database_id = "<unique-ID-for-your-database>"
比起傳統雲上笨拙的開發部署體驗來所,CF worker 真正做到了讓開發者爽翻天的 Serverless 效果。開發者不需要操心什麽數據庫連線串,AccessPoint,AK/SK金鑰管理,用什麽數據庫驅動,怎麽管理本地日誌,怎麽搭建 CI/CD 流程這些繁瑣問題,最多在環境變量裏面指定一下儲存桶名稱這類簡單資訊就夠了。寫好 Worker 膠水程式碼實作業務邏輯,命令列一把梭就可以完成全球部署上線。
與之對應的是傳統公有雲廠商提供的各種所謂 Serverless 服務,比如 RDS Serverless,就像一個惡劣的笑話,單純是一種計費模式上的區別 —— 既不能 Scale to Zero,也沒什麽易用性上的改善 —— 你依然要在控制台去點點點建立一套 RDS,而不是像 Neon 這種真 Serverless 一樣用連線串連上去就能直接迅速拉起一個新例項。更重要的是,稍微有個幾十上百的QPS,相比包年包月的賬單就要爆炸上天了 —— 這種平庸的 「Serverless」 確實汙染了這個詞語的本意。
R2:吊打 S3 的物件儲存
Cloudflare R2 提供了物件儲存服務。與 AWS S3 相比,便宜了也許能有一個數量級 —— 我的意思是,盡管單純看儲存的價格 $ / GB·月,Cloudflare(0.015 $)價格與 S3 (0.023 $) 差距並不大,但 Cloudflare 的 R2 是免流量費的!
每月免費額度 | Cloudflare R2 | Amazon S3 |
---|---|---|
儲存 | 10 GB / 月 | 5 GB / 月 |
寫請求 | 1 M / 月 | 2 K / 月 |
讀請求 | 10 M / 月 | 20 K / 月 |
數據傳輸 | 無限量! | 100 GB |
超出免費額度後的價格 | ||
儲存 | ¥ 0.11 / GB | ¥ 0.17 / GB |
寫請求 | ¥ 32.63 / 百萬請求 | ¥ 36.25 / 百萬請求 |
讀請求 | ¥ 2.61 / 百萬請求 | ¥ 2.9 / 百萬請求 |
流量費 | 免費! | ¥ 0.65 / GB |
舉個例子,我的網站,R2 在過去一個月內消耗了 300 GB 流量,按照本土雲 1GB 流量八毛錢左右的價格,需要支付 240 元,但我一分錢也沒付。而且,我還知道更極端的例子 —— 比如一個月消耗了 3TB 流量,也依然在免費套餐中……
Cloudflare R2 是與 CDN 二合一的。在傳統的雲服務商中,你還需要操心額外的 CDN 配置,回源流量,CDN流量包,抗DDoS等等問題。但 Cloudflare 不需要,只要勾選配置啟用,你的 R2 Bucket 可以直接被全世界讀取,而最重要的是,而你根本不用擔心賬單被刷爆的問題 —— 我知道好幾個在傳統雲廠商上,因為攻擊把 CDN 流量刷爆,幾萬塊錢余額一夜耗幹欠費的案例。(包括我自己還親歷過一個因為雲廠商自己SB的CDN回源設計, 爆刷CDN流量的案例 )
但是在 Cloudflare 上,你不需要像鬥牛犬和貓頭鷹一樣監視著 賬單 與流量,首先,Cloudflare 流量免費…… ,更強的是, Cloudflare 已經有了智能的抗 DDoS 服務了,即使是免費的 Plan 也預設提供這項服務,可以有效避免惡意攻擊(在傳統雲廠商,這玩意單獨賣幾千上萬的所謂高防IP服務)。再加上每月慷慨的免費 1千萬讀取請求(對於放圖片、軟件包來說這已經非常大了!),可以確保在這上面的費用是高度確定性的 —— 如果不是零的話。
Cloudflare:線上的價值
王堅博士那本講雲端運算的書【線上】其實說得很明白,雲端運算的真正價值是 線上 (而不是什麽彈性、敏捷、便宜之類的東西)。舉個例子:我有一些下雲的客戶與使用者,雖然已經把主體業務從公有雲上搬到了 IDC 或者自己辦公室的伺服器上,但依然在雲上留一些 ECS 和 RDS 的尾巴 —— 因為他們收取數據的 API 放在那裏,感覺公有雲提供的網絡接入要比自己的機房/辦公室更穩定可靠 —— 註意是網絡接入而不是儲存計算。
很多雲上的客戶, 在算力上付出了幾倍到十幾倍溢價 , 在儲存上付出了幾十倍到上百倍的溢價 ,都是為了這個網絡 「線上」 的能力。但 Cloudflare 這樣遍布全球的,帶有邊緣計算能力的 CDN ,將 「線上」 的能力拔高到了一個全新的高度上,比傳統公有雲更好地解決了這個問題。例如,AI 當紅炸子雞 OpenAI 的網站和 API 就是這麽做的 —— 透過 CF 對外提供接入。
在這種模式下,使用者完全可以把網站與 API 透過 Cloudflare 對外提供接入,而將重量級的儲存與計算放在 IDC 中,而不是在傳統公有雲上用幾倍的價格進行租賃。Cloudflare 提供的 Worker 可以在邊緣用於發送、收取數據,並將請求轉發至您自己的數據中心進行處理。如果希望實作更可靠的容災,您還可以利用 Cloudflare 上的 R2 與 D1 作為臨時性本地緩存,預處理匯總數據後,統一拉取到 IDC 進行處理。
CF 與 IDC 從兩頭擠壓公有雲
在 IT 規模光譜的一側 —— 個人站長與小微企業上,新一代雲服務 / SaaS(CF,Neon,Vercel,Supabase) 賽博菩薩們的免費套餐,對公有雲產生了明顯的替代與沖擊 —— 別說 99 塊錢包年的雲伺服器了,9塊9 都不一定香了 —— 再便宜能便宜過免費嗎? —— 更何況用 CF 建站的體驗比雲伺服器自建要好太多了。
但更重要的是,在光譜另一側的中大型企業中,新出現的 IDC 2.0 與開源管控軟件替代合流,短路掉公有雲這個中間商,利用好 硬件摩爾定律 的累積優勢,成為 終極FinOps實踐 ,實作極為 驚人的降本增效能力 。Cloudflare 的出現補齊了開源IDC自建模式的最後一塊短板 —— 「 線上 」 能力。
Cloudflare 並沒有提供傳統公有雲上的那些彈性計算、儲存、 K8S 、 RDS 服務。但幸運地是,Cloudflare 可以與公有雲 / IDC 良好地配合協同 —— 從某種意義上來說,因為 Cloudflare 成功解決了 「線上」 的問題,這使得傳統數據庫中心 IDC 2.0 也同樣可以擁有比肩甚至超越公有雲的 「線上」 能力,兩者配合,在事實上摧毀了一些公有雲的護城河,並擠壓了傳統公有雲廠商的生存空間。
我非常看好 Cloudflare 這種模式,實際上,這種絲滑的體驗才配稱的上是雲,配享太廟,可以心安理得吃高科技行業的高毛利。傳統的 IDC 2.0 也在不斷進步,租賃機櫃、裸金屬伺服器的體驗也並不遜色傳統公有雲(無非是伺服器從兩分鐘到位變成幾個小時到位)。而無法提供更多技術附加值,產品不可替代性的公有雲廠商,生存空間會越來越小 —— 最終回退到傳統 IDC / IaaS 業務中去 。