Azure Web 应用程序:CDN + 应用程序服务与 Blob 存储
Azure Web Application: CDN + application service vs Blob storage
如果在 Azure 中使用与 website/webapp(即 Azure 应用程序服务)相关的 CDN,使用 blob 存储与仅使用 Web 应用程序作为端点的 benefits/drawbacks 有什么区别?
例如,一个简单的CMS网站将所有上传的图片存储在/uploads/myimage.jpg
中
使用 CDN,我可以将其端点设置在我的网站。com/uploads/ 或者我可以创建一个 blob 容器,将 CMS 设置为在那里存储图像并将其设置为 CDN 的来源。
我选择一个而不是另一个的考虑因素是什么?
如果我理解你的问题,你是在问两种不同情况的优缺点:
- 使用由 Azure Blob 存储支持的 Azure CDN。
- 使用直接访问底层 Web 应用程序的 Azure CDN。
老实说,两者之间并没有太大的区别。当向 CDN 发出资产请求时,Azure 将检索内容、缓存内容并提供内容。因此,一旦加载了 CDN 的缓存,这两种情况就没有区别了。
如果您的缓存过期 headers 时间很短,并且您正在处理非常大的文件和大量请求,则使用 Blob 存储进行初始加载将是更好的选择卸载您的 Web 应用程序。
我可能会从最容易实现的解决方案开始,并且只有在您 运行 遇到问题时才进行调整。
正如 Rob 在他的回答中所说,在性能方面没有太大区别。以下是我认为 Web 应用程序支持的 CDN 和 blob 支持的 CDN 之间的总体核心区别:
- 对于对象的首次命中(或缓存过期后的命中),Web 应用程序支持的 CDN 最初将通过您的 Web 应用程序路由该流量。如果它是一个非常大的资源(例如视频文件),您可能会注意到由于带宽以异常高的方式消耗而导致间歇性性能下降(直到该对象被缓存在 CDN 中)。 Blob 存储没有相同类型的带宽限制。
- 使用 Web 应用程序支持的 CDN,您必须记住,您的存储空间受限于您选择的 Web 应用程序层。例如,如果您有 10 GB 的资产,这可能会迫使您进入更高的层级。使用 Blob 存储,您将拥有 500TB 的总持久存储空间,对象最大可达 4.77TB。
- Web 网络应用程序支持的 CDN,驻留在您的网络应用程序中的存储是 持久的,就像 blob 存储一样,直到您删除您的网络应用程序。然后那个存储就没了。使用 Blob 存储,即使在删除 Web 应用程序(或整个应用程序服务)后,您的存储空间仍将保留。当然,如果您删除存储帐户,您的对象将消失...
- 如果您拥有多个 Web 应用程序(或其他托管在其他地方的应用程序)所需的资产,您将开始拥有来自一个应用程序的链接,指向另一个应用程序的资产,引入依赖项(例如 Web 应用程序
A
和 css 指向网络应用程序内容的链接 B
)。你需要仔细管理它。或者将公共资产存储在 blob 存储中,避免应用程序到应用程序的链接依赖性。
- Blob 存储可以让您选择将静态资产放置在与 Web 应用程序不同的区域。使用 Web 应用程序存储,它们将始终位于同一地点。 (我不是提倡跨区域分离内容;只是指出这样做的灵活性)。
- Blob 存储的内容管理可以通过多种方式完成:直接 REST API 调用、基于 SDK 的调用以及许多第一方和第三方工具。对于 Web App 内容,没有这样的 API 和工具;您要么必须随代码一起部署资产,要么在启动时从其他来源(例如 blob 存储)复制内容(或手动,或通过脚本,或您选择的其他方式)。
如果在 Azure 中使用与 website/webapp(即 Azure 应用程序服务)相关的 CDN,使用 blob 存储与仅使用 Web 应用程序作为端点的 benefits/drawbacks 有什么区别?
例如,一个简单的CMS网站将所有上传的图片存储在/uploads/myimage.jpg
中使用 CDN,我可以将其端点设置在我的网站。com/uploads/ 或者我可以创建一个 blob 容器,将 CMS 设置为在那里存储图像并将其设置为 CDN 的来源。
我选择一个而不是另一个的考虑因素是什么?
如果我理解你的问题,你是在问两种不同情况的优缺点:
- 使用由 Azure Blob 存储支持的 Azure CDN。
- 使用直接访问底层 Web 应用程序的 Azure CDN。
老实说,两者之间并没有太大的区别。当向 CDN 发出资产请求时,Azure 将检索内容、缓存内容并提供内容。因此,一旦加载了 CDN 的缓存,这两种情况就没有区别了。
如果您的缓存过期 headers 时间很短,并且您正在处理非常大的文件和大量请求,则使用 Blob 存储进行初始加载将是更好的选择卸载您的 Web 应用程序。
我可能会从最容易实现的解决方案开始,并且只有在您 运行 遇到问题时才进行调整。
正如 Rob 在他的回答中所说,在性能方面没有太大区别。以下是我认为 Web 应用程序支持的 CDN 和 blob 支持的 CDN 之间的总体核心区别:
- 对于对象的首次命中(或缓存过期后的命中),Web 应用程序支持的 CDN 最初将通过您的 Web 应用程序路由该流量。如果它是一个非常大的资源(例如视频文件),您可能会注意到由于带宽以异常高的方式消耗而导致间歇性性能下降(直到该对象被缓存在 CDN 中)。 Blob 存储没有相同类型的带宽限制。
- 使用 Web 应用程序支持的 CDN,您必须记住,您的存储空间受限于您选择的 Web 应用程序层。例如,如果您有 10 GB 的资产,这可能会迫使您进入更高的层级。使用 Blob 存储,您将拥有 500TB 的总持久存储空间,对象最大可达 4.77TB。
- Web 网络应用程序支持的 CDN,驻留在您的网络应用程序中的存储是 持久的,就像 blob 存储一样,直到您删除您的网络应用程序。然后那个存储就没了。使用 Blob 存储,即使在删除 Web 应用程序(或整个应用程序服务)后,您的存储空间仍将保留。当然,如果您删除存储帐户,您的对象将消失...
- 如果您拥有多个 Web 应用程序(或其他托管在其他地方的应用程序)所需的资产,您将开始拥有来自一个应用程序的链接,指向另一个应用程序的资产,引入依赖项(例如 Web 应用程序
A
和 css 指向网络应用程序内容的链接B
)。你需要仔细管理它。或者将公共资产存储在 blob 存储中,避免应用程序到应用程序的链接依赖性。 - Blob 存储可以让您选择将静态资产放置在与 Web 应用程序不同的区域。使用 Web 应用程序存储,它们将始终位于同一地点。 (我不是提倡跨区域分离内容;只是指出这样做的灵活性)。
- Blob 存储的内容管理可以通过多种方式完成:直接 REST API 调用、基于 SDK 的调用以及许多第一方和第三方工具。对于 Web App 内容,没有这样的 API 和工具;您要么必须随代码一起部署资产,要么在启动时从其他来源(例如 blob 存储)复制内容(或手动,或通过脚本,或您选择的其他方式)。