云原生架构设计模式

系列导读:本篇将深入讲解云原生架构的核心设计模式与最佳实践。


文章目录

    • 一、云原生概述
      • [1.1 云原生定义](#1.1 云原生定义)
      • [1.2 云原生架构特征](#1.2 云原生架构特征)
    • 二、核心设计模式
      • [2.1 Sidecar 模式](#2.1 Sidecar 模式)
      • [2.2 Ambassador 模式](#2.2 Ambassador 模式)
      • [2.3 Adapter 模式](#2.3 Adapter 模式)
    • 三、弹性设计模式
      • [3.1 重试模式](#3.1 重试模式)
      • [3.2 断路器模式](#3.2 断路器模式)
      • [3.3 舱壁模式](#3.3 舱壁模式)
      • [3.4 限流模式](#3.4 限流模式)
    • 四、数据设计模式
      • [4.1 CQRS 模式](#4.1 CQRS 模式)
      • [4.2 事件溯源模式](#4.2 事件溯源模式)
      • [4.3 Saga 模式](#4.3 Saga 模式)
    • 五、最佳实践
      • [5.1 12-Factor App](#5.1 12-Factor App)
      • [5.2 健康检查](#5.2 健康检查)
      • [5.3 优雅关闭](#5.3 优雅关闭)
    • 总结

一、云原生概述

1.1 云原生定义

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    云原生核心要素                           │
├─────────────────────────────────────────────────────────────┤
│  📦 容器化:Docker、containerd                              │
│  🔄 编排调度:Kubernetes                                    │
│  🌐 服务网格:Istio、Linkerd                                │
│  ⚡ 不可变基础设施:基础设施即代码                          │
│  📊 声明式 API:YAML 配置                                   │
└─────────────────────────────────────────────────────────────┘

1.2 云原生架构特征

特征 说明
弹性伸缩 自动扩缩容
故障自愈 自动恢复
可观测性 监控、日志、追踪
持续交付 自动化部署
松耦合 服务独立

二、核心设计模式

2.1 Sidecar 模式

yaml 复制代码
# Sidecar 容器示例
apiVersion: v1
kind: Pod
metadata:
  name: app-with-sidecar
spec:
  containers:
  - name: app
    image: myapp:v1
    ports:
    - containerPort: 8080
  - name: sidecar
    image: log-collector:v1
    volumeMounts:
    - name: logs
      mountPath: /var/log
  volumes:
  - name: logs
    emptyDir: {}

2.2 Ambassador 模式

复制代码
┌─────────────────────────────────────────────────────────────┐
│                      Pod                                    │
│  ┌─────────────┐    ┌─────────────┐                        │
│  │ Application │◄──►│ Ambassador  │                        │
│  │  Container  │    │  (代理)     │                        │
│  └─────────────┘    └─────────────┘                        │
│                           │                                 │
│                           ▼                                 │
│                    外部服务连接                             │
└─────────────────────────────────────────────────────────────┘

2.3 Adapter 模式

yaml 复制代码
# Adapter 容器示例
containers:
- name: app
  image: myapp:v1
  ports:
  - containerPort: 8080
- name: adapter
  image: metrics-adapter:v1
  # 将应用指标转换为标准 Prometheus 格式

三、弹性设计模式

3.1 重试模式

java 复制代码
// 重试配置
@Retryable(
    value = {ServiceUnavailableException.class},
    maxAttempts = 3,
    backoff = @Backoff(delay = 1000, multiplier = 2)
)
public Order getOrder(String orderId) {
    return orderClient.getOrder(orderId);
}

3.2 断路器模式

java 复制代码
// 断路器配置
@CircuitBreaker(
    name = "orderService",
    fallbackMethod = "getOrderFallback"
)
public Order getOrder(String orderId) {
    return orderClient.getOrder(orderId);
}

public Order getOrderFallback(String orderId, Exception e) {
    return new Order(orderId, "默认订单", 0);
}

3.3 舱壁模式

yaml 复制代码
# 线程池隔离
resilience4j:
  threadpool:
    orderService:
      coreThreadPoolSize: 10
      maxThreadPoolSize: 20
      queueCapacity: 100

3.4 限流模式

java 复制代码
// 限流配置
@RateLimiter(name = "orderService")
public Order createOrder(OrderRequest request) {
    return orderService.create(request);
}

四、数据设计模式

4.1 CQRS 模式

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    CQRS 架构                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Command (写)              Query (读)                       │
│  ┌─────────┐               ┌─────────┐                     │
│  │ Command │               │  Query  │                     │
│  │ Handler │               │ Handler │                     │
│  └────┬────┘               └────┬────┘                     │
│       │                         │                           │
│       ▼                         ▼                           │
│  ┌─────────┐               ┌─────────┐                     │
│  │ Write DB│               │ Read DB │                     │
│  └─────────┘               └─────────┘                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4.2 事件溯源模式

java 复制代码
// 事件存储
public class EventStore {
    public void append(String aggregateId, List<Event> events) {
        events.forEach(event -> {
            EventEntry entry = new EventEntry(
                aggregateId,
                event.getType(),
                JSON.toJSONString(event),
                LocalDateTime.now()
            );
            eventRepository.save(entry);
        });
    }
}

4.3 Saga 模式

复制代码
Saga 编排模式:

订单服务 ──► 支付服务 ──► 库存服务 ──► 物流服务
    │            │            │            │
    │            │            │            │
    ▼            ▼            ▼            ▼
  成功         成功         失败         回滚
    │            │            │            │
    │            │            └─── 补偿 ───┘
    │            └─── 补偿 ───┘
    └─── 补偿 ───┘

五、最佳实践

5.1 12-Factor App

原则 说明
Codebase 一份代码,多次部署
Dependencies 显式声明依赖
Config 配置与代码分离
Backing Services 后端服务作为资源
Build, Release, Run 严格分离构建和运行
Processes 无状态进程
Port Binding 端口绑定服务
Concurrency 并发扩展
Disposability 快速启动和优雅关闭
Dev/Prod Parity 开发生产环境一致
Logs 日志作为事件流
Admin Processes 管理任务作为一次性进程

5.2 健康检查

yaml 复制代码
# Kubernetes 健康检查
livenessProbe:
  httpGet:
    path: /health/live
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10

readinessProbe:
  httpGet:
    path: /health/ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5

startupProbe:
  httpGet:
    path: /health/startup
    port: 8080
  failureThreshold: 30
  periodSeconds: 10

5.3 优雅关闭

java 复制代码
// Spring Boot 优雅关闭
@Bean
public GracefulShutdown gracefulShutdown() {
    return new GracefulShutdown();
}

public class GracefulShutdown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {
    private Connector connector;
    
    @Override
    public void customize(Connector connector) {
        this.connector = connector;
    }
    
    @Override
    public void onApplicationEvent(ContextClosedEvent event) {
        connector.pause();
        try {
            Thread.sleep(30000);  // 等待请求处理完成
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

总结

云原生概述 :容器化、编排、服务网格

核心设计模式 :Sidecar、Ambassador、Adapter

弹性设计模式 :重试、断路器、舱壁、限流

数据设计模式 :CQRS、事件溯源、Saga

最佳实践:12-Factor、健康检查、优雅关闭

本系列完结


作者 :刘~浪地球
系列 :云原生与容器(五)
更新时间:2026-04-15

相关推荐
涛声依旧393164 小时前
运维项目实战:Nginx+Docker 部署HTTPS站点+身份认证
运维·nginx·docker·云原生·容器·https
crossoverJie4 小时前
从企业版 Istio 迁移到社区版:一场给高速行驶汽车换轮胎的实践
云原生·汽车·istio
inner2224 小时前
kubeasz部署k8s集群1.37
云原生·容器·kubernetes
tiger从容淡定是人生4 小时前
金融系统 Summit Backend 的 Docker 化实践:CI/CD、测试与安全性的工程经验总结
运维·docker·云原生·容器·eureka·金融
indexsunny4 小时前
互联网大厂Java面试实战:基于微服务与云原生的电商场景问答解析
java·数据库·spring boot·docker·微服务·云原生·kubernetes
.NET修仙日记5 小时前
2026 .NET 面试八股文:高频题 + 答案 + 原理(基础核心篇)
云原生·面试·职场和发展·c#·.net·面试题·微软技术
Hachi被抢先注册了21 小时前
Docker学习记录
java·云原生·eureka
阿里云云原生21 小时前
安全养虾实践:当 AI 管家遇到线上预警,我的提效破局之路
云原生
阿里云云原生1 天前
相约 GenAICon 北京站:聊聊从环境工程出发,如何“简化”多源实时上下文?
云原生