课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单介绍了缓存功能的概念与实现方式等内容,而今天我们就再来了解一下缓存的应用场景。
从理论上来说,任何需要提高访问速度的环节都可以加入缓存
但是系统加入缓存模块会在一定程度上增加系统的复杂度,所以在是否引入缓存的问题上,需要根据业务场景来平衡。一般符合以下几种特征的数据可以考虑引入缓存模块:
数据很少变动
这类数据适合缓存的应用场景,因为它基本不涉及到负责的缓存更新操作,所以只要将其加载到缓存中即可。具有代表性的像网站用到的js,css等这些静态资源,用户登录之后生成的session信息等。
说到数据很少变动,不得不提CDN这种服务了,很多大型网站都会利用CDN来加速一些不变资源的访问速度,比如一些图片,视频等。由于用户访问这些资源的本源需要跨越多个主干网,在速度上较慢,而CDN恰恰弥补了这个缺陷,所以这里也可以把CDN看成是一种缓存的服务。
热点数据
这种数据是我们平时开发中要加缓存的主要原因数据,有可能导致系统瘫痪的也是这种数据。它大的特点是发生时间不确定,流量峰值不确定。大家可能还依稀记得微博因为两个明星出轨而挂掉的事件,虽然微博的系统架构后来经过改造可以同时抗住N个明星出轨,但是在不确定这个因素上依然无能为力。
热点数据的缓存并不容易设计,因为它带有单点属性,什么意思呢?假设我们的缓存服务器有100个节点,这个时候发生了某个热点新闻,而这个热点新闻的缓存在0号节点,大量的请求会被路由到0号节点,很有可能会导致0号节点垮掉,如果0号节点垮掉,基于故障转移策略,流量瞬间会转移到另外一个节点,然后这个节点会垮掉,以此类推.....缓存虽然提高了系统的整体吞吐量,但是在应对有针对性的流量高峰的时候需要单独针对。这其实也是分布式系统要解决的问题,既然一个节点扛不住流量高峰,系统可以设计多个节点一起来抗,至于以上的热点数据场景,简单粗暴的方式就是缓存副本,一份缓存数据会存在多份副本,类似于MySQL的读写分离方案,多份副本同时提供读取操作。
耗时操作
某些计算代价或者获取代价很大的数据在特定的条件下也适合进行缓存。为什么要加特定条件呢?如果系统对这些数据的一致性有着严格的要求,而且会频繁的变动,虽然获取数据代价比较大,但是你也要充分考虑缓存带来的副作用。像我们常用的报表服务,一般生成报表都比较耗时,如果报表的数据是相对稳定的,那我们就可以考虑用缓存来提高系统的性能。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。