我应该为文件使用 Blob 存储还是 Azure VM 存储?

Should I use Blob storage or Azure VM storage for files?

我正在编写存储在 Azure VM 上的 MVC 5 互联网应用程序。在此 Internet 应用程序中,用户可以通过 url.

上传 public 可以访问的图像和视频等文件。

我的问题是:

我应该将此上传的数据存储在与 Azure VM 相同位置的 Azure Block Blob 容器中,还是让用户将此数据上传到 VM 存储的硬盘驱动器,然后可以通过 url?

使用 Blob 存储还是在 VM 上存储文件更便宜?

例如,如果我将以下文件存储在 Blob 存储和 Azure VM 上,并且每个文件都被访问和查看了 100 次,哪个会更便宜?

  1. 10 * 1MB 图片
  2. 10 * 5MB 视频

另外,除了存储成本和交易成本,我还应该考虑哪些因素?

提前致谢。

当您首次配置 VM 时,所有 Azure VMS 至少有两个磁盘 - OS 磁盘和临时磁盘。

您不要将数据存储在临时磁盘上,因为它仅用于临时存储;当 VM 移动到另一台物理机器时,该驱动器上的数据将丢失,这可能发生在升级、补丁期间,以及当 Windows Azure 检测到您 运行 所在的节点有问题时。我也不建议将数据存储在 OS 磁盘上。 OS 和临时磁盘都有最大大小限制,随着数据大小的增长,您将达到最大大小限制。

我不知道你的确切要求,但在我看来你会想要使用 Azure Blob 存储或将更多数据驱动器附加到你的 VM 并将数据保存在那里。

在这种情况下,您似乎应该为上传的 blob 创建一个单独的容器并将其标记为 public。您的应用应将用户上传的文件保存到此 public 容器中。然后用户可以直接通过 blob 的 URL 访问容器中的文件。

这个推荐有几个原因:

  1. 成本:正如您提到的,块 blob 的成本比 VHD 上的 space 便宜
  2. IOPS:您的 VHD 限制为每秒 500 次 IO 操作。您已经 运行 您的应用程序并且 OS 在此 VHD 上,这意味着您所有上传的文件加在一起的剩余 IOPS 较少
  3. 吞吐量:通过直接通过存储为这些 blob 提供服务,您不会使前端 VM 成为带宽瓶颈(如果下载流量高,VM 的网络可能会饱和)
  4. 可管理性:您可以从任何资源管理器管理 blob,并且 add/remove 可以使用任何存储资源管理器手动管理,而无需登录到您的虚拟机。
  5. 可扩展性:如果将它放在虚拟机的磁盘上,那么只有那个虚拟机可以访问这些文件。使用 blob,您可以使用多个 VM 作为前端,以随着负载的增加而扩展。

最简单的方法是使用 blob 存储来存储您的文件。 Atul Sikaria 指出了优缺点,但我们还需要记住,可以选择将高级存储与 SSD 磁盘一起使用。与标准 blob 存储相比,这是非常有效的选择。

澄清一下。对于原始电子邮件中描述的工作负载,高级存储并不理想。高级存储专为需要保证 IOPS 和低延迟的 Azure 虚拟机工作负载而设计,例如数据库应用程序。成本将高于将数据存储在块 blob 中。块 Blob 也更适合媒体文件服务。