【问题标题】:Does each Azure "App Service" instance run on its own VM?每个 Azure“应用服务”实例是否在其自己的 VM 上运行?
【发布时间】:2016-09-04 19:35:08
【问题描述】:

(请注意,我仅使用新的“刀片”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 应用服务计划,因为我需要一些更高级的功能)。这对微软来说是不经济的。

如何让 Azure 托管环境中的多个 Azure 应用服务共享同一个 VM?还是我想错了?

为了避免 X/Y 问题:我将声明我主要关心的是文件的持久性。我正在部署的 web 应用程序将上传的文件存储到 webroot 的子目录中,这些文件应该永久存在。那里有模棱两可的信息:有些人建议网站(及其所有文件)被积极销毁和回收,应该使用 Azure 存储 Blob。我想使用 Azure 文件共享,不幸的是,我在使用 WNetAddConnection2 时收到了 ACCESS_DENIED 错误,并且一些用户报告说 Azure 文件共享不能在 Azure 应用程序服务中使用 - 尽管我无法从 Microsoft 找到任何关于此的权威信息。

【问题讨论】:

  • 我相信虚拟机的数量是基于应用服务计划的。由于它是“1 个小”,这意味着您有 1 个 VM。一定有其他文件存储机制使网站看起来可以看到自己的 D 驱动器版本。
  • @mellamokb 有趣的是,没有 C: 驱动器 - 一切,甚至 WindowsProgram FilesUsers 目录都在 D:
  • 如果您查看“环境”选项卡,可以看到共享 C:\ 驱动器的提示:例如,我看到的是“C:\DWASFiles\Sites\#1sitename”。我可以确认似乎无法访问 C:\ 驱动器。
  • 无论如何,这绝对是错误的层,因为它是托管服务。我们所有的应用服务都使用 Azure 存储文件服务,这可能与您所说的 Azure 文件共享有所不同? Azure 存储文件仍然基于 REST API,但其行为类似于文件系统。
  • 如果您需要来源,请查看blogs.msdn.microsoft.com/kwill/2012/10/05/…。但我实际上是从(不愉快的)经历中说的。这可能非常具有欺骗性,因为您的文件可能会在导致它们被删除的第一个真实事件之前持续数月。只是不要去那里,相信我。设置任何云服务更新后重新附加的 Azure 文件存储网络共享非常容易。如果它必须是 C:\ 驱动器(就像我们的应用程序一样),那么使用符号链接。

标签: azure azure-web-app-service


【解决方案1】:

如果它们在同一个应用服务计划中,则它们在同一个 VM 中运行。尝试在 Kudu 控制台中输入hostname ,您将看到相同的机器名称。

但请注意,它们各自在不同的沙箱中运行,这会阻止它们查看彼此的文件。 d:\home 之类的文件夹是虚拟化的,实际上指向网络共享。所以你不能用它来得出机器是一样的结论。

【讨论】:

  • 似乎 David Makogon 刚刚击败了我,所以你可以选择他的答案 :)
  • 能否详细说明沙盒机制?我很想知道它是如何工作的——如果我能在我自己的、自我管理的服务器上达到同样的效果。
  • 您可以在此处阅读有关沙盒的更多信息:github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox。它是 Azure Web Apps 所特有的,因此您不能在本地使用相同的沙箱。
【解决方案2】:

正如我回答 here 一样,计划中的所有应用服务都在同一组虚拟机中运行,共享所有计算资源。

您假设计划中的每个应用服务与所有其他应用服务共享文件。这是不正确的:每个应用服务都有自己的文件集,每个应用服务的 d:\home 中。如果需要共享文件,则需要使用应用服务外部的东西,例如 Azure 文件服务(SMB 共享)。 Azure 文件服务独立于为每个应用服务创建的空间。

【讨论】:

  • 是 1 个 VM 用于计划内的所有应用服务,还是一组 VM 用于计划内的所有应用服务?我之所以问这个问题是因为我目前在 Live 环境中遇到了一些奇怪的问题,并且我发现 prod-staging 的主机名与 prod 不同,我想知道这是否是找到问题的好方法。
【解决方案3】:
  1. Azure“应用服务”类似于“容器”(Docker 术语)。虽然它基于虚拟机,但它比虚拟机本身重量更轻。例如,你不能 RDP 进入它。

  2. Azure“VM”是一个成熟的虚拟机。操作系统可以是 Windows 或多种不同风格的 Linux。

  3. 您可以在此处获取更多信息:

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

http://www.c-sharpcorner.com/UploadFile/42ddd2/azure-websites-vs-cloud-service-vs-virtual-machines/

Azure 网站

Azure 网站几乎没有责任完成,并且 控制相对较少。它是大多数 Web 应用程序的最佳选择。 部署和管理直接集成到我们的平台中 得到。

Azure 云服务

如果您想要更多类似 Web 服务器的环境,您可能想去 与 Azure 云服务。您可以远程访问您的云服务和 配置启动任务。云服务让您更轻松 管理和敏捷性优于 Azure 网站

Azure 虚拟机

为您提供丰富的功能;但是,正确配置, 保护和维护虚拟机需要更多时间和更多 IT 与 Azure 云服务和 Azure 网站相比的专业知识。

【讨论】:

  • 这与问题正交,与VM/Cloud Service/App Service(和Service Fabric)之间的比较无关。
猜你喜欢
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多