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