我正在尝试将一些计算转移到 Azure 云服务。我尝试实现的工作流程的步骤之一包括运行生成文件的 Win32 桌面应用程序。显然,我们无法进行云计算的用户交互,因此应用程序是使用命令行参数启动的。该进程启动,生成文件,然后存在。目前我无法重构代码并将此功能移至命令行无窗口实用程序。
首先,我选择 Azure Functions,因为它们适用于事件驱动的简短计算,而这正是我所需要的。而且它们很便宜。但我遇到了一个问题,Azure Functions 中的进程正在 sandbox 内执行。阻止 User32/GDI32 系统调用,从而阻止我启动桌面应用程序。
我提出的另一个解决方案是安装一个虚拟机驱动器,安装了所有需要的 Visual C++ 可再发行组件,然后将 Azure Batch 与基于预配置驱动器的节点一起使用。但该解决方案还有另一个缺点,因为安装新节点需要几分钟的时间。当然,我可以拥有一些始终处于事件状态的节点,但无论如何,进一步扩展很慢,并且拥有事件节点并不便宜。另外,我感觉 Azure Batch 有点矫枉过正,因为在我的情况下不需要 HPC。 Azure Functions 的计算能力对我来说已经足够了。
有某种折衷的解决方案吗?这样我就有了一个快速扩展、快速响应的解决方案,但不需要基于Azure虚拟机建立Azure Batch?
最佳答案
许多 GDI32 调用现在可用,但以容器化形式提供。
因此,您可以使用桌面应用程序在 Docker 容器内部署函数。
引用以下article以获得更多解释。
引用以下documentation关于如何部署容器化功能。
关于类似 Azure Functions 的解决方案,能够运行 Win32 桌面应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72388377/