Azure 动态服务创建以分配负载 背景

Azure 动态服务创建以分配负载 背景,azure,azure-service-fabric,Azure,Azure Service Fabric,我们面临的问题是,我们正在进行视频编码,希望将负载分配给集群中的多个节点 我们希望将特定节点上的视频编码作业数量限制为某个最大值。我们还希望将小的视频编码作业发送到集群中的某一组节点,并将长的视频编码作业发送到集群中的另一组节点 这背后的想法是通过将大型作业划分为单独的节点池来帮助维护客户端之间的公平性。这有助于确保小型视频编码作业不会被运行长编码作业的单个租户阻止/限制 使用服务结构 我们计划使用ASF服务进行视频编码。考虑到这一点,我们有了一个想法,即为传入的每个作业动态创建一个服务。然后,

我们面临的问题是,我们正在进行视频编码,希望将负载分配给集群中的多个节点

我们希望将特定节点上的视频编码作业数量限制为某个最大值。我们还希望将小的视频编码作业发送到集群中的某一组节点,并将长的视频编码作业发送到集群中的另一组节点

这背后的想法是通过将大型作业划分为单独的节点池来帮助维护客户端之间的公平性。这有助于确保小型视频编码作业不会被运行长编码作业的单个租户阻止/限制

使用服务结构 我们计划使用ASF服务进行视频编码。考虑到这一点,我们有了一个想法,即为传入的每个作业动态创建一个服务。然后,可以使用放置约束来确定作业将在哪个节点池中运行。基于内存使用率、CPU使用率的自定义指标。。。可用于限制节点上活动作业的数量

使用此方法,分发作业的节点必须轮询当前是否可以创建满足放置约束和度量的新服务

问题
  • 当服务无法放置在节点上时会发生什么?(我假设使用CreateServiceAsync?)
  • 这种投票会不会太贵
  • 我们的视频编码可执行文件与大约80MB的服务一起打包。这是否会导致新服务的构建需要很长时间?(分与秒)

  • 作为替代方案,我们可以使用可靠的基于队列的系统,其中大作业池从一个队列提取,小作业池从另一个队列提取。这似乎是一种更简单的方法,但我想探索所有选项,以确保我不会错过Service Fabric的一些功能。你还有别的更好的建议吗


我没有放置约束和动态服务方面的经验,所以我不能这么说

性能计数器的轮询并不十分昂贵,也就是说这不是一个免费的操作。一秒钟的轮询间隔不会对性能造成任何巨大影响,同时仍能提供相当程度的分辨率

服务包在部署时复制到每个节点,而不是在服务启动时复制到每个节点,因此这会使部署稍微慢一点,但不会影响服务创建

无论您以何种方式构建工作数据,您都会希望将其置于可靠的集合中,但问题是如何进行。我刚才提出的一个可能值得考虑的想法是,将作业处理服务设置为分区服务,并基于对作业大小和/或租户的编码来制定分区策略,以便来自同一租户的大型作业卡在同一队列中,而其他租户的小型作业则转到其他位置

顺便说一下,过去我处理过的一件事是SF Rebug限制,如果消息太大,发送和投掷的消息的大小是如此,因此如果您的视频文件正在从服务传递到服务,您将要考虑一种用于服务间通信的分页策略。p>