藉助 D1 GA 版以及 Hyperdrive、Queues 和 Workers Analytics Engine 更新簡化現狀
2024-04-01
任何完整堆疊應用程式的核心部分都是儲存和持久化資料!我們在萬分期待中迎來了新的活動週,並以宣佈一系列公告拉開序幕,包括讓 D1(Cloudflare 的 SQL 資料庫)和 Hyperdrive(我們的資料庫加速服務)正式上市,可幫助開發人員基於 Cloudflare 構建具狀態應用程式 ...
繼續閱讀 »
\n \n
今天是愚人節,儘管我們也希望像其他人一樣玩個痛快,但更希望利用這一天發佈嚴肅的公告。實際上,截至今天,有 200 多萬開發人員在 Cloudflare 的平台上進行構建,這可不是開玩笑!
在 Developer Week 活動週初始之際,我們針對以下三種產品撥動了重要的「生產就緒」開關:D1,這是我們的無伺服器 SQL 資料庫;Hyperdrive,可讓您的_現有_資料庫感覺是分佈式的(並且更快速!);Workers Analytics Engine,這是我們的時間序列資料庫。
一段時間以來,我們始終致力於讓開發人員將整個堆疊移轉至 Cloudflare,但基於 Cloudflare 構建的應用程式可能是什麼樣子呢?
該圖表本身看起來與您已經熟悉的工具應該沒有太大的差異:您需要一個資料庫用於核心使用者資料;需要一個物件儲存體用於資產和使用者內容;可能需要一個佇列用於背景工作,如電子郵件或上傳處理;需要一個快速鍵值儲存,用於執行階段設定;甚至可能需要一個時間序列資料庫,用於彙整使用者事件和/或效能資料。這是我們使用 AI 之前的情況,而現在,在搜尋、建議和/或影像分析工作(至少!)中,AI 越來越成為很多應用程式的核心部分。
\n而且,想都不用想,此架構是在全球執行的,而這意味著可擴展、可靠和快速,並且全部現成可用。
\n您的核心資料庫是組成基礎架構的一個最關鍵部分。它需要超級可靠;它不能遺失資料;它必須能夠擴展。因此,在過去的一年中,我們專注於將這些部分部署到位,以確保 D1 生產就緒。現在,我們無比興奮地宣佈,我們的全球無伺服器 SQL 資料庫 D1 正式上市了。
\nD1 的 GA 版實現了一些最受歡迎的功能,包括:
支援 10GB 的資料庫,且每個帳戶可擁有 50,000 個資料庫;
全新的資料匯出功能;以及
增強的查詢偵錯功能(我們稱之為「D1 Insights」),它可讓您瞭解哪些查詢耗費最多時間和成本,或者哪些查詢完全低效……
……從而讓開發人員能夠使用 D1 構建生產就緒應用程式,來滿足所有關聯式 SQL 需求。重要的是,在一個「免費方案」或「業餘愛好方案」概念似乎面臨風險的時代,我們並不打算移除 D1 的免費方案,也不會減少每月 5 美元的 Workers Paid 方案中所包含的 250 億列讀取:
方案
Plan | Rows Read | Rows Written | Storage |
Workers Paid | First 25 billion / month included | First 50 million / month included | First 5 GB included + $0.75 / GB-mo |
Workers Free | 5 million / day | 100,000 / day\t | 5 GB (total) |
讀取的列數
寫入的列數
儲存
\nexport default {\n async fetch(request: Request, env: Env) {\n const {pathname} = new URL(request.url);\n let resp = null;\n let session = env.DB.withSession(token); // An optional commit token or mode\n\n // Handle requests within the session.\n if (pathname === "/api/orders/list") {\n // This statement is a read query, so it will work against any\n // replica that has a commit equal or later than `token`.\n const { results } = await session.prepare("SELECT * FROM Orders");\n resp = Response.json(results);\n } else if (pathname === "/api/orders/add") {\n order = await request.json();\n\n // This statement is a write query, so D1 will send the query to\n // the primary, which always has the latest commit token.\n await session.prepare("INSERT INTO Orders VALUES (?, ?, ?)")\n .bind(order.orderName, order.customer, order.value);\n .run();\n\n // In order for the application to be correct, this SELECT\n // statement must see the results of the INSERT statement above.\n //\n // D1's new Session API keeps track of commit tokens for queries\n // within the session and will ensure that we won't execute this\n // query until whatever replica we're using has seen the results\n // of the INSERT.\n const { results } = await session.prepare("SELECT COUNT(*) FROM Orders")\n .run();\n resp = Response.json(results);\n }\n\n // Set the token so we can continue the session in another request.\n resp.headers.set("x-d1-token", session.latestCommitToken);\n return resp;\n }\n}
\n Workers Paid
包含前 250 億列/月
+ 超出部分 0.001 美元/百萬列
\n包含前 5000 萬列/月
+ 超出部分 1 美元/百萬列
包含每月前 5GB
\n// Use the popular 'pg' driver? Easy. Hyperdrive just exposes a connection string\n// to your Worker.\nconst client = new Client({ connectionString: env.HYPERDRIVE.connectionString });\nawait client.connect();\n\n// Prefer using an ORM like Drizzle? Use it with Hyperdrive too.\n// https://orm.drizzle.team/docs/get-started-postgresql#node-postgres\nconst client = new Client({ connectionString: env.HYPERDRIVE.connectionString });\nawait client.connect();\nconst db = drizzle(client);
\n + 超出部分 0.75 美元/GB
Workers Free
500 萬列/天
Plan | Price per query | Connection Pooling |
Workers Paid | $0 | $0 |
每天 100,000 列
5GB(總計)
對於那些從一開始就在關注 D1 的使用者來說:正式版與我們在公開測試版中宣布的定價相同
但我們並不會止步於正式上市:我們還為 D1 規劃了一些重要的新功能,包括全球讀取複製、更大的資料庫、更多的 Time Travel 功能(可讓您建立資料庫分支)以及全新的 API(可用於動態查詢和/或從 Worker 內建立新的即時資料庫)。
\n// Pull and acknowledge messages from a Queue using any HTTP client\n$ curl "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/queues/${QUEUE_ID}/messages/pull" -X POST --data '{"visibilityTimeout":10000,"batchSize":100}}' \\\n -H "Authorization: Bearer ${QUEUES_TOKEN}" \\\n -H "Content-Type:application/json"\n\n// Ack the messages you processed successfully; mark others to be retried.\n$ curl "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/queues/${QUEUE_ID}/messages/ack" -X POST --data '{"acks":["lease-id-1", "lease-id-2"],"retries":["lease-id-100"]}' \\\n -H "Authorization: Bearer ${QUEUES_TOKEN}" \\\n -H "Content-Type:application/json"
\n D1 的讀取複製會根據需要自動部署讀取複本,從而讓資料更靠近使用者:並且您不必開發、管理擴展,也不會遇到一致性(複製滯後)問題。讓我們提前一覽 D1 即將推出的 Replication API 是什麼模樣:
\n重要的是,我們將讓開發人員能夠維護基於工作階段的一致性,以便使用者不僅可以看到自己的變更情況,同時仍然受益於複製帶來的效能和延遲改進。
\n// Apply a delay to a message when sending it\nawait env.YOUR_QUEUE.send(msg, { delaySeconds: 3600 })\n\n// Delay a message (or a batch of messages) when marking it for retry\nfor (const msg of batch.messages) {\n\tmsg.retry({delaySeconds: 300})\n}
\n 您可以閱讀我們的深入解讀貼文,進一步瞭解 D1 的讀取複製如何在後台運作,如果您要立即開始在 D1 上進行構建,請前往我們的開發人員文件,建立您的第一個資料庫。
\n在去年 9 月的生日週期間,我們發佈了 Hyperdrive 開放測試版,現在它已正式上市了,換言之,它經過實戰考驗並可用於生產環境了。
如果您尚不瞭解 Hyperdrive 是什麼,那麼請允許我快速介紹一下,這款產品旨在讓您現有的集中式資料庫給人全球化的感覺。我們使用自己的全球網路,可以更快地路由至您的資料庫,確保連線集區準備就緒,並在盡可能靠近使用者的位置快取最經常執行的查詢。
重要的是,Hyperdrive 原生支援最熱門的驅動程式和 ORM(物件關係對應程式)庫,因此您無需重新學習或重新撰寫查詢:
但有關 Hyperdrive 的工作並不會因正式上市而停下來。在接下來的幾個月中,我們將為_另一個_部署最廣泛的資料庫引擎提供支援:MySQL。我們還將透過 Cloudflare Tunnel 和 Magic WAN,支援連線至私人網路(包括雲端 VPC 網路)內的資料庫。除此之外,我們還計劃為無效判定和快取策略提供更多的可設定性,以便您能夠針對效能與資料新鮮度做出更精細的決策。
當我們思考如何為 Hyperdrive 定價時,我們意識到,對它收費似乎不太合適。畢竟,Hyperdrive 不僅具有顯著的效能優勢,而且對連線至傳統的資料庫引擎至關重要。如果沒有 Hyperdrive,每次請求需要 6 次以上往返來連線和查詢資料庫,支付這筆延遲開支是不合理的。
因此,我們很高興地宣佈,對於採用 Workers Paid 方案的任何開發人員,免費提供 Hyperdrive。這不僅包括查詢快取和連線共用,還包括建立多個 Hyperdrive 的能力,這可用於分隔不同的應用程式(生產與暫存)或提供不同的設定(例如,快取與未快取)。
Plan | Data points written | Read queries |
Workers Paid | 10 million included per month
| 1 million included per month
|
Workers Free | 100,000 included per day | 10,000 included per day |
方案
每次查詢的價格
連線共用
Workers Paid
$0
$0
若要開始使用 Hyperdrive,請前往文件,瞭解如何連線現有的資料庫並從 Workers 開始查詢。
\n工作佇列在構建現代、完整堆疊應用程式方面發揮著越來越重要的作用,這也是我們最初推出 Queues 公開測試版時所考慮的因素。此後,我們一直致力於打造數種主要的 Queues 功能,本週我們將推出其中兩種:提取式取用者和全新的訊息傳遞控制。
任何 HTTP 語音用戶端現在都可從佇列中提取訊息:呼叫佇列上的新 /pull 端點來請求一批訊息,並在您成功處理它們時呼叫 /ack 端點來確認每條訊息(或一批訊息)
提取式取用者可在任何位置執行,讓您能夠同時執行佇列取用者以及現有的傳統雲端基礎架構。Cloudflare 內部的團隊很早就採用了這種方式,其中一個使用案例是從我們 310 多個資料中心將裝置遙測寫入至佇列,並在執行於 Kubernetes 之上的部分後台基礎架構內取用。重要的是,我們的全球分散式佇列基礎架構意味著訊息保留在佇列內,直到取用者準備好處理它們**。**
Queues 現在也支援延遲訊息,這同時涵蓋傳送至佇列和標記訊息進行重試。這可能對未來的佇列工作很有用,如果上游 API 或基礎架構的限速要求您調整處理訊息的速度,則也可用於套用輪詢機制。
在接下來的幾個月,我們也會大幅提高每個佇列的輸送量,來推動 Queues 正式上市。對我們而言,Queues 的_高度_可靠性極為重要:如果郵件遺失或被捨棄,則意味著使用者不會收到訂單確認電子郵件、密碼重設通知及/或處理的上傳數,每種情況都會影響使用者,且很難恢復。
\nWorkers Analytics Engine 透過一個內建 API 從 Workers 寫入資料點,並透過一個 SQL API 查詢該資料,從而提供大規模的無限基數分析。
Workers Analytics Engine 由基於 ClickHouse 的系統提供支援,我們 Cloudflare 多年來也依賴於該系統。我們用它來觀察自身服務的運作狀況,擷取產品使用資料進行計費,並回答有關具體客戶使用模式的問題。幾乎每次向 Cloudflare 的網路發出請求時,都會向此系統寫入至少一個資料點。Workers Analytics Engine 讓您使用相同的基礎架構構建自己的自訂分析,同時,我們會幫您管理最困難的部分。
自推出測試版以來,開發人員開始依賴 Workers Analytics Engine 來處理這些使用案例以及更多其他使用案例,從大型企業到開放原始碼專案(如 Counterscale)。多年來,Workers Analytics Engine 一直以生產規模運作,處理任務關鍵型工作負載,但直到今天,我們從未分享過任何有關定價的資訊。
我們的 Workers Analytics Engine 定價非常簡單,基於以下兩個指標:
寫入的資料點數: 每次在 Worker 中呼叫 writeDataPoint() 時,都會算作寫入了一個資料點。每個資料點的成本是相同的,與其他平台不同,新增維度或基數不會帶來額外成本,並且無需預測壓縮資料點的可能大小和成本。
讀取的查詢數:每次發佈到 Workers Analytics Engine SQL API,都會算作讀取了一次查詢。每次查詢的成本是相同的,與其他平台不同,查詢複雜性不會帶來額外成本,並且無需對每次查詢讀取的資料列數進行推理。
Workers Free 方案和 Workers Paid 方案都包含寫入資料點數和讀取查詢數的配額,額外使用量的定價如下:
方案
寫入的資料點數
讀取的查詢數
Workers Paid
每月包含 1,000 萬個
+ 每增加 100 萬個 0.25 美元
每月包含 100 萬個
+ 每增加 100 萬個 1.00 美元
Workers Free
每天包含 100,000 個
每天包含 10,000 個
採用此定價,您可以透過計算在 Worker 中呼叫函數的次數以及向 HTTP API 端點發出請求的次數,來回答「Workers Analytics Engine 將花費多少錢?」這一問題。這是用紙筆就可計算出來的簡單數學題,甚至用不上試算表。
此定價將在幾個月後向所有人提供。在此之前,Workers Analytics Engine 會繼續免費提供。您可以立即開始從 Worker 寫入資料點——只需幾分鐘的時間和不到 10 行程式碼,即可開始擷取資料。我們很樂意聽取您的想法!
\n明天是 Developer Week 的第二天,敬請期待我們為您準備的內容。如果您有問題或想要展示已經構建完成的好東西,請加入我們的開發人員 Discord。
"],"published_at":[0,"2024-04-01T14:00:06.000+01:00"],"updated_at":[0,"2024-10-10T00:22:05.202Z"],"feature_image":[0,"https://cf-assets.www.cloudflare.com/zkvhlag99gkb/CqPYh1lx30p4YeSmvMQYE/9b51f2dad6f6bf67eef60aa39e656c9e/making-full-stack-easier-d1-ga-hyperdrive-queues.png"],"tags":[1,[[0,{"id":[0,"2xCnBweKwOI3VXdYsGVbMe"],"name":[0,"Developer Week"],"slug":[0,"developer-week"]}],[0,{"id":[0,"4HIPcb68qM0e26fIxyfzwQ"],"name":[0,"開發人員"],"slug":[0,"developers"]}],[0,{"id":[0,"3JAY3z7p7An94s6ScuSQPf"],"name":[0,"開發人員平臺"],"slug":[0,"developer-platform"]}],[0,{"id":[0,"UKt2GEAUQsbObsNqZ3Pr7"],"name":[0,"D1"],"slug":[0,"d1"]}],[0,{"id":[0,"5EP9xxxSTGvFx3RIxjqIgP"],"name":[0,"Hyperdrive"],"slug":[0,"hyperdrive"]}],[0,{"id":[0,"5LsABrpgAC1MKuVeegqTvS"],"name":[0,"Queues"],"slug":[0,"queues"]}],[0,{"id":[0,"6hbkItfupogJP3aRDAq6v8"],"name":[0,"Cloudflare Workers"],"slug":[0,"workers"]}]]],"relatedTags":[0],"authors":[1,[[0,{"name":[0,"Rita Kozlov"],"slug":[0,"rita"],"bio":[0,null],"profile_image":[0,"https://cf-assets.www.cloudflare.com/zkvhlag99gkb/56u5zfWi9255rUocOgksl0/5eb2eb16e26893d259f7b00af85e8417/rita.png"],"location":[0,null],"website":[0,null],"twitter":[0,"@ritakozlov_"],"facebook":[0,null]}],[0,{"name":[0,"Matt Silverlock"],"slug":[0,"silverlock"],"bio":[0,"Director of Product at Cloudflare."],"profile_image":[0,"https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7xP5qePZD9eyVtwIesXYxh/e714aaa573161ec9eb48d59bd1aa6225/silverlock.jpeg"],"location":[0,null],"website":[0,null],"twitter":[0,"@elithrar"],"facebook":[0,null]}]]],"meta_description":[0,null],"primary_author":[0,{}],"localeList":[0,{"name":[0,"Making state easy with D1 GA, Hyperdrive, Queues and Workers Analytics Engine updates Config"],"enUS":[0,"English for Locale"],"zhCN":[0,"Translated for Locale"],"zhHansCN":[0,"No Page for Locale"],"zhTW":[0,"Translated for Locale"],"frFR":[0,"Translated for Locale"],"deDE":[0,"Translated for Locale"],"itIT":[0,"No Page for Locale"],"jaJP":[0,"Translated for Locale"],"koKR":[0,"Translated for Locale"],"ptBR":[0,"No Page for Locale"],"esLA":[0,"No Page for Locale"],"esES":[0,"Translated for Locale"],"enAU":[0,"No Page for Locale"],"enCA":[0,"No Page for Locale"],"enIN":[0,"No Page for Locale"],"enGB":[0,"No Page for Locale"],"idID":[0,"No Page for Locale"],"ruRU":[0,"No Page for Locale"],"svSE":[0,"No Page for Locale"],"viVN":[0,"No Page for Locale"],"plPL":[0,"No Page for Locale"],"arAR":[0,"No Page for Locale"],"nlNL":[0,"No Page for Locale"],"thTH":[0,"No Page for Locale"],"trTR":[0,"No Page for Locale"],"heIL":[0,"No Page for Locale"],"lvLV":[0,"No Page for Locale"],"etEE":[0,"No Page for Locale"],"ltLT":[0,"No Page for Locale"]}],"url":[0,"https://blog.cloudflare.com/making-full-stack-easier-d1-ga-hyperdrive-queues"],"metadata":[0,{"title":[0,"藉助 D1 GA 版以及 Hyperdrive、Queues 和 Workers Analytics Engine 更新簡化現狀"],"description":[0,null],"imgPreview":[0,"https://cf-assets.www.cloudflare.com/zkvhlag99gkb/62eO5fkIdIseKYyxkDZRj4/5c133291b38eaa9d06d8dba3ac46e4c3/making-full-stack-easier-d1-ga-hyperdrive-queues-3wq96u.png"]}]}],"locale":[0,"zh-tw"],"translations":[0,{"posts.by":[0,"作者:"],"footer.gdpr":[0,"GDPR"],"lang_blurb1":[0,"本貼文還提供以下語言版本:{lang1}。"],"lang_blurb2":[0,"本貼文還提供以下語言版本:{lang1} 和{lang2}。"],"lang_blurb3":[0,"本貼文還提供以下語言版本:{lang1},{lang2} 和{lang3}。"],"footer.press":[0,"新聞"],"header.title":[0,"Cloudflare 部落格"],"search.clear":[0,"清除"],"search.filter":[0,"篩選"],"search.source":[0,"來源"],"footer.careers":[0,"人才招募"],"footer.company":[0,"公司"],"footer.support":[0,"支援"],"footer.the_net":[0,"theNet"],"search.filters":[0,"篩選器"],"footer.our_team":[0,"我們的團隊"],"footer.webinars":[0,"網路研討會"],"page.more_posts":[0,"更多貼文"],"posts.time_read":[0,"閱讀時間:{time} 分鐘"],"search.language":[0,"語言"],"footer.community":[0,"社群"],"footer.resources":[0,"資源"],"footer.solutions":[0,"解決方案"],"footer.trademark":[0,"商標"],"header.subscribe":[0,"訂閱"],"footer.compliance":[0,"合規性"],"footer.free_plans":[0,"免費方案"],"footer.impact_ESG":[0,"影響力/ESG"],"posts.follow_on_X":[0,"在 X 上進行關注"],"footer.help_center":[0,"幫助中心"],"footer.network_map":[0,"網路分佈圖"],"header.please_wait":[0,"請稍候"],"page.related_posts":[0,"相關貼文"],"search.result_stat":[0,"針對 {search_keyword} 的第 {search_range} 個搜尋結果(共 {search_total} 個結果)"],"footer.case_studies":[0,"案例研究"],"footer.connect_2024":[0,"Connect 2024"],"footer.terms_of_use":[0,"服務條款"],"footer.white_papers":[0,"白皮書"],"footer.cloudflare_tv":[0,"Cloudflare TV"],"footer.community_hub":[0,"社群中心"],"footer.compare_plans":[0,"比較各項方案"],"footer.contact_sales":[0,"連絡銷售團隊"],"header.contact_sales":[0,"連絡銷售團隊"],"header.email_address":[0,"電子郵件地址"],"page.error.not_found":[0,"找不到頁面"],"footer.developer_docs":[0,"開發人員文件"],"footer.privacy_policy":[0,"隱私權原則"],"footer.request_a_demo":[0,"請求示範"],"page.continue_reading":[0,"繼續閱讀"],"footer.analysts_report":[0,"分析報告"],"footer.for_enterprises":[0,"企業適用"],"footer.getting_started":[0,"開始使用"],"footer.learning_center":[0,"學習中心"],"footer.project_galileo":[0,"Galileo 專案"],"pagination.newer_posts":[0,"較新貼文"],"pagination.older_posts":[0,"較舊貼文"],"posts.social_buttons.x":[0,"在 X 上進行討論"],"search.icon_aria_label":[0,"搜尋"],"search.source_location":[0,"來源/地點"],"footer.about_cloudflare":[0,"關於 Cloudflare"],"footer.athenian_project":[0,"Athenian 專案"],"footer.become_a_partner":[0,"成為合作夥伴"],"footer.cloudflare_radar":[0,"Cloudflare Radar"],"footer.network_services":[0,"網路服務"],"footer.trust_and_safety":[0,"信任和安全"],"header.get_started_free":[0,"免費開始使用"],"page.search.placeholder":[0,"搜尋 Cloudflare"],"footer.cloudflare_status":[0,"Cloudflare 狀態"],"footer.cookie_preference":[0,"Cookie 喜好設定"],"header.valid_email_error":[0,"必須是有效電子郵件。"],"search.result_stat_empty":[0,"第 {search_range} 筆搜尋結果(共 {search_total} 筆)"],"footer.connectivity_cloud":[0,"全球連通雲"],"footer.developer_services":[0,"開發人員服務"],"footer.investor_relations":[0,"投資人關係"],"page.not_found.error_code":[0,"錯誤代碼:404"],"search.autocomplete_title":[0,"插入查詢。按下 Enter 鍵即可傳送"],"footer.logos_and_press_kit":[0,"標誌與新聞資料包"],"footer.application_services":[0,"應用程式服務"],"footer.get_a_recommendation":[0,"取得建議"],"posts.social_buttons.reddit":[0,"在 Reddit 上進行討論"],"footer.sse_and_sase_services":[0,"SSE 和 SASE 服務"],"page.not_found.outdated_link":[0,"您可能使用了過時的連結,或者可能輸入了錯誤的位址。"],"footer.report_security_issues":[0,"報告網路安全問題"],"page.error.error_message_page":[0,"抱歉,我們找不到您想要的頁面。"],"header.subscribe_notifications":[0,"訂閱以接收新文章的通知:"],"footer.cloudflare_for_campaigns":[0,"Cloudflare for Campaigns"],"header.subscription_confimation":[0,"訂閱已確認。感謝訂閱!"],"posts.social_buttons.hackernews":[0,"在 Hacker News 上進行討論"],"footer.diversity_equity_inclusion":[0,"多樣性、公平性和包容性"],"footer.critical_infrastructure_defense_project":[0,"關鍵基礎架構防禦專案"]}]}" ssr="" client="load" opts="{"name":"PostCard","value":true}" await-children="">2024-04-01
任何完整堆疊應用程式的核心部分都是儲存和持久化資料!我們在萬分期待中迎來了新的活動週,並以宣佈一系列公告拉開序幕,包括讓 D1(Cloudflare 的 SQL 資料庫)和 Hyperdrive(我們的資料庫加速服務)正式上市,可幫助開發人員基於 Cloudflare 構建具狀態應用程式 ...
繼續閱讀 »