Azure Durable Functions - 扇出-扇入可伸缩性

Azure Durable Functions - fanout-fanin scalability

我们是一家以技能为基础的开发公司,创建竞赛。本次比赛的选手可以通过上传照片,互相排名来获得积分。这样做的关键要求之一是定期更新比赛排行榜,以保持玩家的兴趣。我们正在寻找一个扇出和扇入架构来实现排行榜。附典型工作流程

根据我们的分析,持久函数似乎是最佳选择。

但是我们有以下限制

  1. 每场比赛约有500名选手
  2. 一位玩家最多可对 500 张照片进行排名

我一直在努力通读文档。但是找不到有关使用持久函数的这种方法的可扩展性的文档。非常感谢任何意见或见解

您可以在此处找到 Durable Functions 的性能目标:https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-perf-and-scale#performance-targets

Parallel activity execution (fan-out) 100 activities per second, per instance

Parallel response processing (fan-in) 150 responses per second, per instance

如果您 运行 使用 Azure Functions Consumption 计划,随着更多消息出现在工作项队列中,那里的扩展控制器将扩展到更多实例。 这是用于开始活动的队列(您将使用它来计算单个玩家的分数。

您还可以按照文档中的说明提高扇入性能:

Unlike fan-out, fan-in operations are limited to a single VM. If your application uses the fan-out, fan-in pattern and you are concerned about fan-in performance, consider sub-dividing the activity function fan-out across multiple sub-orchestrations.

所以你会:

  • 主要协调器
    • 第 0 批子协调器
      • Activity 批次 0 中的用户 0
      • Activity 用户 1 在批次 0
      • ...
    • 第 1 批子协调器
      • Activity 批次 1 中的用户 0
      • Activity 批次 1 中的用户 1
      • ...
    • ...

这种子协调器批处理使其速度更快的原因是,随着活动的完成,您的协调器历史记录 table 会获得越来越多的行。 每次有结果时它都必须加载这些。 因此,通过限制这些行的上限,您可以获得最大的性能。

TL;DR:我认为扇出会很好地扩展,但您可能想要进行子协调器批处理以提高扇入性能。