引言

Serverless已从简单的函数计算演进为完整的云原生范式。2025年的Serverless 2.0支持容器、状态和长运行任务,正在重塑应用架构。

一、Serverless 2.0特征

1.1 容器化支持

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 容器Serverless部署
apiVersion: apps/v1
kind: Deployment
metadata:
  name: serverless-app
spec:
  replicas: 0  # 从0开始
  template:
    spec:
      containers:
      - name: app
        image: registry.example.com/app:v1
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
---
# 自动缩放配置
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: serverless-app
spec:
  scaleTargetRef:
    name: serverless-app
  minReplicaCount: 0
  maxReplicaCount: 10
  triggers:
  - type: kafka
    metadata:
      bootstrapServers: kafka.kafka.svc:9092
      consumerGroup: my-group
      topic: events

1.2 状态管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Serverless状态管理

// 1. 外部状态存储
import Redis from 'ioredis';

class ServerlessStateManager {
  constructor(redisConfig) {
    this.redis = new Redis(redisConfig);
  }

  async saveState(key, state) {
    await this.redis.setex(
      `state:${key}`,
      3600,  // 1小时过期
      JSON.stringify(state)
    );
  }

  async getState(key) {
    const data = await this.redis.get(`state:${key}`);
    return data ? JSON.parse(data) : null;
  }
}

// 2. 数据库连接池
import { Pool } from 'pg';

class DatabaseConnection {
  constructor() {
    this.pool = new Pool({
      connectionString: process.env.DATABASE_URL,
      max: 20,  // 连接池大小
      idleTimeoutMillis: 30000,
      connectionTimeoutMillis: 2000,
    });
  }

  async query(sql, params) {
    const client = await this.pool.connect();
    try {
      const result = await client.query(sql, params);
      return result.rows;
    } finally {
      client.release();
    }
  }
}

二、部署策略

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Serverless部署框架

// AWS Lambda
import { APIGatewayProxyEvent, Context } from 'aws-lambda';

export const handler = async (
  event: APIGatewayProxyEvent,
  context: Context
) => {
  // 处理逻辑
  return {
    statusCode: 200,
    body: JSON.stringify({ message: 'Hello Serverless 2.0!' })
  };
};

// Cloudflare Workers
export default {
  async fetch(request, env, ctx) {
    return new Response('Hello from Edge!');
  }
};

// Vercel Edge Functions
export const config = {
  runtime: 'edge',
};

export default function handler(request) {
  return new Response('Hello from Vercel Edge!');
}

三、最佳实践

3.1 冷启动优化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 冷启动优化技巧

// 1. 保持运行时精简
// 只引入必要的依赖

// 2. 使用轻量级运行时
// Node.js -> Bun
// Python -> PyPy

// 3. 预热函数
// 定期ping保持热状态

class WarmupStrategy {
  async warmup(functionUrls) {
    const warmupInterval = 5 * 60 * 1000;  // 5分钟

    setInterval(async () => {
      for (const url of functionUrls) {
        fetch(url, { method: 'HEAD' }).catch(() => {});
      }
    }, warmupInterval);
  }
}

总结

Serverless 2.0特点:

  1. 容器支持
  2. 状态管理
  3. 长运行任务
  4. 边缘部署

相关工具推荐