云架构设计模式是企业构建可靠、可扩展、安全且经济高效的云应用的核心知识体系。对于 SAP 生态而言,SAP BTP(Business Technology Platform)提供了完整的云原生运行环境,理解云架构设计模式有助于在 BTP 上构建高质量的扩展应用。本文系统介绍云原生基础、核心设计模式、SAP BTP 架构选型以及企业级安全与成本优化实践。
12-Factor App 是构建云原生应用的方法论,由 Adam Wiggins 于 2011 年提出,至今仍是云应用设计的基石:
| 因子 | 原则 | SAP BTP 实践 |
|---|---|---|
| 1. 代码库 | 一份代码库,多次部署 | Git + SAP BTP 部署流水线 |
| 2. 依赖 | 显式声明并隔离依赖 | package.json / pom.xml / requirements.txt |
| 3. 配置 | 配置存储在环境变量中 | SAP BTP 环境变量 + Destination 服务 |
| 4. 后端服务 | 将后端服务当作附加资源 | SAP BTP 服务实例(HANA、XSUAA 等) |
| 5. 构建/发布/运行 | 严格分离构建和运行阶段 | CF Buildpack 构建 → Droplet → 运行 |
| 6. 进程 | 应用以无状态进程运行 | Cloud Foundry 应用实例无状态 |
| 7. 端口绑定 | 通过端口绑定导出服务 | CF 应用监听 PORT 环境变量 |
| 8. 并发 | 通过进程模型扩展 | CF 实例水平伸缩 |
| 9. 易处理 | 快速启动和优雅关闭 | CF 健康检查与优雅关闭 |
| 10. 开发/生产一致 | 保持开发、预发布、生产环境尽可能一致 | SAP BTP 子账户环境隔离 |
| 11. 日志 | 将日志视为事件流 | SAP BTP Application Logging Service |
| 12. 管理进程 | 将管理任务作为一次性进程运行 | CF Task / SAP Job Scheduling Service |
容器化是云原生应用的标准打包方式:
Kubernetes(K8s)是容器编排的事实标准,SAP BTP 提供了 Kyma 运行时作为托管的 Kubernetes 环境:
| K8s 概念 | 说明 | 在 SAP BTP Kyma 中的对应 |
|---|---|---|
| Pod | 最小部署单元,包含一个或多个容器 | Kyma Pod |
| Deployment | 管理 Pod 的副本集和滚动更新 | Kyma Deployment |
| Service | 为 Pod 提供稳定的网络端点 | Kyma Service + API Rule |
| Ingress | 管理外部 HTTP 访问路由 | API Rule(基于 Istio) |
| ConfigMap / Secret | 管理配置和敏感信息 | Kyma ConfigMap / Secret |
| HPA | 水平 Pod 自动伸缩 | Kyma HPA |
微服务架构将应用拆分为小型、独立部署的服务,每个服务围绕一个业务能力构建:
| 设计考量 | 推荐做法 | 反模式 |
|---|---|---|
| 服务拆分粒度 | 按业务域拆分(DDD 限界上下文) | 按技术层拆分(UI/BL/DA层) |
| 服务间通信 | 同步用 REST/gRPC,异步用事件 | 所有通信都用同步调用 |
| 数据管理 | 每个服务有自己的数据库 | 多个服务共享数据库 |
| 服务发现 | 服务注册 + 发现(如 Kubernetes DNS) | 硬编码服务地址 |
| 故障处理 | 熔断器(Circuit Breaker)+ 重试 | 无限重试或不重试 |
事件驱动架构通过异步事件实现服务间解耦:
SAP Event Mesh 支持的协议:AMQP 1.0、MQTT 3.1.1、HTTP REST(Webhook)。S/4HANA Cloud 通过 SAP Event Mesh 发布标准业务事件(如 BusinessPartner.Created、SalesOrder.Changed),扩展应用可以订阅这些事件触发后续处理。
CQRS(Command Query Responsibility Segregation)将读写操作分离到不同的模型:
SAP 场景示例:S/4HANA 作为命令侧(OLTP),SAP HANA Cloud 的计算视图或 SAP Analytics Cloud 作为查询侧(OLAP),两者通过数据复制或事件同步保持最终一致。
Saga 模式解决分布式事务问题——当多个服务需要协调完成一个业务操作时,不能用传统的 ACID 事务:
| 模式 | 编排方式 | 优势 | 劣势 |
|---|---|---|---|
| 编排式 Saga(Choreography) | 各服务通过事件协调,无中央协调器 | 松耦合,无单点 | 流程不直观,调试困难 |
| 协调式 Saga(Orchestration) | 中央协调器控制流程步骤 | 流程清晰,易于监控 | 协调器是单点 |
SAP 场景示例:订单创建涉及库存扣减、财务过账、物流创建等多个步骤,任一步骤失败需要补偿(回滚已完成步骤)。在 SAP BTP 上,可使用 SAP Event Mesh 实现编排式 Saga,或使用 SAP Workflow 服务实现协调式 Saga。
API Gateway 是微服务架构的统一入口,负责请求路由、认证、限流、日志等横切关注点:
在 SAP BTP 上,SAP API Management 提供 API Gateway 功能,支持 API 代理、策略配置、流量管理和开发者门户。
| 对比项 | Cloud Foundry | Kyma(Kubernetes) | ABAP Environment |
|---|---|---|---|
| 编程模型 | Buildpack 驱动,无需管理容器 | 容器化,完全控制运行时 | ABAP 云开发,受管运行时 |
| 适用语言 | Node.js、Java、Python、Go | 任何语言(需容器化) | ABAP(云子集) |
| 部署方式 | cf push | kubectl apply / Helm | |
| 伸缩方式 | CF 实例伸缩 | HPA / KPA 自动伸缩 | 实例数调整 |
| 服务网格 | 无 | Istio(内置) | 无 |
| 服务器无状态 | 是 | 是 | 是(云版 ABAP) |
| 适用场景 | 标准 Web 应用、API 服务 | 复杂微服务、AI 工作负载 | ABAP 开发者的云原生开发 |
SAP BTP Integration Suite 是企业集成的核心平台,提供以下能力:
SAP API Management 的核心功能:
| 功能 | 说明 | 典型使用场景 |
|---|---|---|
| API 代理 | 在客户端和后端 API 之间插入代理层 | 统一入口、隐藏后端细节 |
| 策略配置 | 在请求/响应流中执行预定义策略 | 认证、限流、数据脱敏 |
| 流量管理 | API 调用配额和速率限制 | 防止 API 滥用 |
| 开发者门户 | API 目录与自助订阅 | 内部/外部开发者自助获取 API 访问 |
| 分析监控 | API 调用统计与告警 | 监控 API 健康状态 |
零信任(Zero Trust)的核心原则:永不信任,始终验证。
| 认证方式 | 适用场景 | SAP BTP 实现 |
|---|---|---|
| OAuth 2.0 授权码流 | Web 应用用户登录 | XSUAA + SAP ID Service / IdP |
| OAuth 2.0 客户端凭证 | 服务间通信 | XSUAA 客户端凭证 |
| SAML 2.0 | 企业 SSO 集成 | SAP BTP 与企业 IdP 联邦 |
| JWT 令牌 | API 调用认证 | XSUAA 签发的 JWT |
| OIDC | 移动应用/SPA 认证 | XSUAA + OIDC 端点 |
预留实例(Reserved Instance)是降低云成本的核心手段:
自动伸缩确保资源供给匹配实际需求:
FinOps(Cloud Financial Operations)是将财务责任引入云成本管理的实践:
| FinOps 阶段 | 核心活动 | SAP BTP 工具 |
|---|---|---|
| Inform(可见性) | 建立成本可见性,按团队/项目分摊 | SAP BTP Cockpit 账单、使用报告 |
| Optimize(优化) | 识别浪费、优化资源配置 | 资源利用率报告、伸缩策略调整 |
| Operate(运营) | 建立持续成本管控流程 | 预算告警、审批流程 |
常见成本浪费及优化: