Azure CDN与Azure Blob存储源拉取速度太慢

19
我正在使用Azure Blob存储在公共容器中存储图像,并将它们嵌入到公共网站中。一切都正常,只要我上传它们,blob就可以在xxxxx.blob.core.windows.net上公开访问。我想使用Azure CDN进行边缘缓存基础结构,并在xxxxx.vo.msecnd.net上设置了一个CDN。
但是现在,当我将我的图像指向CDN时,它会返回404大约15分钟左右,然后开始提供服务。他们的文档中提到我们不应该为高度不稳定或频繁变化的Blob使用CDN,但是对于具有图像上传功能的简单CMS来说,公共站点需要CDN,不是吗?

1
我没有看到这个问题,当从CDN请求图像时,我从来没有遇到过404错误,如果缓存未命中,它只是从源服务器拉取。也许这个问题已经解决了? - Christopher Edwards
这个有更新了吗?你最终选择使用 Azure CDN 作为你的 CMS 吗? - Larsi
3
最终我没有使用Azure CDN。 - Lee Gary
1
我认为Azure CDN自这篇文章发布以来已经发生了变化。现在我可以上传对象并立即将其提供服务。 - Oliver Bock
虽然偶尔会出现短暂的404错误,所以我想它并不完美。 - Oliver Bock
4个回答

14

目前我正面临着同样的问题,即产品图片上传到我的电子商务网站。出于种种明显原因,我更喜欢在 Azure Blob 存储之上使用 Azure CDN,但我不能等待 15 分钟才能使用该图片。

现在,我暂时解决了这个问题,先存储 Blob 存储 URL,然后通过运行一个 Azure WebJob,每天重写为使用 CDN 域名。这似乎是一件不必要的额外工作,但我尚未找到更好的选择,真的很想使用 Azure CDN。


我不确定微软自己是否在内部使用这个 CDN,如果是的话,那么它可能是你所采用的相同方法。 - Lee Gary

0

我现在正在做的事情是...对于与网站相关的图像和文件,我在部署之前手动上传(https://abc.blob.core.windows.net/cdn),如果网站用户使用我的网站上传图像或文件,则我会在 Blob 存储上上传该文件(不是 CDN 的单独容器),使用 CloudBlobClient


-1

CDN 用于静态内容传递,但在您的情况下,您需要通过 CDN 进行动态内容传递。您可以使用云服务 + CDN。这使得动态内容使用 ASP.net 缓存概念从 CDN 传递。

请参考此链接获取更多详细信息:使用 Windows Azure 内容传递网络 (CDN)


该文章建议实现输出缓存,这是一种可行的解决方案,但完全与CDN上下文无关。服务器可以在第一次请求后设置头文件,但其他提供源站拉取的CDN服务可以帮助系统将请求100%卸载。Azure CDN也可以做到,但需要大约15分钟左右。 - Lee Gary
它看起来像输出缓存。但它不仅仅是那样,它使用输出缓存机制来确定缓存策略,但内容是从CDN缓存和传递的。因此,第一个请求是由自定义代码响应的,然后内容从CDN提供。但仍然会命中您的Web角色,但它不会执行mvc/asp.net管道,而是Azure将请求路由到CDN以获取内容。这个配置是这个<rule name="RewriteIncomingCdnRequest" stopProcessing="true">的关键。 - CreativeManix
1
这很有帮助,但在原始问题中,当我们将图像上传到CDN时,尝试从CDN查看文件时,至少15分钟内会返回404错误,然后才开始显示该文件。这对于我的用例来说是不可接受的,因为我使用的是自定义构建的CMS,用户期望一旦他们点击保存,文件就可以立即使用。 - Lee Gary
我已经对此进行了一些测试。新创建的CDN加载第一张图片需要近15到30分钟的时间。然后它就可以正常工作了。我使用https://geopeeker.com/网站从不同的位置测试图像链接,所有的都看起来很好。只要我在我的存储上上传图像,它就会出现在CDN URL中。 - CreativeManix
2
你把“动态内容”和“新的但静态的内容”混淆了。动态内容是指相同的URI更改内容(例如news.html的内容)。静态内容是指相同的URI提供相同的位(例如image.jpg)。 - DeepSpace101

-2
CDN 可以让用户从地理位置最近的 CDN-POP 获取内容,从而实现更低的读取延迟。如果没有 CDN,每个请求都会到达源服务器(在您的情况下是 Azure 存储)。CDN 提供的低延迟是在缓存命中时实现的。在缓存未命中时,CDN-POP 将从源服务器获取内容,降低了 CDN 提供的延迟优势。缓存命中通常取决于内容是静态的(导致缓存命中)还是动态的(导致缓存未命中)以及其受欢迎程度(热门对象导致缓存命中)。
您是否选择使用 CDN 取决于以下因素:a)您的文件是静态的还是动态的,如果是动态的,则使用 CDN 的好处较小;b)低延迟对您的应用程序是否重要;c)请求速率:如果请求量较少,则您的文件可能会被缓存,因此 CDN 可能没有那么有用;d)您是否具有高可扩展性要求。请注意,Azure 存储具有以下 可扩展性限制。如果您的应用程序超出了 Azure 存储的可扩展性限制,则建议使用 CDN。

6
我知道使用CDN的好处和原因,但是请想象一下,用户将图像上传到我的网站,然后我将其放入Azure存储中,在HTML页面上,我将图片的src设置为从CDN提供。但是用户必须等待15分钟才能看到它,而这15分钟的“时间差”没有记录在案中,因此我甚至无法尝试批量更新URL。此外,正如您所提到的,Azure存储对吞吐量等方面有限制。有什么更好的方法来实现这种常见情况? - Lee Gary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接