存储

存储CDN


上传至 Supabase Storage 的所有资源都会通过内容分发网络(CDN)进行缓存,以降低全球用户的访问延迟。CDN 是由地理分布的服务器或节点组成的网络,这些节点会缓存来自源服务器的内容。对于 Supabase Storage 而言,源服务器就是运行在与您项目相同区域的存储服务器。除了提升性能外,CDN 还能通过缓解分布式拒绝服务(DDoS)等攻击来增强安全性和可用性。

示例

让我们通过一个示例了解 CDN 如何提升性能。

假设在新加坡启动的 Supabase 项目中创建了一个新存储桶。所有对 Supabase Storage API 的请求都会首先路由到 CDN。

当美国用户请求某个对象时,请求会被路由至美国 CDN 节点。此时该 CDN 节点缓存中没有该对象,于是会向新加坡的源服务器发起请求。 CDN 缓存未命中

另一位同样位于美国的用户请求相同对象时,将直接从美国 CDN 缓存获取响应,无需再次回源到新加坡。 CDN 缓存命中

每个请求的缓存状态会通过 cf-cache-status 响应头返回。MISS 状态表示 CDN 节点缓存中没有该对象,需要回源获取;HIT 状态则表示对象直接从 CDN 缓存返回。

公共存储桶与私有存储桶

公共存储桶中的对象无需任何授权即可访问。与私有存储桶相比,这能带来更高的缓存命中率。

对于私有存储桶,每个对象的访问权限都会在用户级别进行检查。例如,如果两个不同的用户从同一区域访问私有存储桶中的同一个对象,由于他们可能附加了不同的安全策略,会导致两个用户都出现缓存未命中的情况。

另一方面,如果两个不同的用户从同一区域访问公共存储桶中的同一个对象,则第二个用户会获得缓存命中。