云原生架构设计模式
系列导读:本篇将深入讲解云原生架构的核心设计模式与最佳实践。
文章目录
- 一、云原生概述
- 1.1 云原生定义
- 1.2 云原生架构特征
- 二、核心设计模式
- 2.1 Sidecar 模式
- 2.2 Ambassador 模式
- 2.3 Adapter 模式
- 三、弹性设计模式
- 3.1 重试模式
- 3.2 断路器模式
- 3.3 舱壁模式
- 3.4 限流模式
- 四、数据设计模式
- 4.1 CQRS 模式
- 4.2 事件溯源模式
- 4.3 Saga 模式
- 五、最佳实践
- 5.1 12-Factor App
- 5.2 健康检查
- 5.3 优雅关闭
- 总结
一、云原生概述
1.1 云原生定义
┌─────────────────────────────────────────────────────────────┐ │ 云原生核心要素 │ ├─────────────────────────────────────────────────────────────┤ │ 📦 容器化:Docker、containerd │ │ 🔄 编排调度:Kubernetes │ │ 🌐 服务网格:Istio、Linkerd │ │ ⚡ 不可变基础设施:基础设施即代码 │ │ 📊 声明式 API:YAML 配置 │ └─────────────────────────────────────────────────────────────┘1.2 云原生架构特征
| 特征 | 说明 |
|---|---|
| 弹性伸缩 | 自动扩缩容 |
| 故障自愈 | 自动恢复 |
| 可观测性 | 监控、日志、追踪 |
| 持续交付 | 自动化部署 |
| 松耦合 | 服务独立 |
二、核心设计模式
2.1 Sidecar 模式
# Sidecar 容器示例apiVersion:v1kind:Podmetadata:name:app-with-sidecarspec:containers:-name:appimage:myapp:v1ports:-containerPort:8080-name:sidecarimage:log-collector:v1volumeMounts:-name:logsmountPath:/var/logvolumes:-name:logsemptyDir:{}2.2 Ambassador 模式
┌─────────────────────────────────────────────────────────────┐ │ Pod │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ Application │◄──►│ Ambassador │ │ │ │ Container │ │ (代理) │ │ │ └─────────────┘ └─────────────┘ │ │ │ │ │ ▼ │ │ 外部服务连接 │ └─────────────────────────────────────────────────────────────┘2.3 Adapter 模式
# Adapter 容器示例containers:-name:appimage:myapp:v1ports:-containerPort:8080-name:adapterimage:metrics-adapter:v1# 将应用指标转换为标准 Prometheus 格式三、弹性设计模式
3.1 重试模式
// 重试配置@Retryable(value={ServiceUnavailableException.class},maxAttempts=3,backoff=@Backoff(delay=1000,multiplier=2))publicOrdergetOrder(StringorderId){returnorderClient.getOrder(orderId);}3.2 断路器模式
// 断路器配置@CircuitBreaker(name="orderService",fallbackMethod="getOrderFallback")publicOrdergetOrder(StringorderId){returnorderClient.getOrder(orderId);}publicOrdergetOrderFallback(StringorderId,Exceptione){returnnewOrder(orderId,"默认订单",0);}3.3 舱壁模式
# 线程池隔离resilience4j:threadpool:orderService:coreThreadPoolSize:10maxThreadPoolSize:20queueCapacity:1003.4 限流模式
// 限流配置@RateLimiter(name="orderService")publicOrdercreateOrder(OrderRequestrequest){returnorderService.create(request);}四、数据设计模式
4.1 CQRS 模式
┌─────────────────────────────────────────────────────────────┐ │ CQRS 架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Command (写) Query (读) │ │ ┌─────────┐ ┌─────────┐ │ │ │ Command │ │ Query │ │ │ │ Handler │ │ Handler │ │ │ └────┬────┘ └────┬────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────┐ ┌─────────┐ │ │ │ Write DB│ │ Read DB │ │ │ └─────────┘ └─────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘4.2 事件溯源模式
// 事件存储publicclassEventStore{publicvoidappend(StringaggregateId,List<Event>events){events.forEach(event->{EventEntryentry=newEventEntry(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 健康检查
# Kubernetes 健康检查livenessProbe:httpGet:path:/health/liveport:8080initialDelaySeconds:30periodSeconds:10readinessProbe:httpGet:path:/health/readyport:8080initialDelaySeconds:5periodSeconds:5startupProbe:httpGet:path:/health/startupport:8080failureThreshold:30periodSeconds:105.3 优雅关闭
// Spring Boot 优雅关闭@BeanpublicGracefulShutdowngracefulShutdown(){returnnewGracefulShutdown();}publicclassGracefulShutdownimplementsTomcatConnectorCustomizer,ApplicationListener<ContextClosedEvent>{privateConnectorconnector;@Overridepublicvoidcustomize(Connectorconnector){this.connector=connector;}@OverridepublicvoidonApplicationEvent(ContextClosedEventevent){connector.pause();try{Thread.sleep(30000);// 等待请求处理完成}catch(InterruptedExceptione){Thread.currentThread().interrupt();}}}总结
✅云原生概述:容器化、编排、服务网格
✅核心设计模式:Sidecar、Ambassador、Adapter
✅弹性设计模式:重试、断路器、舱壁、限流
✅数据设计模式:CQRS、事件溯源、Saga
✅最佳实践:12-Factor、健康检查、优雅关闭
本系列完结
作者:刘~浪地球
系列:云原生与容器(五)
更新时间:2026-04-15
