问题

问题

问题

有没有什么方法可以提高在 Azure 应用服务下运行的基于 Linux 的容器和托管在 Azure 文件中的挂载卷之间的元数据操作性能?

语境

我最近将一个包含所有内容的解决方案迁移到了基于 Azure 的解决方案中,其中:

  • 代码在 Azure App Service 下托管的容器上运行。
  • 作为业务数据一部分的文件位于 Azure 文件上(即 Azure 存储帐户下的共享)/安装在容器上(通过应用服务的Settings>>Configuration部分Path Mappings)。

这给搜索文件夹以查看某些文件是否存在的操作带来了一些性能问题。目前,该操作是通过 PHP 的文件存在函数

在本地设备上测试时,我可以通过附加:cached绑定参数来提高性能;例如--mount type=bind,source=d:\my\host\path,target=/var/my/container/path:cached;但我找不到在 Azure App Service 中执行类似操作的选项。

我的容器运行的是 Linux(Ubuntu:21:10);而且我读到过,SMB 元数据操作(包括检查文件是否存在)在 Linux 中的开销比在 Windows 中更高;所以也许这是相关的(即 Azure Files 使用 SMB);尽管我不确定(因为路径已安装到容器,所以容器操作系统可能不知道底层实现)。

我已经启用large file shares增加文件共享可用的 IOP;但没有什么区别(考虑到这是一个元数据而不是 IO 性能问题,这是有道理的)。

目前,我认为解决方案是更新代码以在应用程序的数据库中保留文件结构的表示,以便我们可以查询以更快地获取相同的信息;但这有一个缺点,即每次上传或删除文件的操作都需要更新数据库以保持磁盘和数据库信息同步/重复保存信息的位置;所以如果可能的话,我热衷于解决这个基础设施问题,而不是重新编码。

相关内容