本文介绍商业软件工程师 (CSE) 团队在创建基于 Azure 的银行系统云转型时使用的模式和实现。
体系结构
saga 体系结构
下载此体系结构的 Visio 文件。
数据流
Contoso Bank 具有基于业务流程的 saga 的本地实现。 在它们的实现中,业务流程协调程序是一个有限状态机 (FSM)。 CSE 团队在体系结构设计中发现了以下挑战:
有状态业务流程协调程序上由于处理故障情况中的状态管理、超时和重启而造成的实现开销和复杂性。
用于跟踪每个事务请求的 saga 工作流状态的可观测性机制。
下面建议的解决方案通过编排方法实现 saga 模式,该编排方法使用基于 Azure 的无服务器体系结构。 它使用以下服务来解决相关挑战:
Azure Functions - 用于 saga 参与者的实现。
Azure Durable Functions - 用于编排,旨在提供工作流编程模型和状态管理。
Azure 事件中心 - 用作数据流式处理平台。
Azure Cosmos DB - 用作存储数据模型的数据库服务。
有关详细信息,请参阅 Microservices.io 上的 Pattern: Saga(模式:saga)。
saga 模式
saga 是一种适用于分布式交易管理的模式,通常应用于金融服务。 出现了一个新方案,其中操作分布在各个应用程序和数据库。 在该新方案中,客户需要新的体系结构和实现设计,以确保金融交易的数据一致性。
传统的“原子性、一致性、隔离和持续性 (ACID)”属性方法不再合适。 这是因为操作的数据现在跨越隔离的数据库。 使用 saga 模式可通过消息驱动的本地事务序列来协调工作流以确保数据一致性,从而解决此挑战。
KEDA 体系结构
下载此体系结构的 Visio 文件。
有关 KEDA 缩放程序的详细信息,请参阅以下 KEDA 文档:
Azure 事件中心触发器:读取适用于 Java 应用程序的 Azure Blob 存储 URI 的兼容性。 它使用事件处理器主机 SDK,从而能够缩放从事件中心读取高级消息队列协议 (AMQP) 消息的 Java 使用者。 以前,事件中心缩放程序仅适用于 Azure Functions。
Apache Kafka 主题触发器:支持 SASL_SSL PLAIN 身份验证,从而能够缩放从事件中心读取 Kafka 协议消息的 Java 使用者。
工作流
CSE 在 Azure Kubernetes 服务 (AKS) 群集上部署了应用程序。 解决方案需要根据传入消息计数自动横向扩展应用程序。 CSE 团队使用了 Kafka 缩放程序来检测解决方案是应激活还是停用应用程序部署。 Kafka 缩放程序还会为特定事件源馈送自定义指标。 此示例中的事件源是 Azure 事件中心。
当 Azure 事件中心的消息数超过阈值时,KEDA 会促使 Pod 进行横向扩展,从而增加应用程序处理的消息数。 当事件源中的消息数低于阈值时,将发生 Pod 的自动纵向缩减。
CSE 团队使用了 Apache Kafka 主题触发器。 它使解决方案能够在进程超过某个时间间隔内使用的最大消息数时缩放 EFT 处理器服务。
支持 Java 的 KEDA
Kubernetes 事件驱动的自动缩放程序 (KEDA) 可确定解决方案应如何缩放 Kubernetes 中的任何容器。 决策基于它需要处理的事件数。 KEDA 具有不同类型的缩放程序,支持多种类型的工作负载和 Azure Functions,并且与供应商无关。 请转到 Autoscaling Java applications with KEDA using Azure Event Hubs(使用 KEDA 和 Azure 事件中心自动缩放 Java 应用程序),了解有效的示例。
负载测试体系结构
下载此体系结构的 Visio 文件。
该解决方案将 Azure 负载测试与 JMeter (JMX) 脚本配合使用。 Azure 负载测试是一项完全托管的负载测试服务,可用于生成大规模负载。 该服务模拟应用程序的流量,而不管它们托管在哪里,并且可以利用现有的 JMeter 脚本。
Workflow
Azure 负载测试允许使用 Azure 门户或 Azure CLI 手动创建负载测试。 或者,可以配置 CI/CD 管道以与 Azure 负载测试集成。 这样做可以使负载测试自动化,从而作为 CI/CD 工作流程的一部分不断验证应用程序的性能和稳定性。
- 通过创建和运行负载测试,了解 Azure 负载测试是如何工作的。
- 使用新的或现有的 JMeter 脚本,并配置 CI/CD 工作流以运行负载测试。
方案详细信息
本方案有助于更好地了解银行业在迁移到云时的总体模式和实现。
后续步骤
了解有关组件技术的详细信息:
相关资源
探索相关体系结构: