扩展

我们先从可扩展性的一般定义、类型以及它为何有用开始。

可扩展性 是指系统通过添加资源来应对负载增加的能力。在分布式系统中,向现有节点添加资源(如 CPU、内存和存储)的能力称为 垂直扩展(向上/向下),而 水平扩展(向外/向内)是指向系统添加额外节点的能力。以下段落讨论将 水平扩展(例如,向外扩展或无共享)应用于流数据管道的常见概念。

Spring Cloud Data Flow 中的 流处理 在架构上实现为一组独立的事件驱动的流应用程序,这些应用程序使用所选的消息传递中间件(例如 RabbitMQ 或 Apache Kafka)进行连接。独立应用程序的集合在运行时组合在一起,构成一个流数据管道。流数据管道应对数据负载增加的能力取决于以下特性

  • 消息传递中间件数据分区 是一种广泛使用的扩展消息传递中间件基础架构的技术。Spring Cloud Data Flow 通过 Spring Cloud Stream 为 流分区 提供了出色的支持。
  • 事件驱动的应用程序:Spring Cloud Stream 支持使用多个消费者实例并行处理数据,这通常称为应用程序扩展。

下图展示了一个基于数据分区和应用程序并行性的典型横向扩展架构

SCDF Stream Scaling

Kubernetes 和 Cloud Foundry 等平台为操作员提供了用于控制系统负载的扩展功能。例如,操作员可以使用 cf scale 在 Cloud Foundry 中扩展应用程序,同样,也可以使用 kubectl scale 在 Kubernetes 中扩展应用程序。他们还可以借助 Cloud Foundry 中的 App Autoscaler 和 Kubernetes 中的 HPAKEDA 来启用自动扩展功能。自动扩展通常由 CPU 或内存限制阈值或消息队列深度和主题偏移滞后指标决定。

虽然扩展发生在 Spring Cloud Data Flow 之外,但被扩展的应用程序可以自动响应和处理上游负载。开发人员只需通过设置属性(例如 partitionKeyExpressionpartitionCount)来配置消息分区。

除了特定于平台的低级 API 之外,Spring Cloud Data Flow 还提供了一个专用的 Scale API,用于扩展数据管道。Scale API 将各种平台的原生扩展功能统一到一个统一且简单的接口中。您可以使用它来实现基于特定应用程序域或业务逻辑的扩展控制。Scale API 可在所有 Spring Cloud Data Flow 支持的平台上重复使用。开发人员可以实现一个自动扩展控制器,并在 Kubernetes、Cloud Foundry,甚至本地平台上重复使用它,以进行本地测试。

访问 扩展方案,了解如何 使用 SCDF Shell 扩展应用程序使用 SCDF 和 Prometheus 实现流数据管道的自动扩展