4Building Microservices(第2版)

部署

部署策略

CI/CD容器化Kubernetes基础设施即代码

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第4章:部署(Deploying)

一、导读

1.1 本章学习目标

第4章讲解微服务的部署策略。微服务的独立部署是其核心优势之一,但也带来了部署复杂性的挑战。

1.2 为什么第四章如此重要

部署是微服务价值实现的关键。如果部署过程痛苦且缓慢,微服务的独立部署优势就无法发挥。

1.3 核心问题引导

如何实现微服务的独立部署?

CI/CD 管道如何设计?

容器化如何简化部署?

基础设施即代码是什么?


二、核心概念详解

4.1 CI/CD 管道

持续集成(CI):
- 代码提交 → 自动构建 → 自动测试 → 代码质量检查

持续部署(CD):
- 构建产物 → 部署到测试环境 → 自动化验收测试 → 部署到生产环境

关键原则:
- 每次提交都触发构建
- 构建必须快速(< 10分钟)
- 测试必须可靠
- 部署必须可重复

4.2 容器化

Docker 容器化微服务:
- 每个服务一个 Docker 镜像
- 镜像包含所有依赖
- 环境一致性:开发 = 测试 = 生产
- 快速启动和停止

Kubernetes 编排:
- 自动调度
- 自动伸缩
- 服务发现和负载均衡
- 滚动更新和回滚

4.3 基础设施即代码

使用代码管理基础设施:
- Terraform:云资源管理
- Ansible:配置管理
- Helm:Kubernetes 应用管理

优势:
- 可重复:相同代码创建相同环境
- 可审计:所有变更都有记录
- 可版本化:使用 Git 管理

三、实战案例

4.1 CI/CD 管道设计

yaml
# GitHub Actions 示例
name: CI/CD Pipeline
on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: ./gradlew build
      - name: Test
        run: ./gradlew test
      - name: Docker Build
        run: docker build -t myapp:${{ github.sha }} .
      - name: Deploy
        run: kubectl set image deployment/myapp myapp=myapp:${{ github.sha }}

四、本章小结

微服务的部署需要完善的 CI/CD 管道、容器化技术和基础设施即代码。这些工具和实践使独立部署成为可能。


五、思考与练习

如何设计微服务的 CI/CD 管道?

容器化有什么优势?

基础设施即代码如何实践?

如何处理微服务的配置管理?

如何实现零停机部署?


4/8部署
0%