【问题标题】:Apparent delay in Azure KeyVault accessAzure KeyVault 访问明显延迟
【发布时间】:2018-11-26 19:38:22
【问题描述】:

我们有一个基于 Azure 的 ASP.NET Web 服务,它可以访问 Azure KeyVault。我们看到两个实例,其中一个方法在第一次尝试时“挂起”,然后在一分钟左右后工作。

在这两种情况下,都会发生 KeyVault 访问。在这两种情况下,当我们开始在这些方法中使用 KeyVault 时,问题就开始了。

我们在第一个实例中进行了非常仔细的日志记录,并且在我们的代码中看不到任何其他可能导致挂起的内容。 KeyVault 访问是主要嫌疑人。

此外,如果我们从本地服务器(从 Visual Studio)运行应用程序,则 KeyVault 访问在“第一次尝试”时工作正常。它只会在 Azure 上的生产环境中运行时产生“挂起”错误,并且只会在“第一次尝试”时产生。

我所说的“挂起”是指在一个由外部 API 触发的实例中,它至少需要 60 秒(我们可以看出这是因为外部 API 超时。)在另一个实例中,由一个页面请求,几分钟后页面就会旋转,此时我们假设数据库请求或其他东西已经超时。

当我说“一分钟左右”时,这与我们确定重试时间一样快。

是否存在某种问题或功能,KeyVault 在第一次尝试之前需要“预热”?

更新:我正在更仔细地查看代码,并且我看到至少有几个地方可以插入更多日志记录,以便更准确地了解故障发生的位置。我会这样做,然后我会在这里报告。

更新:请参阅下面的答案 - 主要新手错误,已更正。

【问题讨论】:

  • 你能分享导致问题的代码吗?您还在使用托管标识连接到密钥保管库吗?
  • 在您的评论提示下,我正准备分享 sn-ps,并看到了进行更多日志记录的方法。我要先试试。交互 => 更智能的操作。

标签: c# asp.net azure azure-keyvault


【解决方案1】:

找到问题,找到解决办法。

需要从异步任务中调用 Key Vault 访问,因为存在几秒的延迟。

private async Task<string> GetKeyVaultSecretValue(varSecretParms) {

我不了解底层技术,但是,显然,如果调用来自标准代码序列,则服务器不喜欢等待,因此线程被放弃/停止。

【讨论】:

    【解决方案2】:

    根据您的描述,似乎是由于WebApp 没有启用Always on

    默认情况下,如果网络应用闲置了一段时间,就会卸载。这使系统可以节省资源。在基本或标准模式下,您可以启用 Always On 以保持应用始终加载

    如果可能,请尝试启用Always on 并重试。

    【讨论】:

    • 谢谢,“永远在线”已经设置好了。我们现在在另外两个地方发现了 Key Vault 延迟问题。我们正在尝试设置 KeyVault 日志记录并发现了一个障碍,所以首先。
    • “永远在线”是一个愚蠢的解决方案。卸载 Web 应用程序的原因是为了节省服务器上的内存。当然“永远在线”更快,因为应用程序不需要访问密钥库(所有秘密都在内存中!)。在那种情况下,为什么还要有一个密钥库?我可以将秘密存储在内存中,并使用 POST api 进行设置。
    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2019-09-01
    • 2018-04-18
    相关资源
    最近更新 更多