Azure Functions 事件中心读写延迟峰值与 StorageException 和 SocketException 峰值
Azure Functions Event hub read write latency spikes with StorageException and SocketException spikes
我们的生产服务存在延迟峰值问题。在这些峰值期间,我们看到我们收到了大量的 StorageExceptions 和 SocketExceptions
这些图像超过 4 小时。
更重要的是,这只发生在我们的 EUS 服务实例(它有大约 26 个事件中心触发器)上,而不是我们的 WEU(7 个事件中心触发器)和 Canary(EUS2 - 2 个事件中心触发器)。
我们看到的存储帐户异常的最内部错误是:
指定了租约 ID,但 Blob 的租约已过期。
众所周知,少量是可以的 - 但 4 小时内 24.5K 感觉并不小,异常峰值和延迟峰值之间存在直接关联
套接字最里面的异常是:
试图以访问权限禁止的方式访问套接字。
它还与延迟峰值密切相关。
另一方面,可以看到事件在整个 4 小时时间段内流经服务并流向接收事件中心:
所有传出事件都写入每个云中的同一个事件中心(总共 3 个 - 1 EUS、1EUS2、1WEU),每个云相应地写入自己的事件中心。
整个延迟峰值似乎也是由于对 eventhub 的写入操作(通过 eventhub 名称 + FQDN AAD 连接完成)造成的:
非常感谢对此问题的任何帮助!
我们解决了这个问题 -
Azure 功能是根据消费计划设置的 - 这样设置它,因此只有一个实例可用。要增加到不止一个实例,我需要将计划从消费更改为高级。
除此之外,我发现该函数在启动时会为所有触发器创建与所有 Eventhub 的连接——在本例中为 26 个 Eventhub。
每个 Eventhub 有 32 个分区,因此每个 Eventhub 有 32 个连接。
消费计划中的 Azure 函数有 600 个连接的硬性限制。
这意味着一旦建立连接,它最终将达到其 600 个限制,进入不健康状态并自行重启,这反过来又由于启动和处理来自集线器的积压事件而造成延迟峰值。
从消费升级到高级允许更高的连接限制并添加一个额外的实例(将最小实例 运行 从 1 增加到 2),这将在实例之间打开的连接分开,所以我们没有达到下限。
希望这可以帮助其他遇到此问题的人。
我们的生产服务存在延迟峰值问题。在这些峰值期间,我们看到我们收到了大量的 StorageExceptions 和 SocketExceptions
这些图像超过 4 小时。
更重要的是,这只发生在我们的 EUS 服务实例(它有大约 26 个事件中心触发器)上,而不是我们的 WEU(7 个事件中心触发器)和 Canary(EUS2 - 2 个事件中心触发器)。
我们看到的存储帐户异常的最内部错误是: 指定了租约 ID,但 Blob 的租约已过期。 众所周知,少量是可以的 - 但 4 小时内 24.5K 感觉并不小,异常峰值和延迟峰值之间存在直接关联
套接字最里面的异常是: 试图以访问权限禁止的方式访问套接字。 它还与延迟峰值密切相关。
另一方面,可以看到事件在整个 4 小时时间段内流经服务并流向接收事件中心:
所有传出事件都写入每个云中的同一个事件中心(总共 3 个 - 1 EUS、1EUS2、1WEU),每个云相应地写入自己的事件中心。
整个延迟峰值似乎也是由于对 eventhub 的写入操作(通过 eventhub 名称 + FQDN AAD 连接完成)造成的:
非常感谢对此问题的任何帮助!
我们解决了这个问题 - Azure 功能是根据消费计划设置的 - 这样设置它,因此只有一个实例可用。要增加到不止一个实例,我需要将计划从消费更改为高级。
除此之外,我发现该函数在启动时会为所有触发器创建与所有 Eventhub 的连接——在本例中为 26 个 Eventhub。 每个 Eventhub 有 32 个分区,因此每个 Eventhub 有 32 个连接。
消费计划中的 Azure 函数有 600 个连接的硬性限制。
这意味着一旦建立连接,它最终将达到其 600 个限制,进入不健康状态并自行重启,这反过来又由于启动和处理来自集线器的积压事件而造成延迟峰值。
从消费升级到高级允许更高的连接限制并添加一个额外的实例(将最小实例 运行 从 1 增加到 2),这将在实例之间打开的连接分开,所以我们没有达到下限。
希望这可以帮助其他遇到此问题的人。