跳到主要内容

Serverless 与边缘计算

问题

什么是 Serverless?边缘计算在前端场景中有什么应用?

答案

Serverless 概念

Serverless 并非"无服务器",而是开发者不需要关心服务器的运维。云平台自动管理底层基础设施,开发者只需编写业务逻辑。

Serverless 的核心特点

特性说明
按需执行有请求才运行,空闲不计费
自动扩缩流量高峰自动扩容,低谷自动缩容
无状态每次执行是独立的,不保留内存状态
冷启动首次调用有延迟(100ms ~ 数秒)
执行时限通常有最大执行时间限制(5s ~ 15min)

FaaS 函数即服务

api/hello.ts — Vercel Serverless Function
import type { VercelRequest, VercelResponse } from '@vercel/node';

export default function handler(req: VercelRequest, res: VercelResponse) {
const { name } = req.query;
res.status(200).json({ message: `Hello ${name || 'World'}!` });
}
functions/hello.ts — Cloudflare Workers
export default {
async fetch(request: Request): Promise<Response> {
const url = new URL(request.url);
const name = url.searchParams.get('name') || 'World';
return new Response(JSON.stringify({ message: `Hello ${name}!` }), {
headers: { 'Content-Type': 'application/json' },
});
},
};

边缘计算(Edge Computing)

边缘计算是将代码部署到离用户最近的 CDN 节点执行,响应延迟极低(通常 < 50ms)。

平台产品运行时冷启动
VercelEdge FunctionsV8 Isolates~0ms
CloudflareWorkersV8 Isolates~0ms
AWSLambda@EdgeNode.js100ms+
NetlifyEdge FunctionsDeno~0ms

前端常见 Serverless 场景

middleware.ts — Next.js Edge Middleware
import { NextRequest, NextResponse } from 'next/server';

export function middleware(request: NextRequest) {
// 1. 地理位置重定向
const country = request.geo?.country || 'US';
if (country === 'CN') {
return NextResponse.redirect(new URL('/zh', request.url));
}

// 2. A/B 测试
const bucket = Math.random() < 0.5 ? 'a' : 'b';
const response = NextResponse.next();
response.cookies.set('ab-test', bucket);

// 3. 认证检查
const token = request.cookies.get('token');
if (!token && request.nextUrl.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/login', request.url));
}

return response;
}

export const config = {
matcher: ['/((?!_next/static|favicon.ico).*)'],
};

冷启动优化

冷启动

冷启动是 Serverless 最大的性能瓶颈,以下是优化方法:

策略说明
减小包体积精简依赖,只打包必要代码
预热(Provisioned)保持一定数量的热实例
选择 Edge RuntimeV8 Isolates 冷启动接近 0ms
避免大型依赖SDK 选择轻量版本
连接池复用数据库连接放在函数外部

常见面试问题

Q1: Serverless 适合什么场景?不适合什么?

答案

适合不适合
API 接口长时间运行的任务
SSR/SSGWebSocket 长连接
定时任务需要大量本地状态
图片处理高性能计算
Webhook需要持久化内存的服务

Q2: Edge Function 和普通 Serverless Function 的区别?

答案

  • 普通 Serverless:部署在特定区域(如 us-east-1),完整 Node.js 运行时,冷启动有延迟
  • Edge Function:部署在全球 CDN 节点,V8 Isolates 运行时,冷启动接近 0ms,但 API 受限(不支持完整 Node.js API)

Q3: 如何处理 Serverless 中的数据库连接?

答案

传统连接池在 Serverless 中会导致连接数暴涨。解决方案:

  1. 使用连接池代理(如 PgBouncer、Prisma Accelerate)
  2. 使用 HTTP 数据库(如 Neon、PlanetScale、Turso)
  3. 在函数外部初始化连接(Lambda 容器复用时可复用连接)

Q4: Vercel、Netlify、Cloudflare Workers 怎么选?

答案

维度VercelNetlifyCloudflare Workers
框架亲和Next.js 最佳框架无关框架无关
边缘运行时✅(全球最快)
免费额度慷慨慷慨非常慷慨
数据库生态Vercel KV/Postgres无内置D1/KV/R2
适用场景全栈 Next.js静态站 + FunctionsAPI 密集型

Q5: 前端工程师需要关注 Serverless 吗?

答案

非常需要。现代前端框架(Next.js、Nuxt、Remix)都深度依赖 Serverless:

  • SSR 运行在 Serverless Function 上
  • Edge Middleware 用于路由拦截、A/B 测试
  • API Routes 让前端可以写轻量后端逻辑
  • ISR(增量静态再生) 依赖 Serverless 触发重新构建

相关链接