上一篇 下一篇 分享链接 返回 返回顶部

DeepSeek 扛高并发实战:从限流、削峰到配置落地

发布人:慈云数据-客服中心 发布时间:23小时前 阅读量:0

DeepSeek 高并发解决方案|附配置文件

随着大模型应用从“体验型 Demo”逐步走向“生产级业务系统”,DeepSeek 这类大语言模型在企业内部知识库、智能客服、代码助手、数据分析 Agent、内容生成平台等场景中被广泛使用。然而,一旦业务流量上来,系统很快会遇到一个核心问题:高并发请求下如何保证稳定、低延迟、可扩展、可观测,并且成本可控?

本文将围绕 DeepSeek 高并发落地方案展开,重点讲解整体架构设计、服务拆分、限流熔断、队列削峰、缓存策略、连接池配置、Nginx 反向代理、负载均衡、异步任务处理、监控告警以及可直接参考的配置文件示例。


一、DeepSeek 高并发场景下的典型问题

在实际业务中,调用 DeepSeek 模型接口通常会面临以下问题:

1. 请求量突增导致接口超时

例如活动期间、客服高峰期、批量文档分析任务启动时,大量用户同时发起请求,后端服务瞬间压力升高。如果系统没有限流和削峰能力,很容易出现:

  • 请求排队时间过长;
  • 后端线程池被打满;
  • HTTP 连接耗尽;
  • API 调用超时;
  • 服务雪崩。

2. 大模型响应时间较长

普通接口可能几十毫秒返回,而大模型接口通常需要数百毫秒到数秒,甚至更久。尤其是长上下文、多轮对话、复杂推理场景,响应时间会明显增加。

这意味着同样的并发量下,大模型服务需要占用更多连接、线程和内存资源。

3. Token 消耗不可控

DeepSeek API 调用通常按照 Token 消耗计费。如果没有对输入长度、输出长度、用户频率进行限制,可能会导致:

  • 成本快速上升;
  • 单个用户异常占用资源;
  • 恶意请求刷接口;
  • 后端服务被无效请求拖垮。

4. 流式响应连接占用时间长

如果使用 SSE 或 HTTP Stream 返回模型结果,连接会持续保持打开状态。高并发下,长连接数量迅速增加,对 Nginx、网关、应用服务以及操作系统文件描述符都会带来压力。

5. 缺乏降级策略

当 DeepSeek 接口异常、响应变慢或调用额度不足时,如果系统没有备用策略,就可能直接影响用户体验。

常见表现包括:

  • 前端一直 loading;
  • 请求失败无提示;
  • 整体业务不可用;
  • 后端错误日志暴涨。

二、整体架构设计

一个生产级 DeepSeek 高并发方案,建议采用如下架构:

用户端
  |
  | HTTPS
  v
Nginx / API Gateway
  |
  | 限流、鉴权、负载均衡
  v
业务应用服务集群
  |
  | Redis 缓存 / 限流 / 会话存储
  |
  | MQ 消息队列削峰
  v
AI 调用服务
  |
  | 连接池、重试、熔断、降级
  v
DeepSeek API / 私有化模型服务
  |
  v
日志系统 / 监控系统 / 告警系统

推荐拆分为以下模块:

模块 作用
Nginx / 网关层 TLS 终止、限流、反向代理、负载均衡
应用服务层 用户鉴权、业务逻辑、参数校验
AI 调用层 统一封装 DeepSeek 请求、重试、超时、熔断
Redis 缓存、限流计数、会话状态、热点问题结果缓存
MQ 削峰填谷、异步任务、批处理任务
监控系统 QPS、延迟、错误率、Token 消耗、队列积压监控
日志系统 请求追踪、异常分析、审计

这种架构的核心思想是:不要让用户请求直接打到 DeepSeek 接口,而是通过中间层进行治理。


三、高并发优化核心策略


1. 网关层限流

网关层是系统的第一道防线。对于 DeepSeek 这类成本较高、响应时间较长的接口,必须在入口处进行限流。

常见限流维度包括:

  • 按 IP 限流;
  • 按用户 ID 限流;
  • 按接口路径限流;
  • 按租户限流;
  • 按 Token 消耗限流;
  • 按并发连接数限流。

例如:

  • 普通用户每分钟最多 20 次;
  • VIP 用户每分钟最多 100 次;
  • 单个 IP 每秒最多 5 次;
  • 单个用户同时最多 3 个流式请求。

网关限流可以避免恶意请求和突发流量直接冲击后端服务。


2. 应用层参数校验

在调用 DeepSeek 前,应尽可能过滤无效请求。

例如:

  • prompt 不能为空;
  • prompt 最大长度限制;
  • history 对话轮数限制;
  • max_tokens 设置上限;
  • temperature 设置范围;
  • 禁止重复提交;
  • 用户余额或额度校验。

示例策略:

普通用户:
- prompt 最大 4000 字符
- 最大输出 1000 tokens
- 历史对话最多保留 10 轮

企业用户:
- prompt 最大 16000 字符
- 最大输出 4000 tokens
- 历史对话最多保留 30 轮

这样可以显著降低无效请求和超长请求带来的资源浪费。


3. Redis 分布式限流

如果业务应用服务是多实例部署,单机内存限流就不够可靠,需要使用 Redis 实现分布式限流。

推荐使用滑动窗口或令牌桶算法。

例如按照用户 ID 限制每分钟请求次数:

-- rate_limit.lua
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local current = redis.call("INCR", key)

if current == 1 then
    redis.call("EXPIRE", key, window)
end

if current > limit then
    return 0
else
    return 1
end

Java 或 Node.js 服务可在请求进入业务逻辑前调用该 Lua 脚本。由于 Lua 脚本在 Redis 中原子执行,可以避免并发下计数不准确的问题。


4. 缓存热点问题

很多业务场景中,用户会反复问相似问题。例如:

  • “如何重置密码?”
  • “发票怎么开?”
  • “DeepSeek API 怎么计费?”
  • “订单退款多久到账?”

对于这类高频问题,可以使用缓存降低模型调用次数。

缓存策略包括:

  1. 精确缓存
    对用户问题归一化后进行 hash,命中则直接返回。

  2. 语义缓存
    将问题向量化后,检索相似问题,如果相似度超过阈值,则复用历史答案。

  3. 业务知识库优先
    对 FAQ 问题优先走知识库,不必每次都调用大模型。

缓存需要注意:

  • 设置合理 TTL;
  • 对涉及实时数据的问题不要缓存;
  • 对个性化问题谨慎缓存;
  • 缓存内容需要带版本号,知识库更新后主动失效。

示例缓存 Key:

deepseek:cache:answer:{tenant_id}:{question_hash}

5. MQ 削峰填谷

对于不需要实时返回的任务,例如:

  • 批量文章生成;
  • 批量代码审查;
  • 长文档总结;
  • 报表智能分析;
  • 大规模知识库问答生成;

建议使用消息队列异步处理。

流程如下:

用户提交任务
  |
  v
业务服务写入任务表
  |
  v
发送消息到 MQ
  |
  v
AI Worker 消费任务
  |
  v
调用 DeepSeek
  |
  v
结果写入数据库
  |
  v
用户轮询或 WebSocket 获取结果

MQ 可以有效削峰,避免瞬时大批量任务直接打满 AI 调用服务。

常见 MQ 选择:

MQ 适用场景
RabbitMQ 中小规模任务队列,可靠性好
Kafka 大吞吐日志流、事件流
RocketMQ 企业级高可靠消息场景
Redis Stream 轻量级异步队列

6. 连接池与超时控制

调用 DeepSeek API 时,一定要配置连接池和超时时间。不要每次请求都创建新连接,否则高并发下会造成大量 TCP 握手、TLS 握手开销。

推荐超时配置:

参数 建议值
连接超时 3s - 5s
读取超时 30s - 120s
写入超时 10s
最大空闲连接数 100 - 500
最大并发连接数 根据实例规格配置
重试次数 1 - 2 次

注意:大模型接口响应时间本身较长,读取超时时间不能设置太短,否则会出现大量误判超时。


7. 流式响应优化

如果使用流式输出,需要重点关注连接占用。

建议:

  • Nginx 关闭代理缓冲;
  • 设置合理的 read timeout;
  • 控制单用户并发流式连接数;
  • 前端支持中断请求;
  • 服务端支持取消 DeepSeek 请求;
  • 对长时间无输出的连接主动关闭;
  • 限制最大输出 Token。

流式响应虽然用户体验更好,但会增加连接管理复杂度,因此必须配合限流和连接数控制。


8. 熔断与降级

当 DeepSeek 接口不可用或响应变慢时,应及时熔断,避免拖垮整个系统。

触发熔断的指标可以包括:

  • 错误率超过 30%;
  • P95 响应时间超过 10 秒;
  • 连续超时次数超过阈值;
  • 队列积压超过限制;
  • API 返回 429 或 5xx 增多。

降级方式包括:

  • 返回固定提示:“当前智能服务繁忙,请稍后重试”;
  • 切换到轻量模型;
  • 只返回知识库检索结果;
  • 对非核心功能暂停 AI 生成;
  • 对低优先级用户延迟处理。

高并发系统设计中,降级不是失败,而是保护核心链路的必要手段。


四、Nginx 配置文件示例

下面是一个适合 DeepSeek 高并发调用场景的 Nginx 配置示例。

# /etc/nginx/nginx.conf

user nginx;
worker_processes auto;

events {
    worker_connections 65535;
    multi_accept on;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 65;
    keepalive_requests 10000;

    client_max_body_size 20m;
    client_body_timeout 15s;
    send_timeout 120s;

    # 日志格式
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$request_time" "$upstream_response_time"';

    access_log /var/log/nginx/access.log main;
    error_log  /var/log/nginx/error.log warn;

    # IP 限流:每个 IP 每秒 5 个请求
    limit_req_zone $binary_remote_addr zone=ip_limit:20m rate=5r/s;

    # 并发连接限制
    limit_conn_zone $binary_remote_addr zone=conn_limit:20m;

    upstream deepseek_backend {
        least_conn;
        server 10.0.0.11:8080 max_fails=3 fail_timeout=30s;
        server 10.0.0.12:8080 max_fails=3 fail_timeout=30s;
        server 10.0.0.13:8080 max_fails=3 fail_timeout=30s;

        keepalive 512;
    }

    server {
        listen 80;
        server_name api.example.com;

        location / {
            return 301 https://$host$request_uri;
        }
    }

    server {
        listen 443 ssl http2;
        server_name api.example.com;

        ssl_certificate     /etc/nginx/ssl/server.crt;
        ssl_certificate_key /etc/nginx/ssl/server.key;

        ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 1d;
        ssl_protocols TLSv1.2 TLSv1.3;

        location /api/ai/chat {
            limit_req zone=ip_limit burst=20 nodelay;
            limit_conn conn_limit 20;

            proxy_pass http://deepseek_backend;

            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Request-Id $request_id;

            # 流式响应关键配置
            proxy_buffering off;
            proxy_cache off;
            proxy_read_timeout 120s;
            proxy_send_timeout 120s;
            proxy_connect_timeout 5s;

            add_header X-Request-Id $request_id;
        }

        location /health {
            access_log off;
            return 200 "ok";
        }
    }
}

该配置重点解决以下问题:

  • 提高 worker 连接数;
  • 开启 keepalive;
  • 使用 least_conn 负载均衡;
  • 支持流式响应;
  • 配置 IP 限流;
  • 限制单 IP 并发连接;
  • 设置合理代理超时。

五、Spring Boot 配置文件示例

如果后端使用 Spring Boot,可以将 DeepSeek 调用参数、线程池、限流参数统一配置到 application.yml 中。

server:
  port: 8080
  tomcat:
    threads:
      max: 500
      min-spare: 50
    accept-count: 1000
    max-connections: 10000
    connection-timeout: 5000

spring:
  application:
    name: deepseek-ai-service

  data:
    redis:
      host: 127.0.0.1
      port: 6379
      password: your_redis_password
      database: 0
      timeout: 3000ms
      lettuce:
        pool:
          max-active: 200
          max-idle: 50
          min-idle: 10
          max-wait: 3000ms

deepseek:
  api:
    base-url: https://api.deepseek.com
    api-key: ${DEEPSEEK_API_KEY}
    model: deepseek-chat
    connect-timeout-ms: 5000
    read-timeout-ms: 120000
    write-timeout-ms: 10000
    max-idle-connections: 200
    keep-alive-duration-minutes: 5
    max-retry: 2

  limit:
    user-request-per-minute: 30
    ip-request-per-second: 5
    max-prompt-length: 8000
    max-output-tokens: 2000
    max-concurrent-stream-per-user: 3

  degrade:
    enabled: true
    error-rate-threshold: 30
    slow-call-duration-ms: 10000
    minimum-number-of-calls: 50
    wait-duration-in-open-state-ms: 30000

management:
  endpoints:
    web:
      exposure:
        include: health,info,prometheus,metrics
  metrics:
    tags:
      application: deepseek-ai-service

六、OkHttp 连接池配置示例

在 Java 服务中,推荐使用 OkHttp 或 WebClient 调用 DeepSeek API。以下是 OkHttp 配置示例:

@Configuration
public class DeepSeekHttpClientConfig {

    @Bean
    public OkHttpClient deepSeekOkHttpClient(DeepSeekProperties properties) {
        return new OkHttpClient.Builder()
                .connectTimeout(Duration.ofMillis(properties.getConnectTimeoutMs()))
                .readTimeout(Duration.ofMillis(properties.getReadTimeoutMs()))
                .writeTimeout(Duration.ofMillis(properties.getWriteTimeoutMs()))
                .connectionPool(new ConnectionPool(
                        properties.getMaxIdleConnections(),
                        properties.getKeepAliveDurationMinutes(),
                        TimeUnit.MINUTES
                ))
                .retryOnConnectionFailure(true)
                .build();
    }
}

调用时需要注意:

  • 不要每次 new OkHttpClient;
  • OkHttpClient 应作为单例 Bean;
  • 对流式请求要及时关闭 Response;
  • 捕获超时异常并进入熔断统计;
  • 对 429、500、502、503、504 做有限重试。

七、线程池配置示例

AI 调用通常属于 IO 密集型任务,可以使用独立线程池,避免占用业务主线程池。

@Configuration
@EnableAsync
public class AiThreadPoolConfig {

    @Bean("aiExecutor")
    public Executor aiExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(100);
        executor.setMaxPoolSize(300);
        executor.setQueueCapacity(1000);
        executor.setKeepAliveSeconds(60);
        executor.setThreadNamePrefix("ai-worker-");

        executor.setRejectedExecutionHandler(
                new ThreadPoolExecutor.CallerRunsPolicy()
        );

        executor.initialize();
        return executor;
    }
}

线程池参数需要结合机器配置调整。例如 4 核 8G 的机器不建议设置过大的线程池,否则会造成上下文切换和内存压力。

推荐初始配置:

实例规格 corePoolSize maxPoolSize queueCapacity
2C4G 30 80 500
4C8G 80 200 1000
8C16G 150 400 3000
16C32G 300 800 5000

八、Resilience4j 熔断配置

Spring Boot 项目中可以使用 Resilience4j 实现熔断、限流和重试。

resilience4j:
  circuitbreaker:
    instances:
      deepSeekCircuitBreaker:
        sliding-window-type: COUNT_BASED
        sliding-window-size: 100
        minimum-number-of-calls: 50
        failure-rate-threshold: 30
        slow-call-rate-threshold: 50
        slow-call-duration-threshold: 10s
        wait-duration-in-open-state: 30s
        permitted-number-of-calls-in-half-open-state: 10

  retry:
    instances:
      deepSeekRetry:
        max-attempts: 2
        wait-duration: 500ms
        retry-exceptions:
          - java.net.SocketTimeoutException
          - java.io.IOException

  ratelimiter:
    instances:
      deepSeekRateLimiter:
        limit-for-period: 100
        limit-refresh-period: 1s
        timeout-duration: 0

示例代码:

@CircuitBreaker(name = "deepSeekCircuitBreaker", fallbackMethod = "fallback")
@Retry(name = "deepSeekRetry")
public String chat(ChatRequest request) {
    return deepSeekClient.chat(request);
}

public String fallback(ChatRequest request, Throwable throwable) {
    return "当前智能服务繁忙,请稍后再试。";
}

需要注意,重试不能盲目增加。对于高并发系统来说,过多重试可能会进一步放大流量,形成“重试风暴”。


九、Redis 缓存配置示例

spring:
  cache:
    type: redis
    redis:
      time-to-live: 10m
      cache-null-values: false
      key-prefix: deepseek:
      use-key-prefix: true

缓存示例代码:

@Service
public class AiCacheService {

    private final StringRedisTemplate redisTemplate;

    public AiCacheService(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public String getCachedAnswer(String tenantId, String questionHash) {
        String key = "deepseek:cache:answer:" + tenantId + ":" + questionHash;
        return redisTemplate.opsForValue().get(key);
    }

    public void cacheAnswer(String tenantId, String questionHash, String answer) {
        String key = "deepseek:cache:answer:" + tenantId + ":" + questionHash;
        redisTemplate.opsForValue().set(key, answer, Duration.ofMinutes(10));
    }
}

缓存命中后可以直接返回结果,不再调用 DeepSeek,大幅降低延迟和成本。


十、RabbitMQ 削峰配置示例

对于异步 AI 任务,可以使用 RabbitMQ。

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: admin
    password: admin123
    virtual-host: /
    listener:
      simple:
        concurrency: 10
        max-concurrency: 50
        prefetch: 5
        retry:
          enabled: true
          max-attempts: 3
          initial-interval: 1000ms
          multiplier: 2
          max-interval: 10000ms

队列配置示例:

@Configuration
public class RabbitConfig {

    public static final String AI_TASK_QUEUE = "ai.task.queue";
    public static final String AI_TASK_EXCHANGE = "ai.task.exchange";
    public static final String AI_TASK_ROUTING_KEY = "ai.task";

    @Bean
    public Queue aiTaskQueue() {
        return QueueBuilder.durable(AI_TASK_QUEUE)
                .withArgument("x-dead-letter-exchange", "ai.dead.exchange")
                .withArgument("x-dead-letter-routing-key", "ai.dead")
                .build();
    }

    @Bean
    public DirectExchange aiTaskExchange() {
        return new DirectExchange(AI_TASK_EXCHANGE);
    }

    @Bean
    public Binding aiTaskBinding() {
        return BindingBuilder
                .bind(aiTaskQueue())
                .to(aiTaskExchange())
                .with(AI_TASK_ROUTING_KEY);
    }
}

通过 MQ 可以控制 Worker 消费速度,从而保护 DeepSeek API 和内部服务。


十一、Docker Compose 部署示例

下面给出一个简单的 Docker Compose 示例,包含 Nginx、应用服务、Redis、RabbitMQ。

version: "3.9"

services:
  nginx:
    image: nginx:1.25
    container_name: deepseek-nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl:/etc/nginx/ssl
      - ./logs/nginx:/var/log/nginx
    depends_on:
      - app1
      - app2
    restart: always

  app1:
    image: your-registry/deepseek-ai-service:latest
    container_name: deepseek-app1
    environment:
      - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}
      - SPRING_PROFILES_ACTIVE=prod
    ports:
      - "8081:8080"
    restart: always

  app2:
    image: your-registry/deepseek-ai-service:latest
    container_name: deepseek-app2
    environment:
      - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}
      - SPRING_PROFILES_ACTIVE=prod
    ports:
      - "8082:8080"
    restart: always

  redis:
    image: redis:7
    container_name: deepseek-redis
    command: redis-server --requirepass your_redis_password --appendonly yes
    ports:
      - "6379:6379"
    volumes:
      - ./data/redis:/data
    restart: always

  rabbitmq:
    image: rabbitmq:3.12-management
    container_name: deepseek-rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin123
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      - ./data/rabbitmq:/var/lib/rabbitmq
    restart: always

十二、监控指标设计

高并发场景下,必须建立完整的监控体系。建议至少监控以下指标:

1. 接口层指标

  • QPS;
  • 请求成功率;
  • HTTP 4xx / 5xx;
  • 平均响应时间;
  • P90 / P95 / P99 延迟;
  • 流式连接数;
  • 请求体大小。

2. DeepSeek 调用指标

  • 调用次数;
  • 成功率;
  • 超时次数;
  • 429 次数;
  • 5xx 次数;
  • 平均 Token 消耗;
  • 输入 Token;
  • 输出 Token;
  • 单用户 Token 消耗排行。

3. 系统资源指标

  • CPU 使用率;
  • 内存使用率;
  • JVM 堆内存;
  • GC 次数和耗时;
  • 线程池活跃数;
  • 队列长度;
  • TCP 连接数;
  • 文件描述符数量。

4. MQ 指标

  • 队列积压数量;
  • 消费速率;
  • 消费失败数;
  • 死信队列数量;
  • 消息平均等待时间。

5. Redis 指标

  • QPS;
  • 慢查询;
  • 内存使用;
  • 连接数;
  • key 过期数量;
  • 命中率。

告警建议:

指标 阈值
P95 延迟 超过 10 秒持续 5 分钟
错误率 超过 5% 持续 3 分钟
429 响应 突增超过平时 3 倍
MQ 积压 超过 10000 条
Redis 内存 超过 80%
CPU 使用率 超过 85% 持续 5 分钟
JVM Full GC 频繁出现

十三、成本控制方案

DeepSeek 高并发场景中,成本控制同样重要。

建议从以下方面入手:

  1. 限制 max_tokens
    不同用户等级设置不同输出长度。

  2. 裁剪历史上下文
    不要将所有历史对话都传给模型,可保留最近 N 轮,或使用摘要压缩。

  3. 优先检索知识库
    FAQ、政策类问题优先走检索结果,必要时再调用模型。

  4. 缓存高频答案
    热点问题直接返回缓存。

  5. 按租户设置额度
    企业租户每日、每月设置 Token 上限。

  6. 异常用户识别
    对高频、异常、重复请求进行风控。

  7. 异步任务分级调度
    低优先级任务在低峰期处理。


十四、生产环境参数建议

以下是一个中等规模系统的参考配置,假设日活 5 万、峰值 QPS 300、使用 4 台 8C16G 应用服务器。

配置项 建议值
Nginx worker_processes auto
worker_connections 65535
应用实例数 4
Tomcat max threads 500
Redis 连接池 max-active 200
AI 线程池 core 150
AI 线程池 max 400
队列容量 3000
DeepSeek read timeout 120s
单用户每分钟请求 30
单 IP 每秒请求 5
单用户流式并发 3
熔断错误率阈值 30%
慢调用阈值 10s
缓存 TTL 10-30 分钟

需要强调的是,以上参数不是固定标准,必须根据压测结果进行调整。


十五、压测建议

上线前必须进行压测,重点验证以下内容:

  • 最大稳定 QPS;
  • P95 / P99 延迟;
  • CPU、内存、网络瓶颈;
  • Redis 是否成为瓶颈;
  • Nginx 连接数是否足够;
  • DeepSeek API 调用是否触发 429;
  • 流式响应下连接是否稳定;
  • 熔断是否能正常触发;
  • 降级结果是否符合预期;
  • MQ 积压后是否能恢复。

压测工具可以选择:

  • JMeter;
  • K6;
  • Locust;
  • wrk;
  • Gatling。

K6 压测脚本示例:

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  vus: 200,
  duration: '5m',
};

export default function () {
  const payload = JSON.stringify({
    message: "请介绍一下 DeepSeek 高并发架构设计",
    stream: false
  });

  const params = {
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer test-token'
    },
    timeout: '120s'
  };

  const res = http.post('https://api.example.com/api/ai/chat', payload, params);

  check(res, {
    'status is 200': (r) => r.status === 200,
    'latency < 10s': (r) => r.timings.duration < 10000,
  });

  sleep(1);
}

十六、上线检查清单

上线前建议按照以下清单逐项检查:

  • [ ] Nginx 已配置限流和连接数限制;
  • [ ] DeepSeek API Key 未写死在代码中;
  • [ ] Redis 限流脚本已验证原子性;
  • [ ] 应用层已限制 prompt 长度;
  • [ ] 已限制 max_tokens;
  • [ ] 已配置连接池;
  • [ ] 已配置合理超时;
  • [ ] 已配置熔断和降级;
  • [ ] 已接入监控和告警;
  • [ ] 已记录请求链路 ID;
  • [ ] 已配置日志脱敏;
  • [ ] 已完成高并发压测;
  • [ ] 已准备应急开关;
  • [ ] 已配置异步任务死信队列;
  • [ ] 已设置用户或租户额度;
  • [ ] 已验证流式响应断开后的资源释放。

十七、总结

DeepSeek 高并发解决方案的核心不只是“多部署几台机器”,而是要从入口、业务、调用、缓存、队列、降级、监控、成本等多个维度进行系统化设计。

可以总结为以下几点:

  1. 入口要限流:Nginx、API Gateway、Redis 分布式限流缺一不可。
  2. 请求要治理:限制 prompt 长度、输出 Token、用户频率和流式连接数。
  3. 调用要稳定:连接池、超时、重试、熔断、降级必须配置。
  4. 流量要削峰:实时请求和异步任务分开,批量任务走 MQ。
  5. 结果要缓存:热点问题、FAQ、可复用答案优先命中缓存。
  6. 系统要可观测:QPS、延迟、错误率、Token、队列、资源都要监控。
  7. 成本要可控:按用户、租户、模型、Token 进行额度管理。

如果你的业务刚开始接入 DeepSeek,可以先采用“Nginx + 应用集群 + Redis 限流缓存 + 连接池 + 熔断降级”的轻量方案;当任务量进一步增长后,再引入 MQ、语义缓存、分级调度和多模型路由。这样既能保证初期快速上线,也能为后续高并发扩展打下基础。

目录结构
全文