【架构实战】Serverless实践:函数计算的适用边界与选型

一、那次"看似美好"的Serverless改造

2021年,Serverless概念大火。

老板在某次技术分享会上被"按调用付费 "、"零运维 "、"自动扩缩容 "这些词打动,回来就拍板:"把我们的图片处理服务迁到Serverless,降本增效!"

我们调研了2周,兴致勃勃地把图片处理(缩略图、水印、压缩)迁到了阿里云函数计算(FC)

结果

  • 冷启动延迟 :第一次调用2-5秒,用户疯狂投诉
  • 成本不降反升 :图片处理是CPU密集型任务,按调用付费反而更贵
  • 调试困难:本地无法复现,函数日志分散
  • 复杂度增加:函数间通信、状态管理、依赖管理

半年后,我们又迁回了传统架构。

这次经历让我意识到Serverless不是银弹,它有严格的适用边界

今天就分享我3年Serverless实践的反思 ------什么时候用、什么时候不要用、怎么用好Serverless


二、Serverless的本质:托管的极致

2.1 什么是Serverless

狭义Serverless = FaaS(Function as a Service)+ BaaS(Backend as a Service)

FaaS:函数计算(AWS Lambda、阿里云FC、Azure Functions)

  • 事件驱动的函数执行
  • 按调用次数和执行时间付费
  • 自动扩缩容

BaaS:后端即服务(数据库、对象存储、消息队列)

  • 无需管理服务器
  • 按使用量付费

广义Serverless"无需管理服务器"的云服务

2.2 Serverless的核心特征

复制代码
1. 无服务器管理
   └── 不用关心服务器运维

2. 弹性伸缩
   └── 自动扩缩容

3. 按使用付费
   └── 调用才计费

4. 事件驱动
   └── 触发器机制

5. 有限运行时长
   └── 通常15分钟以内

6. 状态外置
   └── 状态存储在外部服务

2.3 Serverless vs 传统架构

维度 传统架构 Serverless
服务器管理 自己管理 云厂商管理
扩缩容 手动/半自动 自动
计费 按时间(包年包月) 按使用量
冷启动 有(首次调用延迟)
运行时长 无限制 有限制
状态 本地状态 外置状态
调试 容易 困难
适用 长时运行 短时事件

三、Serverless的适用场景

3.1 真正适合Serverless的场景

场景1:事件触发的短任务

复制代码
【Web后端API】
- 请求处理时间:100-500ms
- 调用频率:波动大
- 无状态
- 业务逻辑简单

适合:用API Gateway + Lambda
javascript 复制代码
// AWS Lambda示例:用户注册
exports.handler = async (event) => {
    const { username, email } = JSON.parse(event.body);
    
    // 验证
    if (!email.includes('@')) {
        return { statusCode: 400, body: 'Invalid email' };
    }
    
    // 写入数据库
    const user = await db.users.create({ username, email });
    
    // 返回结果
    return {
        statusCode: 201,
        body: JSON.stringify(user)
    };
};

场景2:数据处理流水线

复制代码
【图片处理】
- 触发:OSS上传图片
- 处理:生成缩略图
- 输出:保存到OSS
- 时长:1-3秒
- 调用频率:不确定

适合:OSS触发器 + 函数计算

场景3:定时任务

复制代码
【每日数据统计】
- 触发:定时器(cron)
- 处理:聚合数据
- 输出:写入数据库
- 时长:5-10分钟
- 每天一次

适合:定时触发器 + Lambda

场景4:异步消息处理

复制代码
【消息消费】
- 触发:消息队列
- 处理:消费消息
- 输出:业务处理
- 时长:100-500ms
- 调用频率:波动大

适合:消息触发器 + Lambda

场景5:Webhook处理

复制代码
【Git Webhook】
- 触发:Git Push
- 处理:触发CI/CD
- 输出:调用CI系统
- 时长:500ms-2s
- 调用频率:开发者推送时

适合:HTTP触发器 + Lambda

3.2 不适合Serverless的场景

场景1:长时运行任务

复制代码
【视频转码】
- 时长:30分钟-2小时
- 资源密集:CPU/GPU
- 不适合:Serverless运行时限制15分钟

适合:ECS/容器服务

场景2:高并发低延迟

复制代码
【高频交易】
- QPS:10万+
- 延迟要求:<10ms
- 不适合:冷启动延迟

适合:传统架构 + 优化

场景3:CPU密集型任务

复制代码
【科学计算】
- CPU密集
- 时长:分钟级
- 不适合:按调用付费成本高

适合:专用计算资源

场景4:状态密集型应用

复制代码
【有状态游戏服务器】
- 长连接
- 状态保持
- 不适合:Serverless无状态

适合:长连接服务

场景5:本地开发调试要求高

复制代码
【复杂业务系统】
- 调试频繁
- 依赖复杂
- 不适合:Serverless调试困难

适合:传统架构

3.3 决策框架

问自己5个问题

复制代码
1. 任务是短时还是长时?
   - 短时(<15分钟)→ 适合
   - 长时 → 不适合

2. 流量是稳定还是波动?
   - 波动大 → 适合(按需付费)
   - 稳定 → 传统架构可能更便宜

3. 任务是CPU密集还是IO密集?
   - IO密集 → 适合
   - CPU密集 → 不适合

4. 对延迟敏感吗?
   - 敏感(<100ms)→ 不适合
   - 不敏感 → 适合

5. 团队Serverless经验?
   - 充足 → 可以用
   - 不足 → 慎用

评分卡(每个问题1-5分):

复制代码
总分 > 18分:非常适合
12-18分:可以使用
8-12分:谨慎使用
< 8分:不建议

四、Serverless核心架构模式

4.1 函数计算基础

AWS Lambda示例

yaml 复制代码
# template.yaml (SAM)
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Resources:
  ImageProcessorFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: image-processor
      Runtime: python3.9
      Handler: index.handler
      MemorySize: 1024      # 1GB内存
      Timeout: 60           # 60秒超时
      CodeUri: ./src
      Events:
        # S3触发器
        ImageUpload:
          Type: S3
          Properties:
            Bucket: my-bucket
            Events: s3:ObjectCreated:*
            Filter:
              Key:
                Prefix: images/
                Suffix: .jpg
      
      # 环境变量
      Environment:
        Variables:
          TABLE_NAME: image-metadata
          THUMBNAIL_SIZE: 200
      
      # IAM权限
      Policies:
        - S3ReadWritePolicy:
            BucketName: my-bucket
        - DynamoDBCrudPolicy:
            TableName: image-metadata

  # API Gateway
  ImageApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: prod
      Cors:
        AllowMethods: "'*'"
        AllowHeaders: "'*'"
        AllowOrigin: "'*'"

4.2 冷启动优化

冷启动首次调用或长时间未调用时,需要初始化运行环境

冷启动时间(参考):

复制代码
Node.js:  200-500ms
Python:   300-800ms
Java:     1-3秒
Go:       100-300ms

优化策略

python 复制代码
# 1. 全局变量(避免重复初始化)
import boto3

# 这些在函数容器启动时初始化,复用
s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('image-metadata')

def handler(event, context):
    # 处理逻辑(避免重复初始化)
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    
    # 直接使用全局变量
    response = s3_client.get_object(Bucket=bucket, Key=key)
    # ...
yaml 复制代码
# 2. 配置预置并发(Provisioned Concurrency)
Resources:
  ImageProcessorFunction:
    Type: AWS::Serverless::Function
    Properties:
      # 预置并发:保持5个实例预热
      ProvisionedConcurrencyConfig:
        ProvisionedConcurrentExecutions: 5

3. 减小包体积

python 复制代码
# ❌ 反例:引入整个numpy(200MB)
import numpy as np

# ✅ 正例:使用轻量库
from PIL import Image

4.3 函数编排

复杂业务需要多个函数协作

复制代码
【订单处理函数链】

1. validateOrder(验证订单)
   ↓
2. checkInventory(检查库存)
   ↓
3. processPayment(处理支付)
   ↓
4. createShipment(创建物流)
   ↓
5. sendNotification(发送通知)

AWS Step Functions编排

json 复制代码
{
  "Comment": "订单处理流程",
  "StartAt": "ValidateOrder",
  "States": {
    "ValidateOrder": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:...:function:validate-order",
      "Next": "CheckInventory"
    },
    "CheckInventory": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:...:function:check-inventory",
      "Next": "ProcessPayment",
      "Catch": [{
        "ErrorEquals": ["InventoryError"],
        "Next": "FailState"
      }]
    },
    "ProcessPayment": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:...:function:process-payment",
      "Next": "ParallelActions"
    },
    "ParallelActions": {
      "Type": "Parallel",
      "Branches": [
        {
          "StartAt": "CreateShipment",
          "States": {
            "CreateShipment": {
              "Type": "Task",
              "Resource": "arn:aws:lambda:...:function:create-shipment",
              "End": true
            }
          }
        },
        {
          "StartAt": "SendNotification",
          "States": {
            "SendNotification": {
              "Type": "Task",
              "Resource": "arn:aws:lambda:...:function:send-notification",
              "End": true
            }
          }
        }
      ],
      "Next": "Success"
    },
    "Success": {
      "Type": "Succeed"
    },
    "FailState": {
      "Type": "Fail",
      "Error": "OrderProcessingFailed"
    }
  }
}

4.4 API Gateway + Lambda

yaml 复制代码
# REST API
ImageApi:
  Type: AWS::Serverless::Api
  Properties:
    StageName: prod
    Cors:
      AllowMethods: "'GET,POST,PUT,DELETE'"
      AllowHeaders: "'*'"
      AllowOrigin: "'*'"
    Auth:
      DefaultAuthorizer: MyAuthorizer
      Authorizers:
        MyAuthorizer:
          FunctionArn: !GetAtt AuthFunction.Arn
          Identity:
            Header: Authorization

GetImageFunction:
  Type: AWS::Serverless::Function
  Properties:
    Handler: index.handler
    Runtime: python3.9
    Events:
      GetImage:
        Type: Api
        Properties:
          Path: /images/{id}
          Method: get
          RestApiId: !Ref ImageApi
          Auth:
            Authorizer: MyAuthorizer

五、Serverless的数据管理

5.1 状态外置

原则函数是无状态的,所有状态存储在外部服务

复制代码
【Serverless状态存储】

业务数据 → DynamoDB / 阿里云表格存储
会话数据 → Redis
对象存储 → S3 / OSS
配置数据 → Parameter Store / 配置中心

DynamoDB示例

python 复制代码
import boto3
import json

# 全局变量(在容器中复用)
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('user-sessions')

def handler(event, context):
    user_id = event['requestContext']['authorizer']['userId']
    
    # 查询会话
    response = table.get_item(Key={'userId': user_id})
    session = response.get('Item', {})
    
    # 更新会话
    session['lastAccess'] = int(time.time())
    table.put_item(Item=session)
    
    return {
        'statusCode': 200,
        'body': json.dumps(session)
    }

5.2 数据一致性

Serverless的数据一致性挑战

复制代码
1. 多个函数并发写同一份数据
2. 函数执行失败时状态不一致
3. 跨函数事务

解决方案:

1. 幂等设计

python 复制代码
# 幂等处理:使用唯一请求ID
def handler(event, context):
    request_id = event['headers']['X-Request-Id']
    
    # 检查是否已处理
    if redis.exists(f'processed:{request_id}'):
        return cached_result  # 返回缓存结果
    
    # 执行业务逻辑
    result = process_business_logic(event)
    
    # 标记已处理
    redis.setex(f'processed:{request_id}', 3600, json.dumps(result))
    
    return result

2. Saga模式

python 复制代码
# 分布式事务:补偿模式
def process_order(order_id):
    # 1. 创建订单
    order = create_order(order_id)
    try:
        # 2. 扣减库存
        inventory_service.deduct(order)
        try:
            # 3. 处理支付
            payment_service.process(order)
        except Exception:
            # 补偿:回滚库存
            inventory_service.refund(order)
            raise
    except Exception:
        # 补偿:取消订单
        order_service.cancel(order)
        raise

5.3 缓存策略

python 复制代码
# Lambda + ElastiCache / Redis

import json
import redis

# 全局变量
redis_client = redis.Redis(host='elasticache-cluster.cache.amazonaws.com')

def handler(event, context):
    cache_key = f"data:{event['id']}"
    
    # 1. 尝试从缓存读取
    cached = redis_client.get(cache_key)
    if cached:
        return json.loads(cached)
    
    # 2. 缓存未命中,从数据库读取
    data = database.get(event['id'])
    
    # 3. 写入缓存(TTL 5分钟)
    redis_client.setex(cache_key, 300, json.dumps(data))
    
    return data

六、Serverless的监控与调试

6.1 监控挑战

传统架构

  • 服务器有固定IP
  • 进程稳定
  • 日志连续

Serverless

  • 函数实例动态创建/销毁
  • 日志分散
  • 调用链不连续
  • 性能难预测

6.2 可观测性设计

python 复制代码
# 结构化日志
import logging
import json

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def handler(event, context):
    # 请求ID贯穿整个调用链
    request_id = context.aws_request_id
    
    # 结构化日志
    log_data = {
        'requestId': request_id,
        'functionName': context.function_name,
        'event': event,
        'timestamp': int(time.time() * 1000)
    }
    
    logger.info(json.dumps(log_data))
    
    try:
        result = process(event)
        log_data['status'] = 'success'
        log_data['duration'] = time.time() - start_time
        logger.info(json.dumps(log_data))
        return result
    except Exception as e:
        log_data['status'] = 'error'
        log_data['error'] = str(e)
        logger.error(json.dumps(log_data))
        raise

6.3 分布式追踪

python 复制代码
# AWS X-Ray追踪
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all

# 自动追踪所有AWS SDK调用
patch_all()

@xray_recorder.capture('process_order')
def process_order(order_id):
    # 业务逻辑
    with xray_recorder.capture('check_inventory'):
        inventory = check_inventory(order_id)
    
    with xray_recorder.capture('process_payment'):
        payment = process_payment(order_id)
    
    return payment

6.4 本地调试

使用SAM CLI本地调试

bash 复制代码
# 启动本地API
sam local start-api

# 调用本地函数
sam local invoke ImageProcessor -e events/s3-event.json

# 启动调试模式
sam local invoke ImageProcessor -d 5858

VSCode调试配置

json 复制代码
// .vscode/launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to SAM CLI",
      "type": "aws-sam-cli",
      "request": "attach",
      "invokeTarget": {
        "target": "template.yaml",
        "logicalId": "ImageProcessorFunction"
      }
    }
  ]
}

七、Serverless的成本优化

7.1 成本分析

Serverless成本构成

复制代码
1. 调用次数费用
   └── 每次调用都计费

2. 执行时间费用(GB-秒)
   └── 内存 × 执行时间

3. 数据传输费用
   └── 跨可用区/跨地域

4. 其他服务费用
   └── API Gateway、DynamoDB等

我们项目的一个真实账单

复制代码
【图片处理服务月度账单】

Serverless方案(函数计算):
- 调用次数:500万次
- 执行时间:平均2秒
- 内存配置:1GB
- 计算费用:500万 × 2秒 × 1GB = 1000万 GB-秒
- 单价:0.0000167元/GB-秒
- 总计:167元 × 1万 = 1670元

ECS方案(2台4核8G):
- 包月:2台 × 500元 = 1000元
- 平均使用率:50%
- 实际有效成本:2000元

看似Serverless便宜,但

  • ECS可以处理更多业务(不只是图片处理)
  • ECS有其他用途(可以部署多个服务)
  • 单纯对比图片处理,Serverless可能更贵

7.2 成本优化策略

1. 合理配置内存

python 复制代码
# ❌ 内存过大(费用高)
# Memory: 3008MB, Duration: 1000ms
# 费用:3008 × 1 = 3008 MB-秒

# ✅ 内存适中
# Memory: 1024MB, Duration: 2000ms  
# 费用:1024 × 2 = 2048 MB-秒

2. 减少调用次数

python 复制代码
# ❌ 反例:每个请求一个函数
for item in items:
    process_item(item)  # 100个请求 = 100次调用

# ✅ 正例:批量处理
process_items(items)  # 1次调用处理100个

3. 使用预留并发

yaml 复制代码
# 预留并发:保证性能 + 控制成本
ImageProcessorFunction:
  Type: AWS::Serverless::Function
  Properties:
    ProvisionedConcurrencyConfig:
      ProvisionedConcurrentExecutions: 5
    # 预留并发比按需便宜30-70%

4. 缓存优化

python 复制代码
# 缓存减少函数调用
def handler(event, context):
    cache_key = compute_cache_key(event)
    
    # 缓存命中:直接返回(不计费或低价)
    if redis.exists(cache_key):
        return redis.get(cache_key)
    
    # 缓存未命中:执行函数
    result = process(event)
    redis.setex(cache_key, 300, result)
    return result

7.3 成本监控

设置成本告警

yaml 复制代码
# AWS Budget
Resources:
  MonthlyBudget:
    Type: AWS::Budgets::Budget
    Properties:
      Budget:
        BudgetName: ServerlessMonthlyBudget
        BudgetLimit:
          Amount: 1000
          Unit: USD
        TimeUnit: MONTHLY
      NotificationsWithSubscribers:
        - Notification:
            NotificationType: ACTUAL
            ComparisonOperator: GREATER_THAN
            Threshold: 80  # 80%告警
          Subscribers:
            - SubscriptionType: EMAIL
              Address: ops@example.com

八、Serverless的常见坑

8.1 坑1:冷启动导致超时

症状:第一次调用失败,第二次成功。

原因:冷启动时间超过客户端超时。

解决

  • 预置并发
  • 减小包体积
  • 选择启动快的运行时(Node.js、Go)

8.2 坑2:函数超时被强制杀死

症状:长时间任务执行到一半被终止。

原因:函数执行时间超过限制(默认3秒,最长15分钟)。

解决

  • 拆分长任务
  • 使用异步模式
  • 改用传统架构

8.3 坑3:本地能跑线上挂

症状:本地测试没问题,部署后失败。

原因

  • 环境差异(运行时版本)
  • IAM权限配置错误
  • 外部依赖访问问题

解决

  • 使用相同的运行时版本
  • 严格测试IAM权限
  • 使用SAM Local

8.4 坑4:状态丢失

症状:函数调用之间数据丢失。

原因:函数无状态,每次执行是新的容器。

解决

  • 状态外置到数据库/缓存
  • 不要依赖本地变量

8.5 坑5:成本失控

症状:月末账单超出预期。

原因

  • 代码Bug导致死循环调用
  • 内存配置过大
  • 高频调用

解决

  • 设置最大并发限制
  • 设置成本告警
  • 监控调用次数

九、Serverless的选型决策

9.1 我们团队的Serverless使用情况

使用情况(迁移1年后)

场景 是否使用Serverless 原因
Web API ❌ 不用 调试困难、性能不可控
图片处理 ✅ 使用 业务波动大、突发流量
定时任务 ✅ 使用 简单、按需
数据处理 ✅ 使用 短时任务
长时任务 ❌ 不用 超时限制
高并发业务 ❌ 不用 冷启动延迟
Webhook ✅ 使用 短时、低频

总结核心业务用传统架构,边缘业务用Serverless

9.2 Serverless适用业务

完全适合

  • 工具类网站(Markdown转PDF、二维码生成)
  • 静态网站后端
  • IoT数据处理
  • 聊天机器人
  • 自动化脚本

部分适合

  • 中小规模Web应用
  • 内部工具
  • 定时任务
  • 异步处理

不适合

  • 大型电商核心
  • 高频交易系统
  • 长时运行服务
  • CPU密集型任务

9.3 选型决策树

复制代码
问:你的业务场景是什么?
│
├── 长时运行(>15分钟)→ ❌ 传统架构
│
├── CPU密集型 → ❌ 传统架构
│
├── 高频低延迟(QPS > 1000, P99 < 100ms)→ ❌ 传统架构
│
├── 状态密集(长连接、游戏)→ ❌ 传统架构
│
├── 流量波动大 + 短时任务 → ✅ Serverless
│
├── 事件触发 + 短时处理 → ✅ Serverless
│
└── 定时任务 + 短时处理 → ✅ Serverless

9.4 主流Serverless平台对比

平台 优势 劣势 适用
AWS Lambda 生态完整、成熟 绑定AWS AWS用户
阿里云FC 集成阿里云 生态弱 阿里云用户
Azure Functions 集成Azure 国内访问慢 Azure用户
腾讯云SCF 集成腾讯云 起步晚 腾讯云用户
Vercel 前端友好 适合边缘 静态网站
Cloudflare Workers 边缘计算、性能好 限制多 边缘场景

十、Serverless的反思

10.1 Serverless的"乌托邦"vs"现实"

乌托邦

  • 零运维
  • 自动伸缩
  • 按需付费
  • 永远省钱

现实

  • 冷启动延迟
  • 调试困难
  • 厂商锁定
  • 复杂业务成本高

正确的Serverless观

Serverless是特定场景下的优秀工具 ,不是所有场景的银弹

10.2 Serverless的真正价值

对业务的价值

  • 快速上线:不用关心基础设施
  • 弹性伸缩:应对突发流量
  • 降本增效:按需付费

对团队的价值

  • 专注业务:不操心运维
  • 降低成本:减少运维人力
  • 提升效率:快速迭代

对架构的价值

  • 简化架构:无服务器管理
  • 云原生:充分利用云能力
  • 微服务友好:天然解耦

10.3 我们的Serverless策略

核心原则

复制代码
1. 业务优先:选对业务比选对技术重要
2. 渐进式:从非核心业务开始
3. 监控先行:成本监控、性能监控
4. 兜底方案:能随时迁回传统架构
5. 团队能力:培训和招聘同步

具体策略

业务 架构选择 原因
订单核心 传统架构 + K8s 稳定、低延迟
用户中心 传统架构 性能要求高
支付核心 传统架构 强一致性
图片处理 Serverless 业务波动
定时任务 Serverless 简单、低频
异步消息 Serverless 短时处理
内部工具 Serverless 快速上线

十一、总结

Serverless是架构工具箱中的一把利器用对了提升效率,用错了浪费成本

关键要点

  1. 明确适用边界:短时、波动、IO密集
  2. 避免核心业务:稳定业务用传统架构
  3. 冷启动优化:预置并发、减小包体积
  4. 状态外置:所有状态存储在外部服务
  5. 监控完善:性能、成本、调用次数
  6. 成本意识:不是所有场景都省钱
  7. 渐进式引入:从非核心业务开始

Serverless的哲学

Serverless是"特定场景的优选",不是"所有场景的银弹"。

核心原则

  • 业务匹配:选对业务场景
  • 团队能力:培训和经验
  • 成本意识:不是永远省钱
  • 渐进式:小步快跑
  • 可兜底:能随时迁回

最后的话

Serverless的本质是"托管的极致"------ 把服务器管理完全交给云厂商。

,"免运维"不代表"免架构"。

Serverless架构需要更多的设计思考

  • 如何避免冷启动?
  • 如何管理状态?
  • 如何处理复杂业务?
  • 如何控制成本?

如果你的业务是"事件触发、短时处理、流量波动"------ Serverless是绝佳选择。

如果你的业务是"长时运行、高频低延迟、状态密集"------ 传统架构更合适。

不要为了"上Serverless"而上Serverless,要为了"解决问题"而上Serverless。


今日思考

你们项目用Serverless了吗?用在了哪些场景?遇到了哪些坑?欢迎分享!


作者:架构实战团队

日期:2026-07-24

标签:#Serverless #函数计算 #FaaS #云原生 #架构选型

相关推荐
何时梦醒2 小时前
React + TypeScript + Vite 实战:从零构建 Color Picker 应用
前端·javascript·架构
瞬间&永恒~4 小时前
【MySQL】 主从复制多拓扑搭建实验
运维·数据库·mysql·云原生
张忠琳5 小时前
【NVIDIA】k8s-device-plugin v0.19.3 标签管理模块 (internal/lm) 深度分析之六
云原生·容器·架构·kubernetes·nvidia
小匠石钧知5 小时前
02_在多个RockyLinux10虚拟机上安装k8s集群
云原生·容器·kubernetes·k8s
阿里云云原生6 小时前
一周上线!信永中和基于阿里云 AgentTeams + AI 网关打造多智能体 AI 平台
阿里云·云原生·ai网关·agentteams
中微极客6 小时前
边缘AI赋能可穿戴:实时生物信号处理架构与工程实践
人工智能·架构·信号处理
qq_454245036 小时前
认知自举:LLM自我指令泛化的三层逻辑
人工智能·架构·prompt
XUHUOJUN7 小时前
Azure Stack Hub 存储服务:托管磁盘、Blob/Table/Queue 与容量管理(下篇)
架构·azure stack
XUHUOJUN7 小时前
Azure Stack Hub 存储服务:从 S2D 物理栈到租户服务全景(上篇)
架构·azure stack
上海云盾商务经理杨杨8 小时前
WAF+DDoS 双层防护架构!解决应用层混合攻击漏杀误杀问题
架构·ddos