【问题标题】:Programming against Azure / CDN针对 Azure / CDN 进行编程
【发布时间】:2011-01-11 06:20:57
【问题描述】:

我们正在将本地应用程序迁移到 Azure 云。内部企业用户通常通过管理界面将全尺寸图像上传到我们的网站(这些现在将被发送到 Azure blob 存储)。该站点负责在请求时创建正确的图像尺寸。所以现在发生的事情(本地环境)是这样的:

1) 用户上传完整大小的文件。

2) 当通过 GetImage HTTP 处理程序(即http://www.site.com/GetImage.aspx?imageid=15&height=100&width=100)请求较小的版本时,处理程序会检查我们之前是否创建了该尺寸的该图像的版本。如果是这样,它将直接写入响应流。如果没有,则需要一秒钟来调整大小,将其保存到“/iamges/cache”目录并将调整大小的图像写入响应流。

3) 下次以该大小请求该文件时,它会返回先前创建的图像。

所以我想使用 Azure 和 Blob 存储实现相同类型的机制,但我有几个问题:

1) 我不能简单地检查是否存在 blob。我必须先下载 blob,然后调用 FetchAttributes 以查看它是否引发异常。但是,这样做实际上会下载图像。那么这不会使图像请求的数量增加一倍(一个是查看它是否存在,另一个是向用户显示)?

2) 假设图像不存在我需要的大小(即 blob /images/cache/image_15_100_100.jpg 不存在 -- id #15, 100x100 像素)。因此,我向 CDN 发出了一次请求,以查看它是否存在。现在我必须下载一个 5-10 MB 的全尺寸图像(而不是从我们的本地文件系统中读取它,速度很快),将 5-10 MB 的图像加载到内存中,调整它的大小并重新上传到CDN。这似乎很耗时,尤其是当我可以在一个请求中获得 10-15 张这样的图像时。

我知道 Azure 相对较新,但是对于这种与 blob 存储的交互,是否有任何接近“最佳实践”的方法?我可以考虑另一种方法吗?这对于调整图像大小来说似乎有很多开销,所以我想我一定是遗漏了一些东西或忽略了另一个解决方案。

【问题讨论】:

  • 可能的图像大小请求是预先确定的还是完全任意的?
  • 目前它们在某种程度上是预先确定的,但业务需求表明我们需要能够即时调整大小。我已经考虑过以正确的尺寸预加载它们。 :)
  • 为什么不使用 Azure SQL 来存储 Blob 和元数据,包括对特定大小的最后一个图像下载的引用,如果同一网络上的某人请求图像,您可以通过本地网络检索它,本地缓存等?您仍然可以下载图片
  • 我们有超过 40GB 的图像。考虑到 SQL Azure 的最大数据库大小为 50GB 并且每月花费近 500 美元,这对于 SQL Azure 来说过于昂贵。

标签: c# azure cdn


【解决方案1】:

好的,我认为这里发生了很多事情。我的回答基于以下假设:

  • 这些图像的最终用途是 显示在网站上
  • 上面提到的网站是 在 Azure 上运行
  • 您想使用 CDN 加速 访问图片
  • 您正在使用 .Net 存储客户端 图书馆

如果这些假设中的任何一个是错误的,请告诉我,我会适当地编辑我的答案。

  1. 你说得对,.Net 客户端库中没有内置方法可让您检查 blob 是否存在。但是,通过执行.FetchAttributes(),这实际上并没有下载图像,它只是尝试retrieve the header information(就像您列出容器中的所有 blob 时一样),直到您调用一个 blob 才真正下载的.DownloadX() 方法。

  2. 您的服务器端代码无需对话即可使用任何 CDN 功能。它应该只与 blob 存储中的图像对话,就像它们是任何旧 blob 一样。唯一需要使用 CDN URL 的情况是在您正在显示的页面上指定图像的路径时。

  3. 您不希望网站必须返回图像流,而是希望它指向包含图像的 CDN 上的 URL。 CDN 将能够处理比您可以构建的任何网站更多的负载。然后网站可以检查 blob 是否存在,如果存在,则返回 URL。如果它没有下载完整的图像,调整它的大小,保存它,然后返回 URL。虽然从 blob 存储访问图像不如从本地磁盘读取图像快,但它仍然非常快,尤其是对于像您所说的小于 10MB 的文件。

  4. 大概有人在某个地方指定在您的站点中使用的位置和大小的图像。你能捕捉到它并生成调整大小的图像吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-16
    • 2014-07-24
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多