【发布时间】:2020-11-03 14:26:04
【问题描述】:
我们的生产服务正在遭受延迟高峰的困扰。在这些峰值期间,我们看到我们收到了大量的 StorageExceptions 和 SocketExceptions
这些图像超过 4 小时。
更重要的是,这只发生在我们的 EUS 服务实例(它有大约 26 个事件中心触发器)上,而不发生在我们的 WEU(7 个事件中心触发器)和 Canary(EUS2 - 2 个事件中心触发器)上。
我们看到的存储帐户异常的最内部错误是: 指定了租约 ID,但 blob 的租约已过期。 众所周知,少量是可以的 - 但 4 小时内 24.5K 感觉不像是少量,并且异常峰值和延迟峰值之间存在直接相关性
套接字最里面的例外是: 试图以访问权限禁止的方式访问套接字。 它还与延迟峰值有很好的相关性。
另一方面,在整个 4 小时的时间段内,可以看到事件流经服务并流向接收事件中心:
所有传出事件都写入每个云中的同一个事件中心(总共 3 个 - 1 个 EUS、1EUS2、1WEU),每个云相应地写入自己的事件中心。 似乎整个延迟峰值也是由于对 eventthub 的写入操作(通过 eventthub 名称 + FQDN AAD 连接完成):
非常感谢您对此问题的任何帮助!
【问题讨论】:
-
关于租赁问题;避免跨区域使用相同的 eventthub 名称。我看到客户由于名称相同而错误地配置了他们的消费者。关于超时,存储帐户是否与函数应用位于同一区域?
-
嗨@SerkantKaraca,感谢您的意见!我们从不同的事件中心命名空间中读取,具体取决于它们所在的区域,但写入每个云的相同事件中心命名空间。我们正在编写的云级 eventthub 命名空间也有不同的名称。原始消息中可能没有明确这一点 - 所有事件中心都是唯一命名的。至于第二部分 - StorageAccount、AzureFunction 和 EventHubNamespace(我们正在写入)都位于同一个区域和同一个资源组中。
-
您能否确保接收器事件中心命名空间已分配足够的 TU 来处理写入?还有,你怎么写信给EH?您是在代码中使用输出绑定还是创建 EH 客户端?
-
@SerkantKaraca,默认 TU 设置为 1,但我将自动充气设置为 20(这是最大值)。我们正在使用 AAD(EH 名称 + FQDN)样式连接在代码中创建 EventHubProducerClient。创建的 EventHubProducerClient 设置在单例静态上下文中。
-
我将默认 TU 更改为 20 只是为了查看它是否是由于自动膨胀反应时间造成的,但我仍然得到相同的延迟峰值(以及相同的异常峰值)
标签: c# azure-functions azureservicebus azure-eventhub