我是否期望蔚蓝功能具有太多的可扩展性?

时间:2017-04-13 14:15:25

标签: azure azure-functions

我在消费计划上运行了一个由服务总线主题触发的azure函数,然后只是将另一个消息添加到队列中(所以基本上没有处理,只有IO)。触发主题以~1000 /秒的速率填充。我天真地认为这个功能可以很容易地保持同步,但事实上它已经无可救药地被压倒了,主题订阅很快就会填满。我已经运行了几个小时,所以我怀疑它已完全扩展。

我应该从功能中获得多少性能?吞吐量大约是每秒数千个?

编辑:我经常在日志中看到此错误:

  

连接尝试持续时间跨度为00:00:00。 TCP错误   代码10013:尝试以禁止的方式访问套接字   通过其访问权限。

看起来功能在大规模服务总线上效果不佳?

编辑2解决方案 替换此绑定:

public static async Task Run(BrokeredMessage msgin, Binder binder, TraceWriter log)
{
 var collector = await binder.BindAsync<IAsyncCollector<BrokeredMessage>>(
                new ServiceBusAttribute("my-queue"));

...
}

用这个:

public static IAsyncCollector<BrokeredMessage> collector;
public static async Task Run(BrokeredMessage msgin, Binder binder, TraceWriter log)
{
     collector = collector ?? await binder.BindAsync<IAsyncCollector<BrokeredMessage>>(
                new ServiceBusAttribute("my-queue"));


    ...
}

阻止了套接字耗尽,并且该功能能够与生产者保持同步没有问题。

2 个答案:

答案 0 :(得分:3)

有些问题:

  • 您的服务总线连接字符串是否具有管理权限?管理权利是目前有效扩展的必要条件。
  • 您是使用输入/输出绑定,还是自己管理服务总线客户端?
  • 您是否修改了host.json
  • 中的服务总线并发设置

您看到的错误与连接耗尽有关,因此您的函数实例会以某种方式耗尽可用连接。

如果你想获得关于功能缩放和遥控的遥测?吞吐量你可以给这个镜头:https://github.com/Azure/Azure-Functions/wiki/App-Insights-Early-Preview

答案 1 :(得分:3)

我在Azure功能中遇到了同样的问题。根本原因是我耗尽了所有端口,因为我在Run方法中创建了一个TCP连接。

因此,当同一台机器上有很多并行执行时,它们都会创建连接,最终耗尽所有端口。

在这种情况下,连接是作为ServiceBus客户端创建的一部分创建的,将其移动到静态变量可以解决问题。