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