跳到主要内容

第 2.11.3 节:把数据库、向量库、Worker 和健康检查纳入部署验收

数据库、向量库、Worker 和健康检查只有拆成可执行步骤,才容易复核、排错和交接。完成本节后,你应该能够写出数据库、向量库、Worker 和健康检查的验收样例、通过/不通过标准、判断阈值和风险说明。

实现步骤或决策流程​

推荐技术流​

客服 Agent(智能体)工作台的部署技术流,推荐按“先产物、再配置、再数据、再入口、再验收”的顺序设计。

顺序做什么验收重点
1定义部署环境至少区分 local(本地)、staging(预发布)、production(生产)。
2固化服务镜像前端、后端、worker(后台任务)都有明确 image_version(镜像版本)。
3设计 env_profile(环境配置)同一镜像能通过配置切换模型、数据库、域名和日志级别。
4管理 secret_ref(密钥引用)模型 API Key(接口密钥)、数据库密码、第三方凭证不进入代码、镜像和日志。
5准备数据库和向量数据库migration_status(迁移状态)明确,backup_status(备份状态)可验证。
6拆分 API(应用程序接口)和 worker(后台任务)长任务不会阻塞在线请求,失败可重试。
7配置 Nginx(反向代理服务器)入口public_url(公开地址)、TLS(传输层安全协议)、路径、超时、上传大小符合业务。
8设计健康检查health_status(健康状态)覆盖进程、依赖和最小业务链路。
9接入日志和 trace_id(追踪编号)部署事件、请求链路、模型调用、工具调用、worker(后台任务)能关联。
10执行上线检查前端、API、模型、RAG(检索增强生成)、工单、备份、回滚都通过。
11观察灰度窗口新版本上线后观察错误率、延迟、成本、队列积压和用户反馈。
12保留回滚路径rollback_version(回滚版本)、旧配置和恢复步骤明确。

这条技术流的核心不是“部署工具选哪一个”,而是“上线状态能不能被描述和验证”。只要你能稳定回答“当前跑的是哪个版本、用了哪套配置、健康状态如何、失败能不能回滚”,部署就开始具备工程可信度。

字段契约​

部署也需要字段契约。没有字段契约,团队只能靠聊天记录和记忆判断“现在服务器上到底是什么状态”。

部署记录字段契约​

字段含义示例含义验收要求
deployment_id(部署编号)一次上线或回滚动作的唯一编号用来追踪某次生产发布能关联部署人、时间、服务、版本、日志和结果。
environment(环境)部署目标环境local、staging、production生产和测试必须明确区分,不能共用敏感配置。
service_name(服务名称)被部署的服务frontend、api、worker、nginx每个服务独立记录,不用一句“系统已部署”带过。
image_version(镜像版本)本次部署使用的镜像或构建产物版本某个后端 API 版本必须可追溯到构建产物,不能只写“latest”。
env_profile(环境配置)本次部署使用的配置档案生产模型、生产数据库、生产域名组合能看出配置来源和生效范围。
secret_ref(密钥引用)密钥的引用名或管理位置模型密钥、数据库密码、第三方凭证引用只能记录引用,不能记录真实密钥。
health_status(健康状态)部署后的健康结果healthy、degraded、failed必须来自健康检查,不靠人工感觉。
public_url(公开地址)用户访问入口客服工作台公网域名必须经过 TLS(传输层安全协议)和 Nginx(反向代理服务器)。
internal_url(内部地址)服务之间访问的内部地址Nginx(反向代理服务器)转发到 API 的地址不应直接暴露给公网用户。
rollback_version(回滚版本)出问题时要退回的版本上一个稳定镜像版本上线前就要确认存在且可用。
backup_status(备份状态)上线前后的备份结果completed、missing、failed数据库和关键配置必须能恢复。
migration_status(迁移状态)数据库或索引迁移结果not_required、pending、completed、failed迁移失败不能继续宣称上线成功。
trace_id(追踪编号)串联部署动作和运行日志的编号用于追踪上线过程中的错误部署日志、健康检查日志和告警要能关联。

服务配置字段契约​

字段适用服务说明
service_name(服务名称)全部服务服务名称要稳定,方便日志和告警识别。
environment(环境)全部服务本地、预发布、生产不能混用数据库和密钥。
env_profile(环境配置)API、worker(后台任务)、前端表示当前服务读取哪套配置,不直接暴露密钥值。
secret_ref(密钥引用)API、worker(后台任务)指向模型、数据库、工单系统等敏感凭证。
public_url(公开地址)前端、Nginx(反向代理服务器)用户和客户可访问的地址。
internal_url(内部地址)API、数据库、向量数据库、worker(后台任务)内部通信地址,不应作为用户入口。
health_status(健康状态)全部服务记录服务自身和关键依赖是否可用。
trace_id(追踪编号)API、Agent、worker(后台任务)串联用户请求、工具调用、后台任务和错误。

上线事件字段契约​

字段含义为什么需要
deployment_id(部署编号)本次上线事件出现问题时能知道是哪次上线引入的。
operator(操作人)谁发起上线便于权限审计和责任归属。
approval_status(审批状态)是否经过负责人确认生产上线不能完全靠个人随手操作。
precheck_result(上线前检查结果)上线前依赖是否满足防止无备份、无密钥、无回滚就上线。
migration_status(迁移状态)数据结构或索引是否迁移成功防止应用和数据结构不一致。
health_status(健康状态)上线后的服务健康决定是否继续观察、回滚或下线。
rollback_version(回滚版本)可退回版本新版本异常时减少决策时间。
trace_id(追踪编号)关联部署日志和下一章可观测性衔接。

字段契约的意义是把部署从“口头经验”变成“系统事实”。当客户问“昨天晚上的版本为什么创建工单失败”,你应该能从 deployment_id(部署编号)找到 image_version(镜像版本)、env_profile(环境配置)、migration_status(迁移状态)、健康检查结果和相关 trace_id(追踪编号)。

制作步骤​

下面是把客服 Agent 工作台部署成可交付系统的制作方法。它不是命令清单,而是工程步骤和验收顺序。

第 1 步:定义环境边界​

先定义有哪些环境:

环境用途配置原则
local(本地)开发和调试可以使用 Mock(模拟)模式和本地数据库。
staging(预发布)上线前验证尽量接近生产,但使用隔离数据和测试密钥。
production(生产)客户真实使用使用生产域名、生产密钥、备份和正式告警。

新手常犯的错是测试环境和生产环境混用模型密钥、数据库或向量数据库。这样会导致测试数据污染生产数据,或者生产问题被误判为测试问题。

第 2 步:定义服务清单​

列出要部署的服务,而不是只说“部署项目”。

服务是否必须独立记录版本原因
frontend(前端工作台)是页面和接口契约可能变化。
api(后端 API 服务)是连接模型、数据库、工单和权限。
worker(后台任务)是处理知识库索引和批量任务。
nginx(反向代理入口)是影响所有用户访问。
database(业务数据库)记录迁移版本数据结构变化影响回滚。
vector_database(向量数据库)记录索引版本知识库检索效果依赖索引版本。

服务清单确定后,才能设计 service_name(服务名称)、image_version(镜像版本)和 health_status(健康状态)。

第 3 步:制作镜像版本策略​

镜像版本要能回答“当前跑的是什么”。不要只依赖一个模糊的默认标签。每次上线至少要知道:

  • 哪个服务被更新。
  • 使用哪个 image_version(镜像版本)。
  • 这个版本来自哪次构建或发布。
  • 上一个稳定 rollback_version(回滚版本)是什么。
  • 该版本是否需要数据库或向量索引迁移。

版本策略不是为了好看,而是为了回滚。没有明确版本,就无法稳定退回。

第 4 步:设计环境配置和密钥引用​

把配置分成普通配置和敏感配置。

类型例子管理方式
普通配置APP_MODE(应用模式)、MODEL_PROVIDER(模型供应商)、LOG_LEVEL(日志级别)、PUBLIC_URL(公开地址)放入 env_profile(环境配置),可审计、可回滚。
敏感配置模型 API Key(接口密钥)、数据库密码、第三方工单系统凭证只记录 secret_ref(密钥引用),不在文档、镜像和日志中出现真实值。
环境相关配置数据库地址、向量数据库地址、允许访问的域名按 environment(环境)隔离。

同一个镜像可以部署到不同环境,但不能把不同环境的密钥混在一起。

第 5 步:准备数据库和向量数据库​

上线前要明确两类数据:

每次升级前至少检查:

  • migration_status(迁移状态)是否为 not_required(不需要)或 completed(已完成)。
  • backup_status(备份状态)是否为 completed(已完成)。
  • 如果迁移失败,旧版本是否还能继续使用。
  • 如果向量索引要重建,旧索引是否保留到新索引验证完成。

向量数据库常被新手当成“可以重新生成的缓存”。这只说对了一半。小项目可以重建,但客户知识库大、Embedding(嵌入向量)成本高、索引时间长时,向量数据库就是关键资产,也要备份和版本管理。

第 6 步:拆分 API(应用程序接口)和 worker(后台任务)​

客服对话请求应该尽量保持在线响应;文档处理、批量索引、报表生成和通知重试可以交给 worker(后台任务)。

部署时要检查:

  • worker(后台任务)是否和 API 使用相同 env_profile(环境配置)或明确差异。
  • worker(后台任务)是否能访问数据库、向量数据库和文件存储。
  • 队列积压是否可见。
  • 失败任务是否有重试上限和人工处理方式。
  • worker(后台任务)异常是否会影响在线客服对话。

一个常见事故是:文档批量索引占满资源,导致客服对话也变慢。拆分 worker(后台任务)就是为了避免长任务和在线请求互相拖累。

第 7 步:设计 Nginx(反向代理服务器)入口​

Nginx(反向代理服务器)要处理的不只是转发。

能力客服工作台中的验收
域名入口用户通过 public_url(公开地址)访问,不直接访问内部端口。
TLS(传输层安全协议)浏览器显示安全连接,证书域名匹配且未过期。
路径路由前端页面、API、文件上传下载路径不冲突。
上传限制知识库文件上传有明确大小限制和错误提示。
超时控制Agent 长回答、流式响应或批量任务不会被入口层误断。
访问日志能看到请求状态、耗时和错误,但不泄露密钥和敏感内容。

AI Agent 系统尤其要关注超时。模型回答、RAG 检索、工具调用和外部接口都可能比普通网页请求更慢。入口层太激进,会让后端还在工作,前端已经失败。

第 8 步:设计健康检查​

健康检查至少分 3 层:

层级检查什么失败后怎么处理
进程健康服务是否启动、端口是否可访问自动重启或标记失败。
依赖健康数据库、向量数据库、模型配置、队列是否可用标记 degraded(降级)或 failed(失败)。
业务健康是否能完成一次最小客服链路阻止上线或触发回滚。

最小客服链路可以是:打开工作台、调用后端、读取一条知识库、生成一次 Mock(模拟)回答或真实模型回答、创建一条测试工单。不同环境可以使用不同深度的检查,但生产上线不能只看进程是否存活。

第 9 步:把日志和 trace_id(追踪编号)接进部署流程​

每次部署都应该产生 trace_id(追踪编号)或类似的追踪标识。它要能串联:

  • 部署事件。
  • 服务启动日志。
  • 健康检查日志。
  • Nginx(反向代理服务器)访问日志。
  • API 错误日志。
  • Agent 模型调用日志。
  • worker(后台任务)日志。

这样当上线后客服反馈“知识库问答变慢”,你可以查到是新版本引入、向量数据库异常、Nginx(反向代理服务器)超时,还是模型供应商延迟。

第 10 步:制定上线检查和回滚条件​

上线前就要写清楚什么时候继续、什么时候暂停、什么时候回滚。

条件处理
备份失败不允许生产上线。
数据库迁移失败不允许继续切换流量。
核心健康检查失败不标记上线成功。
非核心依赖异常可降级,但要告警和记录。
创建工单失败生产上线应暂停或回滚。
RAG 不可用视业务要求降级到人工或回滚。
错误率明显升高进入观察、修复或回滚。

回滚不是失败的耻辱,而是上线流程的一部分。一个能回滚的系统,比一个“只能向前硬修”的系统更可靠。

和后续章节的关系​

本章和后续章节的关系非常直接。

后续章节和本章的关系
第 2.12 章可观测性本章预留 trace_id(追踪编号)、日志和 health_status(健康状态),下一章展开日志、Tracing(调用链追踪)、成本、限流和告警。
安全与权限章节本章先讲密钥、环境变量和部署权限,后续会扩展到用户权限、数据权限和攻击防护。
多模型适配章节环境变量和 secret_ref(密钥引用)决定模型供应商、模型名称和调用模式如何切换。
RAG 章节向量数据库、索引版本和知识库重建都需要部署层支持。
测试章节部署验收需要自动化检查和最小业务链路测试。
作品集项目章节部署记录、上线检查和回滚方案可以直接作为作品集工程亮点。

部署不是最后一页附录,而是把前面所有能力放到真实环境里的桥梁。

版本与资料来源​

本章不提供完整源码,也不写可复制部署命令,重点讲部署设计、字段契约、上线验收、失败兜底和面试表达。

资料来源以官方文档和稳定工程实践为主:

过时风险:具体部署命令、平台功能、证书申请方式、容器运行时和云厂商能力会变化。进入真实项目交付前,应重新核对客户服务器环境、Docker(容器工具)版本、Nginx(反向代理服务器)版本、数据库版本、向量数据库版本、模型供应商要求和公司安全规范。

继续学习​