我在接受采访时被问到这个问题: 对于高流量网站,有一种方法(比如getItems())可以经常调用.为了防止每次都进入DB,结果将被缓存.但是,成千上万的用户可能正在尝试同时访问缓存,因此锁
对于高流量网站,有一种方法(比如getItems())可以经常调用.为了防止每次都进入DB,结果将被缓存.但是,成千上万的用户可能正在尝试同时访问缓存,因此锁定资源不是一个好主意,因为如果缓存已过期,则调用DB,所有用户都会等待DB回应.处理这种情况的好策略是什么,以便用户不必等待?
我认为这对于大多数高流量网站来说是一种非常常见的情况,但我没有处理这些问题的经验 – 我有使用数百万条记录的经验,但不是数百万用户.
如何学习高流量网站使用的基础知识,以便我在未来的访谈中更有信心?通常我会开始一个侧面项目来学习一些新技术,但是不可能建立一个高流量的网站:)
在面试中你被问到的问题是所谓的Cache miss-storm – 一种情况,其中很多用户触发缓存的再生,以这种方式命中数据库.为防止这种情况,首先必须设置软到期日期.让我们说硬到期日是1天,软1小时.硬件实际上是在缓存服务器中设置的,软件位于缓存值本身(或缓存服务器中的另一个密钥).应用程序从缓存中读取,看到软时间已到期,提前1小时设置软时间并点击数据库.通过这种方式,下一个请求将看到已更新的时间并且不会触发缓存更新 – 它可能会读取过时数据,但数据本身将处于重新生成的过程中.
接下来的一点是:你应该有缓存预热的程序,例如:而不是用户触发缓存更新,这是您的应用程序中预先填充新数据的过程.
最坏的情况是例如当您没有任何数据时,重新启动缓存服务器.在这种情况下,您应该尽可能快地填充缓存,并且热身程序可能起到至关重要的作用.即使您没有缓存中的值,也可以“锁定”缓存(将其标记为正在更新),仅允许对数据库进行一次查询,并通过请求资源来处理应用程序在给定的超时后再次