azure - 使用 Symfony 的 Microsoft Azure 应用服务的性能问题

标签 azure performance symfony azure-web-app-service

当我们将 Microsoft Azure 应用服务与 Symfony 应用程序(一个基本的后台应用程序,调用 WS,在数据库中写入一些数据并将其发送到前端应用程序)一起使用时,我们面临性能问题。

为了验证该问题与代码无关,我们在本地和 Microsoft Azure oncloud 虚拟机上尝试使用相同的 ACU 。 由于我们的客户政策,我们必须使用应用服务

摘要

  • 本地表现不错

  • VM 上的性能良好

  • 应用服务的性能很差

  • metrics don't show hardware issue

  • 使用 PHP 命令时,性能似乎与磁盘性能和延迟有关(请参阅下面的 symfony 特定命令)

  • 应用服务VS VM/本地在磁盘上写入速度慢1000倍

  • 当我们使用 bin/console 启动命令时,需要 8 秒,而虚拟机/本地则不到 1 秒

我们如何测试性能?

当我们访问前端应用程序时,性能很差,延迟很高。

我们检查了 symfony _profiler、dd 命令和 symfony 特定命令

dd命令

在应用服务上

root@09b68d228779:/home/site# dd if=/dev/zero of=/home/site/wwwroot/test1.img bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 21.9822 s, 48.8 MB/s
 
root@09b68d228779:/home/site# dd if=/dev/zero of=/home/site/wwwroot/test1.img bs=512 count=1000 oflag=dsync
1000+0 records in
1000+0 records out
512000 bytes (512 kB, 500 KiB) copied, 31.7151 s, 16.1 kB/s

在 Azure 虚拟机上

user@app:~$ dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10.1442 s, 106 MB/s
user@app:~$ dd if=/dev/zero of=/tmp/test1.img bs=512 count=1000 oflag=dsync
1000+0 records in
1000+0 records out
512000 bytes (512 kB, 500 KiB) copied, 9.1723 s, 55.8 kB/s

symfony 特定命令

本地

[INFO] Starting benchmark                                                                                               
------------------------------ ----------  
 Title                          Duration   
------------------------------ ----------  
 Write inside of project dir    0.3 ms     
 Write outside of project dir   0.8 ms     
 Factorials calculation         5.4 ms     
------------------------------ ----------  
mardi 29 mars 2022, 16:36:59 (UTC+0200)

在应用服务上

Tue Mar 29 14:34:19 UTC 2022
 [INFO] Starting benchmark                                                                                              
------------------------------ ---------- 
  Title                          Duration  
 ------------------------------ ---------- 
  Write inside of project dir    558.5 ms  
  Write outside of project dir   2.4 ms    
  Factorials calculation         8.1 ms    
 ------------------------------ ---------- 
Tue Mar 29 14:34:27 UTC 2022

在 Azure 虚拟机上

Tue Mar 29 14:34:09 UTC 2022
[INFO] Starting benchmark
------------------------------ ----------
  Title                          Duration
------------------------------ ----------
  Write inside of project dir    0.4 ms
  Write outside of project dir   0.6 ms
  Factorials calculation         7.2 ms
------------------------------ ----------
Tue Mar 29 14:34:09 UTC 2022

我们已经尝试过

  • 将应用服务扩展到 P3v2(840ACU、14GB 内存)
  • 将应用服务扩展到 3 个实例
  • 在应用服务上挂载外部磁盘(我们只能使用 CIFS)
  • 联系 Microsoft Azure 支持(经过大量邮件后,Symfony 不受支持)

软件

  • Symfony 5.4.8
  • 我们正在使用以下软件包:
 "require": {
    "php": ">=7.4",
    "ext-ctype": "*",
    "ext-curl": "*",
    "ext-iconv": "*",
    "ext-json": "*",
    "ext-openssl": "*",
    "beberlei/doctrineextensions": "^1.3",
    "composer/package-versions-deprecated": "1.11.99.2",
    "doctrine/annotations": "^1.0",
    "doctrine/doctrine-bundle": "^2.4",
    "doctrine/doctrine-migrations-bundle": "^3.1",
    "doctrine/orm": "^2.9",
    "michaeldegroot/doctrine-encrypt-bundle": "^4.0",
    "nelmio/cors-bundle": "^2.1",
    "phpdocumentor/reflection-docblock": "^5.2",
    "phpoffice/phpspreadsheet": "^1.19",
    "sensio/framework-extra-bundle": "^6.1",
    "symfony/apache-pack": "^1.0",
    "symfony/asset": "5.3.*",
    "symfony/console": "5.3.*",
    "symfony/dotenv": "5.3.*",
    "symfony/expression-language": "5.3.*",
    "symfony/flex": "^1.3.1",
    "symfony/form": "5.3.*",
    "symfony/framework-bundle": "5.3.*",
    "symfony/http-client": "5.3.*",
    "symfony/intl": "5.3.*",
    "symfony/mailer": "5.3.*",
    "symfony/mime": "5.3.*",
    "symfony/monolog-bundle": "^3.1",
    "symfony/notifier": "5.3.*",
    "symfony/process": "5.3.*",
    "symfony/property-access": "5.3.*",
    "symfony/property-info": "5.3.*",
    "symfony/proxy-manager-bridge": "5.3.*",
    "symfony/runtime": "5.3.*",
    "symfony/security-bundle": "5.3.*",
    "symfony/serializer": "5.3.*",
    "symfony/string": "5.3.*",
    "symfony/translation": "5.3.*",
    "symfony/twig-bundle": "^5.3",
    "symfony/validator": "5.3.*",
    "symfony/web-link": "5.3.*",
    "symfony/yaml": "5.3.*",
    "talan/pattern-matching": "^1.1",
    "twig/extra-bundle": "^2.12|^3.0",
    "twig/twig": "^2.12|^3.0"
  },
  "require-dev": {
    "doctrine/doctrine-fixtures-bundle": "^3.4",
    "fzaninotto/faker": "^1.9",
    "phpunit/phpunit": "^9.5",
    "symfony/browser-kit": "^5.3",
    "symfony/css-selector": "^5.3",
    "symfony/debug-bundle": "^5.3",
    "symfony/maker-bundle": "^1.0",
    "symfony/phpunit-bridge": "^5.3",
    "symfony/stopwatch": "^5.3",
    "symfony/var-dumper": "^5.3",
    "symfony/web-profiler-bundle": "^5.3"
  },

Linux Web 应用服务(P1v2:1)

  • 运行时堆栈:PHP7.4
  • 操作系统:Linux
  • 使用代码部署
  • 地区:法国中部
  • 生产类型
  • 大小:P1v2:1(210 ACU,3.5GB 内存)

最佳答案

这里发生的事情是应用程序服务基础设施的一部分,正如您提到的,您对磁盘具有高度依赖性。

应用程序服务使用文件共享并将其挂载为网络驱动器,这会增加 I/O 请求的延迟,这是为了提高可靠性,但通常在处理应用程序服务和大量磁盘操作时,速度会变慢与使用虚拟机或本地计算机时相比。

此外,您很可能使用标准 HDD 进行文件共享(无法选择),我建议尝试使用 BYOS (Bring Your Own Storage)和使用 SSD 的高级存储帐户 Storage account overview - Azure Storage | Microsoft Docs

如果这不起作用,容器实例可能是最接近虚拟机的东西,而无需离开 PaaS

关于azure - 使用 Symfony 的 Microsoft Azure 应用服务的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72344556/

相关文章:

azure - 使用 Azure 数据工厂和逻辑应用时,访问已被条件访问策略阻止

android - 如何在 Canvas 上绘制大量矩形并且性能良好?

Symfony 4 Swift Mailer 不发送邮件

azure - 在 LUIS.ai 中使用 Bing SpellChecker

azure - Azure Databricks 中 DBFS 的数据大小限制是多少

performance - 安装更多 R 包是否会导致性能问题

symfony - phpunit 中的错误状态代码

php - 密码重置 token 存储 - 值应该被散列吗?

azure - Webhook Ms Graph 监听群组对话

sql - 可怕的 Oracle 更新性能