系列导读本篇将深入讲解云原生架构的核心设计模式与最佳实践。文章目录一、云原生概述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 App5.2 健康检查5.3 优雅关闭总结一、云原生概述1.1 云原生定义┌─────────────────────────────────────────────────────────────┐ │ 云原生核心要素 │ ├─────────────────────────────────────────────────────────────┤ │ 容器化Docker、containerd │ │ 编排调度Kubernetes │ │ 服务网格Istio、Linkerd │ │ ⚡ 不可变基础设施基础设施即代码 │ │ 声明式 APIYAML 配置 │ └─────────────────────────────────────────────────────────────┘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},maxAttempts3,backoffBackoff(delay1000,multiplier2))publicOrdergetOrder(StringorderId){returnorderClient.getOrder(orderId);}3.2 断路器模式// 断路器配置CircuitBreaker(nameorderService,fallbackMethodgetOrderFallback)publicOrdergetOrder(StringorderId){returnorderClient.getOrder(orderId);}publicOrdergetOrderFallback(StringorderId,Exceptione){returnnewOrder(orderId,默认订单,0);}3.3 舱壁模式# 线程池隔离resilience4j:threadpool:orderService:coreThreadPoolSize:10maxThreadPoolSize:20queueCapacity:1003.4 限流模式// 限流配置RateLimiter(nameorderService)publicOrdercreateOrder(OrderRequestrequest){returnorderService.create(request);}四、数据设计模式4.1 CQRS 模式┌─────────────────────────────────────────────────────────────┐ │ CQRS 架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Command (写) Query (读) │ │ ┌─────────┐ ┌─────────┐ │ │ │ Command │ │ Query │ │ │ │ Handler │ │ Handler │ │ │ └────┬────┘ └────┬────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────┐ ┌─────────┐ │ │ │ Write DB│ │ Read DB │ │ │ └─────────┘ └─────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘4.2 事件溯源模式// 事件存储publicclassEventStore{publicvoidappend(StringaggregateId,ListEventevents){events.forEach(event-{EventEntryentrynewEventEntry(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,ApplicationListenerContextClosedEvent{privateConnectorconnector;Overridepublicvoidcustomize(Connectorconnector){this.connectorconnector;}OverridepublicvoidonApplicationEvent(ContextClosedEventevent){connector.pause();try{Thread.sleep(30000);// 等待请求处理完成}catch(InterruptedExceptione){Thread.currentThread().interrupt();}}}总结✅云原生概述容器化、编排、服务网格✅核心设计模式Sidecar、Ambassador、Adapter✅弹性设计模式重试、断路器、舱壁、限流✅数据设计模式CQRS、事件溯源、Saga✅最佳实践12-Factor、健康检查、优雅关闭本系列完结作者刘~浪地球系列云原生与容器五更新时间2026-04-15