azure - Azure Durable Functions - 扇出扇入可扩展性
问题描述
我们是一家以技能为基础的发展公司,创造比赛。本次比赛的选手可以上传照片,对彼此的照片进行排名以赚取积分。这样做的关键要求之一是定期更新比赛排行榜以保持玩家的兴趣。我们正在寻找架构中的扇出和扇形来实现排行榜。附上一个典型的工作流程
根据我们的分析,持久功能似乎是最佳选择。
但是我们有以下限制
- 每场比赛有大约500名选手
- 一名玩家将排名多达 500 张照片
我一直在尝试通读文档。但是,找不到有关使用 Durable 函数的这种方法的可扩展性的文档。非常感谢任何评论或见解
解决方案
您可以在此处找到 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 的活动
- ...
- ...
- 批次 0 子协调器
这种子编排器批处理使其速度更快的原因是因为随着活动的完成,您的编排器历史记录表会获得越来越多的行。每次有结果时它都必须加载这些。因此,通过限制这些行的上限,您可以获得最大的性能。
TL;DR:我认为扇出可以很好地扩展,但您可能需要进行子协调器批处理以提高扇入性能。
推荐阅读
- git - 如何从目录中删除除未版本化的 git 文件之外的所有文件?
- android - Android Studio 无法在物理设备上安装应用(但 adb 可以访问)
- maven - 如何在没有主类的情况下使用 maven-assembly-plugin 在 Kotlin 中创建可执行 jar?
- android - 最小化视图自定义中的多选窗口应用栏 - Android/React Native
- c# - 为什么我不能用这段代码让我的游戏对象移动?
- tapkey - 调用`https://login.tapkey.com/connect/token`时获取CORS
- javascript - 未捕获的类型错误:无法读取未定义的属性(读取“样式”)style.width="200px"
- sql - 将带有外部应用的 SQL 转换为 LINQ
- node.js - REST API - 如何处理 URIError:发送无效参数时“无法解码参数”
- node.js - 如何为 dart/flutter 加密 aes256 cbc 模式