Serverless(无服务器)架构

作者: admin | 发布时间: 2026-02-09 20:04:15 | ★ 0


Serverless(无服务器)架构是一种云计算执行模型,云服务商动态管理机器资源的分配。开发者只需关注代码编写,无需关心底层服务器运维、扩缩容、高可用等问题。

Serverless 核心概念

事件驱动:代码由事件(如 HTTP 请求、消息队列、定时任务)触发执行

按需计费:只在代码运行时收费,空闲时不产生费用

自动扩缩容:根据负载自动从 0 扩展到 N 个实例

无状态:函数实例每次执行都是独立的,持久化数据需存外部服务

在 Cloudflare 实现 Serverless

Cloudflare 通过 Workers​ 和 Workers KV​ 提供全球边缘网络的无服务器能力。

1. 核心服务

Cloudflare Workers:基于 V8 隔离的轻量级 JavaScript/WebAssembly 运行时,在全球 300+ 边缘节点运行

Workers KV:全球分布式键值存储,为 Worker 提供低延迟数据持久化

Durable Objects:提供强一致性的状态存储,适用于实时协作、会话等场景

R2 Storage:兼容 S3 的对象存储,无出口流量费用

2. 快速开始示例

创建简单的 HTTP Worker

// 基础 HTTP 响应 Worker

export default {

async fetch(request, env, ctx) {

const url = new URL(request.url);



// 根据路径返回不同响应

if (url.pathname === '/api/hello') {

return new Response(JSON.stringify({

message: 'Hello from Cloudflare Worker!',

timestamp: new Date().toISOString(),

region: request.cf?.region || 'unknown'

}), {

headers: { 'Content-Type': 'application/json' }

});

}



// 默认返回

return new Response('Welcome to Cloudflare Workers!', {

headers: { 'Content-Type': 'text/plain' }

});

}

};

使用 Workers KV 存储数据

export default {

async fetch(request, env) {

const url = new URL(request.url);



if (url.pathname === '/api/visits') {

// 从 KV 读取访问次数

const visits = await env.MY_KV_NAMESPACE.get('visits') || 0;

const newVisits = parseInt(visits) + 1;



// 存储新值

await env.MY_KV_NAMESPACE.put('visits', newVisits.toString());



return new Response(`This page has been visited ${newVisits} times!`);

}



return new Response('Not Found', { status: 404 });

}

};

3. 部署配置

wrangler.toml 配置文件

name = "my-serverless-app"

compatibility_date = "2024-01-18"



# KV 命名空间绑定

[[kv_namespaces]]

binding = "MY_KV_NAMESPACE"

id = "your-kv-namespace-id"



# 环境变量

[vars]

API_KEY = "your-secret-key"



# 生产环境配置

[env.production]

name = "my-app-production"

4. 高级功能示例

使用 Durable Objects 实现计数器

// durable-object.js

export class Counter {

constructor(state, env) {

this.state = state;

// 从持久化存储初始化

this.state.blockConcurrencyWhile(async () => {

this.value = (await this.state.storage.get('value')) || 0;

});

}



async fetch(request) {

const url = new URL(request.url);



if (url.pathname === '/increment') {

this.value++;

await this.state.storage.put('value', this.value);

}



return new Response(this.value.toString());

}

}



// worker.js

export default {

async fetch(request, env) {

const url = new URL(request.url);



if (url.pathname === '/counter') {

// 获取或创建 Durable Object

const id = env.COUNTER.idFromName('global-counter');

const counter = env.COUNTER.get(id);

return counter.fetch(request);

}



return new Response('Not Found', { status: 404 });

}

};

5. 完整项目结构

my-worker-project/

├── src/

│ ├── index.js # 主 Worker 文件

│ └── utils.js # 工具函数

├── wrangler.toml # 配置文件

├── package.json

└── README.md

6. 开发与部署命令

# 安装 Wrangler CLI

npm install -g wrangler



# 登录 Cloudflare

wrangler login



# 本地开发

wrangler dev



# 部署到生产环境

wrangler deploy



# 查看日志

wrangler tail

7. 优势与适用场景

Cloudflare Workers 优势:

⚡ 极低延迟:代码在全球边缘节点运行,靠近用户

💰 成本效益:免费套餐慷慨,按请求次数计费

🌍 全球分布:自动路由到最近节点

🔒 安全性:默认 HTTPS,内置 DDoS 防护

典型应用场景:

API 网关和路由

A/B 测试和特征开关

图片处理和优化

JAMstack 网站后端

实时数据处理

Bot 防护和验证

8. 注意事项

冷启动时间:通常 <5ms,但复杂应用可能更长

执行时长限制:免费版 10ms CPU 时间,付费版 30ms

内存限制:128MB RAM

全局变量:避免在全局作用域存储状态

Cloudflare 的 Serverless 方案特别适合需要低延迟、全球分发的应用场景。相比传统云函数,边缘计算架构能提供更好的用户体验。