通过C#代码缩放天蓝色函数

时间:2018-07-03 07:37:34

标签: c# azure azure-functions

我是Azure Functions的新手。我需要编写一些C#代码以根据某些条件扩展Azure函数。

例如:
我总共有10个将为其调用Azure Function的客户。但是在这10个客户中,只有一个高优先级客户。如果收到针对该高优先级客户的任何功能请求,则我希望扩展Azure功能并在新实例上运行该请求。该请求完成后,我想销毁该扩展实例。这样,我的高优先级客户就可以使用全部服务器资源。

我的问题是:

  1. 我想要什么吗?
  2. 如果是:
    怎么样?
    要扩展的C#代码应该是什么?
    如何将我的请求转发到新实例?
    如何销毁当前扩展实例?
  3. 如果否:
    在Azure Function中为选定客户赋予高优先级的最佳方法应该是什么?

2 个答案:

答案 0 :(得分:2)

在尝试回答您的问题之前,我想先解释一下。 Azure Functions可以两种不同的方式运行:在消费计划和App Service计划上。为了充分利用功能(或实际上没有服务器的功能),应该在消费计划中运行功能。

  
      
  • 消费计划-运行功能时,Azure将提供所有必要的计算资源。您不必担心资源管理,只需要为代码运行花费时间。
  •   
  • 应用服务计划-像运行Web,移动和API应用一样运行您的功能。如果您已经将App Service用于其他应用程序,则可以在同一计划上运行功能,而无需支付额外费用。
  •   

  

使用消耗计划时,将根据传入事件的数量动态添加和删除Azure Functions主机的实例。该计划会自动扩展,并且仅在运行功能时才向您收取计算资源的费用。在消费计划中,功能执行在可配置的时间段后超时。

关于缩放:

  

Azure函数使用一个称为比例控制器的组件来监视事件发生率并确定是横向扩展还是纵向扩展。比例控制器对每种触发类型使用启发式。例如,当您使用Azure队列存储触发器时,它会根据队列长度和最旧队列消息的使用期限进行缩放。

Scaling Azure Functions

有关缩放的更多有趣信息:Azure Functions scale and hosting

根据您的要求,我的想法是通过在消费计划中运行功能来发挥功能的 real 功能。如果您有一个高优先级的客户,请给他们他们自己的Function实例,该实例由Blob存储中它自己的容器触发(请查看@ Gonzo345的注释中的链接)。这确保了它一进入就得到处理,并且只有在为高优先级客户触发时才产生成本。由于使用了消耗计划,因此它将实例化功能,运行任何需要运行的操作并销毁实例。

顺便说一句:Blob触发器最终是轮询触发器。当运动很多时,它们很快。但是,当发生的事情不多时,存储帐户中的更改可能最多需要几分钟才能真正触发该功能。如果要实时处理事件,请查看Event Grid

现在回到您的问题:

  1. 是的,应该如此。它确实要求您的Function App在App Service Plan中运行
  2. 在这里查看:Disable Autoscale and manually scale your instances
  3. 请参阅2:)

答案 1 :(得分:1)

这是不可能的。您不能直接影响“ Azure Functions”的缩放算法(根据消费计划)。

Blob触发器特别有一些已知的局限性,如documentation中所述。特别是,处理blob可能会有所延迟。

为了更快地扩展,我建议您使用事件网格触发器,这对于您的“优先”和“非优先”客户都应该很好地扩展。参见Image Resizing sample