使用 Google 个存储桶作为按需拉取 CDN
Using Google storage bucket as on-demand pull CDN
我正在尝试使用 Google Cloud Storage 存储桶从 GCE 上的 Web 服务器提供静态文件。我看到 in the docs 我必须手动复制文件,但我正在寻找一种方法来像其他 CDN 服务一样按需动态复制文件。这可能吗?
如果您问 Google Cloud Storage 是否会自动透明地缓存来自您的网络服务器的经常访问的内容,那么答案是否定的,您必须自己明确地将文件复制到您的存储桶中。
但是,如果您询问是否可以动态(即以编程方式)将文件复制到您的 GCS 存储桶,而不是手动复制(例如,通过 gsutil
或网络 UI) ,那么是的,这是可能的。
我想您会使用类似于以下过程的东西:
# pseudocode, not actual code in any language
HandleRequest(request) {
gcs_uri = computeGcsUrlForRequest(request)
if exists(gcs_uri) {
data = read(gcs_uri)
return data to user
} else {
new_data = computeDynamicData(request)
# important! serve data to user first, to ensure low latency
return new_data to user
storeToGcs(new_data) # asynchronously, don't block the request
}
}
如果这符合您的计划,那么有多种方法可以实现,例如,
请注意,为避免无限期地填满您的 Google Cloud Storage 存储桶,您应该配置一个 lifecycle management policy 以在一段时间后自动删除文件,或者设置一些其他进程来定期清理您的存储桶.
我正在尝试使用 Google Cloud Storage 存储桶从 GCE 上的 Web 服务器提供静态文件。我看到 in the docs 我必须手动复制文件,但我正在寻找一种方法来像其他 CDN 服务一样按需动态复制文件。这可能吗?
如果您问 Google Cloud Storage 是否会自动透明地缓存来自您的网络服务器的经常访问的内容,那么答案是否定的,您必须自己明确地将文件复制到您的存储桶中。
但是,如果您询问是否可以动态(即以编程方式)将文件复制到您的 GCS 存储桶,而不是手动复制(例如,通过 gsutil
或网络 UI) ,那么是的,这是可能的。
我想您会使用类似于以下过程的东西:
# pseudocode, not actual code in any language
HandleRequest(request) {
gcs_uri = computeGcsUrlForRequest(request)
if exists(gcs_uri) {
data = read(gcs_uri)
return data to user
} else {
new_data = computeDynamicData(request)
# important! serve data to user first, to ensure low latency
return new_data to user
storeToGcs(new_data) # asynchronously, don't block the request
}
}
如果这符合您的计划,那么有多种方法可以实现,例如,
请注意,为避免无限期地填满您的 Google Cloud Storage 存储桶,您应该配置一个 lifecycle management policy 以在一段时间后自动删除文件,或者设置一些其他进程来定期清理您的存储桶.