1. 课程导论与目标
1.1 蓝绿发布概念
蓝绿部署(Blue-Green Deployment)是一种零停机或接近零停机的发布策略,通过维护两套完全独立的生产环境(蓝环境与绿环境)来实现流量平滑切换。在任意时刻,只有一套环境承载全部生产流量,另一套环境保持空闲或用于新版本验证。
| 环境 | 状态 | 说明 |
|---|---|---|
| 蓝环境 | 当前生产(Active) | 运行稳定版本,承载全部用户流量 |
| 绿环境 | 待发布(Standby) | 部署新版本,通过内部验证后切换流量 |
蓝绿发布的核心优势在于:
- 瞬时回滚:若新版本出现问题,只需将流量切回原环境,无需重新部署。
- 环境隔离:新旧版本运行在独立基础设施上,避免资源冲突。
- 验证窗口:新版本可在生产流量接入前进行完整的功能与性能验证。
实践要点:蓝绿发布要求两套环境具备相同的资源配置与数据同步机制。数据库向后兼容是常见挑战,建议采用读写分离或双写策略。
1.2 门禁系统作用
发布门禁(Release Gate)是部署流水线中的质量关卡,在蓝绿切换前自动执行一系列验证检查,只有全部检查通过后才允许流量切换。门禁系统是保障发布安全的核心防线。
| 门禁类型 | 检查内容 | 通过标准 |
|---|---|---|
| 日志错误门禁 | 新版本日志中 ERROR / FATAL 级别条目数量 | 错误数 ≤ 阈值(如 0) |
| 响应延迟门禁 | P95 / P99 响应时间对比基线 | 增幅 ≤ 10% |
| 错误率门禁 | HTTP 5xx 比例或业务异常率 | 错误率 ≤ 0.1% |
| 资源水位门禁 | CPU / 内存 / 连接数使用率 | 使用率 ≤ 80% |
常见误区:门禁阈值设置过松会导致无效检查,设置过严则频繁阻塞发布。建议基于历史发布数据动态调整阈值,并保留人工强制放行通道。
1.3 Loki 日志系统简介
Grafana Loki 是受 Prometheus 启发设计的水平可扩展、高可用、多租户日志聚合系统。与 Elasticsearch 等全文索引方案不同,Loki 采用仅索引元数据的设计哲学,将日志内容存储在对象存储中,大幅降低存储与运维成本。
| 特性 | Loki | Elasticsearch |
|---|---|---|
| 索引策略 | 仅索引标签(Label),不索引日志内容 | 全文倒排索引 |
| 存储成本 | 低(对象存储 + 压缩) | 高(索引占用大量磁盘) |
| 查询语言 | LogQL(类 PromQL 语法) | Query DSL(JSON 格式) |
| 与 Prometheus 集成 | 原生集成,标签体系一致 | 需额外适配 |
| 适用场景 | Kubernetes 环境、指标与日志统一 | 复杂全文搜索、业务分析 |
Loki 的核心组件包括:
- Distributor:接收日志写入请求,验证并分发到 Ingester。
- Ingester:将日志数据批量写入对象存储,同时维护近期数据的内存缓存。
- Querier:处理 LogQL 查询请求,从 Ingester 和对象存储中获取日志。
- Query Frontend:查询缓存、分片与加速层。
- Compactor:合并与重排存储中的日志块,提升查询效率。
1.4 课程整体目标与受众
本课程旨在培养学员构建基于 Loki 的蓝绿发布门禁日志查询接口的完整能力,从架构设计到代码实现,再到生产部署与监控。
| 维度 | 目标 |
|---|---|
| 知识目标 | 掌握蓝绿发布原理、门禁系统设计模式、Loki 架构与 LogQL 查询语法 |
| 技能目标 | 使用 Python 开发 RESTful 门禁查询接口,集成 Loki HTTP API,编写可测试的异步代码 |
| 工程目标 | 设计高可用接口架构,配置监控告警,编写运维文档与自动化测试 |
| 交付目标 | 产出可部署的接口服务、Docker 镜像、Kubernetes 部署清单与 CI/CD 流水线配置 |
目标受众:
- SRE / 运维开发工程师:需要构建或优化发布门禁系统。
- 后端开发工程师:希望掌握日志查询接口开发与 Loki 集成。
- 平台工程团队成员:负责 CI/CD 流水线质量门禁建设。
- 技术负责人:评估蓝绿发布与日志门禁的技术选型与落地路径。
前置要求:学员应具备 Python 基础编程能力,了解 RESTful API 设计概念,对 Kubernetes 和 Prometheus 有基本认知。无需提前掌握 Loki 或蓝绿发布经验。