(请注意,我只使用新的“刀片”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 回答
如果它们位于相同的应用服务计划中,则它们在同一个VM中运行 . 尝试在Kudu控制台中为每个键入
hostname
,您将看到相同的计算机名称 .但请注意,它们每个都在不同的沙箱中运行,这会阻止它们看到彼此的文件 . 像
d:\home
这样的文件夹是虚拟化的,实际上是指向网络共享 . 所以你不能用它来得出关于机器是否相同的结论 .当我回答here时,计划中的所有应用程序服务都在同一组VM中运行,共享所有计算资源 .
您假设计划中的每个应用程序服务与所有其他应用程序服务共享文件 . 这是不正确的:每个应用服务都有自己的一组文件,在
d:\home
中为每个应用服务 . 如果您需要共享文件,则需要使用App Services外部的内容,例如Azure文件服务(SMB共享) . Azure文件服务与基于每个应用程序服务为您创建的空间分开 .Azure "App Service"类似于"Container"(Docker术语) . 虽然它基于VM,但它的重量比VM本身轻得多 . 例如,你不能RDP到它 .
Azure“VM”是一个成熟的虚拟机 . 操作系统可以是Windows,也可以是几种不同版本的Linux .
您可以在此处获取更多信息:
Azure App Service, Cloud Services, Virtual Machines, and Service Fabric comparison
这是一篇很好的文章,比较网站(应用服务的一个示例), Cloud 服务和虚拟机: