返回博客
1 分钟阅读

用 Cloudflare 构建现代全栈应用:从边缘到数据库

深入解析如何用 Cloudflare Workers、D1、KV、R2 等服务构建一个完整的全栈应用,以及为什么边缘计算是独立开发者的最佳选择。

Cloudflare 全栈开发 边缘计算 架构

当我决定构建「搞定厨房」这个全球美食百科应用时,面临一个关键的架构选择:传统云服务器,还是边缘计算?

最终我选择了 Cloudflare 全家桶,这个决定至今没有让我后悔。

为什么是 Cloudflare?

传统的 Web 应用架构通常是这样的:一台 VPS 放在某个机房,全球用户都连接到这个单点。当你的用户分布在不同大洲时,延迟就成了无法回避的问题。

Cloudflare Workers 的哲学完全不同——你的代码运行在全球 300+ 个数据中心,离用户最近的节点自动处理请求。这意味着无论用户在东京、纽约还是圣保罗,他们获得的响应速度几乎相同。

对于一个「一人公司」来说,这种架构的吸引力是巨大的:

  • 零运维:不需要管理服务器、更新系统、配置防火墙
  • 自动扩缩:从 0 到百万请求无缝处理
  • 慷慨的免费额度:每天 10 万次免费请求,足够大多数项目起步
  • 全球分布:天然适合面向国际用户的产品

技术栈拆解

Workers:计算层

Workers 是整个架构的核心。它不是一个简单的 Serverless 函数,而是一个运行在 V8 引擎上的轻量运行时。

export default {
  async fetch(request, env) {
    const url = new URL(request.url);

    // API 路由
    if (url.pathname.startsWith('/api/')) {
      return handleAPI(request, env);
    }

    // 静态资源回退
    return env.ASSETS.fetch(request);
  },
};

冷启动时间通常在 0-5ms 之间,这比传统 Lambda 函数快了一个数量级。

D1:数据库层

D1 是 Cloudflare 基于 SQLite 的分布式数据库。在「搞定厨房」项目中,我用它存储了 1000+ 道菜品数据:

CREATE TABLE recipes (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  cuisine TEXT NOT NULL,
  difficulty INTEGER DEFAULT 1,
  prep_time INTEGER,
  ingredients TEXT, -- JSON
  steps TEXT,       -- JSON
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

D1 的优势在于 SQL 的表达力。对于复杂查询(多条件筛选、全文搜索、聚合统计),SQL 比 KV 存储灵活得多。

KV:缓存层

Workers KV 适合高读低写的数据。我用它来缓存 API 响应,避免每次都查询 D1:

async function getRecipe(id, env) {
  // 先查缓存
  const cached = await env.CACHE.get(`recipe:${id}`, 'json');
  if (cached) return cached;

  // 缓存未命中,查 D1
  const result = await env.DB
    .prepare('SELECT * FROM recipes WHERE id = ?')
    .bind(id)
    .first();

  // 写入缓存,1小时过期
  await env.CACHE.put(`recipe:${id}`, JSON.stringify(result), {
    expirationTtl: 3600,
  });

  return result;
}

R2:存储层

菜品图片存储在 R2 中。R2 兼容 S3 API,零出口流量费用——这对图片密集的应用来说是巨大的成本优势。

成本分析

运行一个中等流量的全栈应用,月成本是多少?

服务免费额度超出后价格
Workers10万次/天$0.30/百万次
D1500万行读/天$0.001/百万行
KV10万次读/天$0.50/百万次
R210GB存储$0.015/GB/月

对于一个日活几千的应用,基本可以完全运行在免费额度内。这是传统云服务无法提供的。

适合什么样的项目?

Cloudflare 全栈方案特别适合:

  1. 内容驱动的网站:博客、文档、百科类
  2. API 服务:RESTful API、GraphQL 网关
  3. 出海项目:天然全球分布,无需考虑 CDN 配置
  4. 独立开发者项目:低成本、低运维、高可靠

不太适合的场景:需要长时间运行的任务(Workers 有 CPU 时间限制)、需要复杂关系型数据库特性的项目(D1 基于 SQLite,功能有限)。

结语

边缘计算不是未来,它已经是现在。对于独立开发者来说,Cloudflare 提供了一个从代码到上线只需几分钟的工作流,让你把时间花在真正重要的事情上——构建产品本身。