Spring Cloud Data Flow 如何处理分布式处理?如果服务器部署在 PCF 上并假设有 2 个实例,那么输入数据将如何在这 2 个实例之间分配?
此外,在 PCF 上部署时如何处理故障?PCF 将为失败的实例生成一个新实例。但它是否也会负责部署流或需要手动干预?
Spring Cloud Data Flow 如何处理分布式处理?如果服务器部署在 PCF 上并假设有 2 个实例,那么输入数据将如何在这 2 个实例之间分配?
此外,在 PCF 上部署时如何处理故障?PCF 将为失败的实例生成一个新实例。但它是否也会负责部署流或需要手动干预?
您应该区分 Spring Cloud Dataflow 文档所称的“服务器”和构成托管流的应用程序。
“服务器”仅用于接收部署请求并尊重它们,从而产生构成您的流的应用程序。如果您部署“服务器”的多个实例,那么它没有什么特别之处。PCF 会在它前面加上一个 LB,任何一个实例都会处理你的 REST 请求。在 PCF 上部署时,状态是在一个绑定的服务中维护的,所以这里没有什么特别的。
如果您宁愿指的是“应用程序”,即使用多个实例部署具有部分或全部部分的流,即
stream create foo --definition "time | log"
stream deploy foo --properties "app.log.count=3"
那么默认情况下,由 binder 实现来选择如何分发数据。这通常意味着循环平衡。
如果您想控制与同一概念域对象有关的数据如何最终出现在同一应用程序实例上,您应该告诉 Dataflow 如何执行此操作。就像是
stream deploy bar --properties "app.x.producer.partitionKeyExpression=<someDomainConcept>"
至于处理失败,我不确定你在问什么。部署的应用程序是流。一旦 PCF 发送和接收了拥有这么多流组件实例的请求,它将负责处理该请求。那时它不在 Dataflow 的手中,这正是Spring Cloud Deployer合约的边界设置在那里的原因(其他运行时也是如此)/