每个Azure“App Service”实例是否都在自己的VM上运行?

(请注意,我只使用新的“刀片”Azure门户并使用新术语,因此请避免使用“Azure网站”之类的字词,因为它们不适用于此处) .

在门户网站中,我创建了两个Azure应用服务,“foo-production”和“foo-staging” - 两者都存在于同一个订阅和资源组中,并共享相同的应用服务计划 . 这些应用程序服务代表简单的ASP.NET Web应用程序的 生产环境 和登台部署,该应用程序作为普通网站运行 .

应用服务计划是“基本:1小” .

我的理解是,当您将Azure应用服务与基本或更高版本的应用服务计划一起使用时,该计划代表一个我能够托管尽可能多的IIS网站的虚拟机 - 这些IIS网站在Azure中表示为Azure应用服务 .

鉴于此,我会假设当我访问Kudu(https://yourwebsite.scm.azurewebsites.net/DebugConsole)中VM的文件系统时,我将能够在一些公共根目录下看到每个网站的文件 .

但是,当我访问 foo-production 网站的Kudu控制台时,我看到它的文件位于 D:\home\site\wwwroot ,并且找不到 foo-staging 的文件 .

如果我正确理解这一点,这意味着Azure实际上只为每个网站创建了一个全新的虚拟机,并且网站无法共享文件系统 - 而且我无法拥有更高级的Azure管理的IIS配置 - 我必须创建我自己管理的Windows Server VM .

我可以理解每个网站单独的VM背后的动机,这看起来很浪费 - Windows Server每个VM至少需要1 GB的内存,但我的网站主要只是静态文件(但我不能使用 Shared App Service计划,因为我需要一些更高级的功能) . 那对微软来说那是不经济的 .

如何在Azure托管环境中拥有多个Azure应用服务共享同一个VM?还是我错误地思考它?

为了避免X / Y问题:我将商店上传的文件部署到webroot的子目录中,这些文件应永久存在 . 有一些含糊不清的信息:有些人建议网站(及其所有文件)被主动销毁和回收,并且应该使用Azure存储Blob . 我想使用Azure文件共享,不幸的是,当使用 WNetAddConnection2 时,我收到了 ACCESS_DENIED 错误,并且一些用户报告说Azure文件共享无法在Azure应用服务中使用 - 尽管我找不到任何有关Microsoft的权威信息 .

回答(3)

2 years ago

如果它们位于相同的应用服务计划中,则它们在同一个VM中运行 . 尝试在Kudu控制台中为每个键入 hostname ,您将看到相同的计算机名称 .

但请注意,它们每个都在不同的沙箱中运行,这会阻止它们看到彼此的文件 . 像 d:\home 这样的文件夹是虚拟化的,实际上是指向网络共享 . 所以你不能用它来得出关于机器是否相同的结论 .

2 years ago

当我回答here时,计划中的所有应用程序服务都在同一组VM中运行,共享所有计算资源 .

您假设计划中的每个应用程序服务与所有其他应用程序服务共享文件 . 这是不正确的:每个应用服务都有自己的一组文件,在 d:\home 中为每个应用服务 . 如果您需要共享文件,则需要使用App Services外部的内容,例如Azure文件服务(SMB共享) . Azure文件服务与基于每个应用程序服务为您创建的空间分开 .

2 years ago

这是一篇很好的文章,比较网站(应用服务的一个示例), Cloud 服务和虚拟机:

http://www.c-sharpcorner.com/UploadFile/42ddd2/azure-websites-vs-cloud-service-vs-virtual-machines/ Azure网站Azure网站几乎没有责任完成,而且控制力相对较低 . 它是大多数Web应用程序的最佳选择 . 部署和管理直接集成到我们获得的平台中 . Azure Cloud 服务如果您想要更多,类似Web服务器的环境,您可能希望使用Azure Cloud 服务 . 您可以远程访问您的 Cloud 服务和配置启动任务 . Cloud 服务为您提供比Azure网站更轻松的管理和敏捷性Azure虚拟机为您提供丰富的功能集;但是,与Azure Cloud 服务和Azure网站相比,正确配置,保护和维护VM需要更多时间和更多IT专业知识 .