【问题标题】:Performance issues in running .NET Core APIs in Azure App Services for Linux在适用于 Linux 的 Azure 应用服务中运行 .NET Core API 的性能问题
【发布时间】:2020-12-06 09:00:20
【问题描述】:

我尝试将一些基于 .NET Core 3.1 构建的 Web API 移植到 Azure 应用服务(在 Linux 上)。早些时候,所有这些 API 都托管在 Azure 应用服务(在 Windows 上)中,但我想将它们移植到 Linux 环境,因为与它们相关的巨大成本收益。

但是,在移植它们并运行一些性能套件后,我发现 Linux 和 Windows 应用服务之间存在严重的性能差异。我原以为 Linux 应用服务的性能会提高或保持不变,但令我沮丧的是,性能实际上下降了。以下是部分结果:

+-----------------------------------------------+-----------+--------+---------+
| Operation                                     | User Load | Linux  | Windows |
+-----------------------------------------------+-----------+--------+---------+
| Cosmos DB Read                                | 50        | 600 ms | 60 ms   |
+-----------------------------------------------+-----------+--------+---------+
| Simple Ping                                   | 50        | 30 ms  | 20 ms   |
+-----------------------------------------------+-----------+--------+---------+
| 15 parallel calls to Azure Feature Management | 50        | 510 ms | 160 ms  |
+-----------------------------------------------+-----------+--------+---------+

是什么导致 Linux 中的这种性能下降?它是 .NET Core 的东西吗,与 Linux 相比,Windows 的性能更好。如果是这样,这是否会在 .NET 5 或其他后续版本中获得地址?

【问题讨论】:

标签: linux azure azure-web-app-service azure-app-service-plans


【解决方案1】:

至少对于 CosmosDB,在使用 .NET SDK 时,有一个适用于 Windows 的 documented performance preference

我们建议使用 Windows 64 位主机处理以提高性能。 SQL SDK 包含一个用于解析和优化的本机 ServiceInterop.dll 本地查询。 ServiceInterop.dll 仅在 Windows 上受支持 x64 平台。对于 Linux 和其他不受支持的平台 ServiceInterop.dll 不可用,进行了额外的网络调用 到网关以获得优化的查询。

【讨论】:

  • 这可能是原因之一。感谢您指出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2020-05-13
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多