大多数CDN服务器对经常访问的内容使用缓存。
场景:让我们假设有人上传了一张非常热门的图片和许多来自同一位置的用户(1000)试图访问该图片。
问题:假设网络服务器接收请求首先检查它的缓存,它发现该图片的内容未命中并从CDN中提取内容。如果拉取,则说x秒,服务器同时获得999个相同内容的请求。
服务器是否会从服务器获取内容999次(因为服务器仍在提取数据且缓存中没有数据)并更新缓存?
如果没有什么方案服务器实现,以避免这种情况。
您可以在服务器端锁定以避免对CDN的过多请求。
当服务器收到请求时:
如果您有许多服务器,并且缓存在这些服务器之间共享,即多个进程。您可以使用分布式锁定,例如Redis'SETNX
。
但是,在这种情况下,您需要注意步骤3:如果服务器锁定成功,但在解锁之前崩溃。其他服务器将永远等待。所以你还需要设置锁的到期时间。