第十章 DevOps 与可观测性
平台化之后,交付不再是“把一个项目发布上去”。它会变成多服务、多环境、多租户、多配置、多团队协同的持续过程。
DevOps 的目标是让发布可重复,可观测性的目标是让问题可解释。两者合在一起,才是真正的工程效率。
10.1 CI/CD 流程
推荐流水线:
graph LR
A[Pull Request] --> B[Lint]
B --> C[Test]
C --> D[Build Image]
D --> E[Security Scan]
E --> F[Deploy Staging]
F --> G[Smoke Test]
G --> H[Manual Approval]
H --> I[Deploy Production]
每个阶段要有明确失败条件:
| 阶段 | 阻断条件 |
|---|---|
| Lint | 代码风格、静态检查失败 |
| Test | 单元测试、集成测试失败 |
| Build | 镜像构建失败 |
| Security Scan | 高危漏洞 |
| Smoke Test | 核心接口不可用 |
| Production | 健康检查失败自动回滚 |
10.2 环境分层
至少保留三套环境:
| 环境 | 用途 | 数据 |
|---|---|---|
| dev | 开发联调 | 可重置假数据 |
| staging | 发布前验证 | 脱敏生产样本 |
| prod | 生产服务 | 真实数据 |
不要让 staging 长期偏离生产。很多事故不是代码问题,而是生产和测试环境配置不一致。
10.3 配置中心与密钥管理
配置分为普通配置和秘密配置。
| 类型 | 示例 | 存储 |
|---|---|---|
| 普通配置 | 开关、阈值、URL | Config Center / Git |
| 秘密配置 | DB 密码、API Secret | Secret Manager |
密钥管理要求:
- 不进入 Git;
- 支持轮换;
- 访问有审计;
- 按环境隔离;
- 最小权限。
10.4 监控与报警
监控指标建议遵循 RED 和 USE。
RED 面向服务:
| 指标 | 含义 |
|---|---|
| Rate | 请求速率 |
| Errors | 错误数量和比例 |
| Duration | 请求耗时 |
USE 面向资源:
| 指标 | 含义 |
|---|---|
| Utilization | 使用率 |
| Saturation | 饱和度 |
| Errors | 错误数 |
报警要有行动意义。不要把所有 500 都直接告警到人,应该按影响范围、持续时间和核心链路分级。
10.5 日志与追踪
日志、指标、追踪三者要能互相跳转。
一次请求应贯穿:
trace_id -> gateway log -> service span -> db query -> event publish -> worker log
结构化日志字段:
| 字段 | 说明 |
|---|---|
trace_id | 链路 ID |
request_id | 请求 ID |
tenant_id | 租户 |
app_id | 应用 |
user_id | 用户 |
level | 日志级别 |
message | 信息 |
error | 错误 |
OpenTelemetry 可以统一采集 Trace、Metric 和 Log,后端可接 Jaeger、Tempo、Prometheus、Loki。
10.6 代码质量与安全审计
平台代码质量不只靠人工 Review。建议自动化检查:
| 检查 | 工具类型 |
|---|---|
| 静态分析 | lint、vet、staticcheck |
| 单元测试 | go test |
| 覆盖率 | coverage report |
| 依赖漏洞 | SCA |
| 密钥泄露 | secret scan |
| 镜像漏洞 | image scan |
| API 安全 | DAST |
安全扫描不是为了生成报告,而是为了在合并前阻断高风险变更。
10.7 自动伸缩与资源编排
Kubernetes / K3s 中常见伸缩方式:
| 方式 | 依据 |
|---|---|
| HPA | CPU、内存、自定义指标 |
| KEDA | 队列长度、事件源 |
| VPA | 单实例资源建议 |
| 定时伸缩 | 已知高峰前扩容 |
对 Worker 更推荐按队列积压伸缩,而不是 CPU。很多 Worker 是 I/O 密集型,CPU 不高但任务已堆积。
10.8 K3s 本地轻量部署
对中小团队或私有化交付,K3s 是一个现实选择。
适合场景:
| 场景 | 原因 |
|---|---|
| 本地研发集群 | 轻量、接近生产 |
| 私有化客户 | 运维成本低 |
| 边缘节点 | 资源占用小 |
| 小规模 SaaS | 起步快 |
基础组件:
| 组件 | 用途 |
|---|---|
| Traefik / Nginx Ingress | 入口路由 |
| Cert Manager | 证书 |
| Prometheus | 指标 |
| Loki | 日志 |
| ArgoCD | GitOps |
| Longhorn | 存储 |
10.9 发布与回滚策略
发布策略:
| 策略 | 优点 | 风险 |
|---|---|---|
| Rolling Update | 简单平滑 | 问题可能逐步扩散 |
| Blue-Green | 回滚快 | 资源成本高 |
| Canary | 风险可控 | 配置复杂 |
平台服务推荐核心链路使用 Canary,普通后台服务使用 Rolling Update。无论哪种方式,都必须有一键回滚和数据库迁移回滚策略。
10.10 DevOps 清单
| 检查项 | 标准 |
|---|---|
| CI | PR 自动检查 |
| CD | 发布可追踪、可回滚 |
| 环境 | dev/staging/prod 配置分离 |
| 密钥 | 不进仓库、可轮换 |
| 监控 | 关键链路有 SLO |
| 日志 | trace_id 全链路贯通 |
| 安全 | 高危问题阻断发布 |
| 伸缩 | API 和 Worker 分别扩缩容 |
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。