存储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 缓存返回。
公共存储桶与私有存储桶
公共存储桶中的对象无需任何授权即可访问。与私有存储桶相比,这能带来更高的缓存命中率。
对于私有存储桶,每个对象的访问权限都会在用户级别进行检查。例如,如果两个不同的用户从同一区域访问私有存储桶中的同一个对象,由于他们可能附加了不同的安全策略,会导致两个用户都出现缓存未命中的情况。
另一方面,如果两个不同的用户从同一区域访问公共存储桶中的同一个对象,则第二个用户会获得缓存命中。