【问题标题】:Azure functions with Javascript runtime slow to read httptrigger requests带有 Javascript 运行时的 Azure 函数读取 httptrigger 请求很慢
【发布时间】:2018-10-24 17:34:35
【问题描述】:

我正在使用 javascript 运行时和 HttpTrigger 将数据 (4MB) 作为 gipped 请求发送到 azure 函数。在函数中,我解压数据并处理它。在函数中运行代码需要 6-7 秒,但请求的往返需要将近 60 秒。我知道上传请求需要一些时间,但我没想到会有这么大的延迟。如何调试时间去哪儿了?

这不是冷启动问题,因为请求始终需要 60 秒。

【问题讨论】:

  • 嗨@ygnr,你能分享你遇到这个问题的函数运行时版本吗? v1 还是 v2?
  • 您好,出于兴趣,您是在消费计划还是应用服务计划中使用它?
  • 它是第 2 版,消费和应用服务计划相同。
  • 在咨询了微软之后,原来是版本2才是罪魁祸首。改到 v1 没有延迟。

标签: azure azure-functions azure-functions-runtime


【解决方案1】:

据我所知,Azure Functions 尚不支持附加 App Insights Profiler,但您可以添加自己的遥测数据。

如果时间花在 Azure 函数运行时内,这不一定有帮助,但如果瓶颈在解压缩/处理期间,它可能有助于缓解:

https://docs.microsoft.com/en-us/azure/application-insights/application-insights-custom-operations-tracking?toc=/azure/azure-monitor/toc.json#outgoing-dependencies-tracking

自定义依赖跟踪的一般方法是:

  • 调用 TelemetryClient.StartOperation(扩展)方法,该方法填充关联所需的 DependencyTelemetry 属性和一些其他属性(开始时间戳、持续时间)。
  • 在 DependencyTelemetry 上设置其他自定义属性,例如名称和您需要的任何其他上下文。
  • 进行依赖调用并等待它。
  • 完成后使用 StopOperation 停止操作。
  • 处理异常。

文档中的示例:

public async Task RunMyTaskAsync()
{
    using (var operation = telemetryClient.StartOperation<DependencyTelemetry>("task 1"))
    {
        try 
        {
            var myTask = await StartMyTaskAsync();
            // Update status code and success as appropriate.
        }
        catch(...) 
        {
            // Update status code and success as appropriate.
        }
    }
}

【讨论】:

  • 我猜大部分时间都花在了 Azure 运行时。因此,需要一种方法来了解为什么会发生这种情况。
  • 您可能是对的,但添加遥测可以帮助证明这一点。
  • 一旦你深入了解它,我会对你使用的诊断技术感兴趣。
  • @ygnr - 你能在这里提出更多细节的问题吗? github.com/Azure/azure-functions-nodejs-worker
猜你喜欢
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 2020-06-05
  • 2018-01-23
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多