首页 > 解决方案 > Azure Durable Functions - 扇出扇入可扩展性

问题描述

我们是一家以技能为基础的发展公司,创造比赛。本次比赛的选手可以上传照片,对彼此的照片进行排名以赚取积分。这样做的关键要求之一是定期更新比赛排行榜以保持玩家的兴趣。我们正在寻找架构中的扇出和扇形来实现排行榜。附上一个典型的工作流程

在此处输入图像描述

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

但是我们有以下限制

  1. 每场比赛有大约500名选手
  2. 一名玩家将排名多达 500 张照片

我一直在尝试通读文档。但是,找不到有关使用 Durable 函数的这种方法的可扩展性的文档。非常感谢任何评论或见解

标签: azurescalabilityazure-durable-functions

解决方案


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

并行活动执行(扇出)每秒 100 个活动,每个实例

并行响应处理(扇入)每秒 150 个响应,每个实例

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

您还可以通过执行文档中的说明来提高扇入性能:

与扇出不同,扇入操作仅限于单个 VM。如果您的应用程序使用扇出、扇入模式并且您担心扇入性能,请考虑将活动功能扇出细分到多个子编排中。

所以你会有:

  • 主编排器
    • 批次 0 子协调器
      • 第 0 批用户 0 的活动
      • 第 0 批用户 1 的活动
      • ...
    • 第 1 批子协调器
      • 第 1 批用户 0 的活动
      • 第 1 批用户 1 的活动
      • ...
    • ...

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

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


推荐阅读