首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

(超清)高性能多级网关与多级缓存架构落地实战

高性能多级网关与多级缓存架构落地实战

download:https://www.sisuoit.com/4264.html

缓存在大大减轻存储体系的压力的同时,也给体系架构带来了更多复杂性。所以我们在架构规划时需求针对缓存的复杂性进行专门处理,否则很简略发生很多BUG,乃至某些场景下会导致整个体系崩溃。下面简略介绍一下架构规划时缓存上简略出现的问题。

第一点:缓存穿透。是指缓存没有发挥效果,在事务体系中运用了缓存,也去缓存查询数据,但其实缓存中没有需求的数据,此刻事务体系还要再次去存储体系查询数据。一般有两种状况:

1,存储数据不存在。存储体系中被恳求的数据其实不存在。此刻,假如存储体系中没有这个数据,则缓存中也无法存储对应的数据,这样就导致用户运用体系进行查询的时,缓存中找不到对应的数据,每次都要在存储体系中再查询一遍,最后返回数据不存在。此刻架构中的缓存规划在这个场景中并没有起到分担存储体系拜访压力的效果。

一般状况下,这种状况不会太多,但假如遭受某些异常,比方黑客进犯,成心针对利用这种状况对体系进行损坏,有或许将存储体系拖垮。

关于这种状况的处理办法,一般是在查询存储体系没有找到的时分,设置一个默认值(可所以空值,也可所以具体的值)存放到缓存中,如此再次读取缓存时就会获取到默认值,而不会持续拜访存储体系。

2,缓存中的数据生成时消耗很多时刻或许资源。这状况是存储体系中有对应的数据,缓存生成需求消耗较长时刻或许消耗很多资源。假如刚好在事务拜访时遭受这种状况,那么也会出现拜访压力全部会集在存储体系上的状况。比方遭受网络爬虫或许竞争对手过来爬取数据,大批量的数据并没有在缓存中存储起来,简略突发此类问题。

一般的应对计划就是加强监控识别爬虫然后制止拜访,但这或许会影响SEO和推行;要么发现问题后及时处理,因为爬虫不是进犯,不会进行暴力损坏,对体系的影响是逐渐的,监控发现问题后有时刻进行处理。

第二点:缓存雪崩。是指当事务体系中缓存失效(过期)后引起体系功能急剧下降的状况。缓存失效被清除后,事务体系有必要从头生成缓存,此刻需求拜访存储体系,再次进行运算,整个进程或许耗时几十毫秒乃至上百毫秒。关于一个要求高并发的事务体系来说,这段时刻内或许会接到几百上千个恳求。由于新的缓存还没有生成,而且处理这些恳求的线程都不知道别的有一个其他线程正在生成缓存,而让所有的恳求都恳求去从头生成缓存,都会去拜访存储体系,然后对存储体系形成巨大的功能压力!严重的会形成体系数据库宕机,然后形成连锁反应,形成整个事务体系崩溃。

针对此种状况,常见处理方法有两种:

1,更新锁。对缓存更新加锁保护,保确保只有一个线程进行缓存更新,其他线程要么等待锁释放后从头读取缓存,要么返回空值或默认值。

关于分布式集群的巨大事务体系,或许存在上百上千台服务器,即便每台服务器只有一个线程进行更新缓存操作,但这么多台服务器加起来也有上百上千个线程同时更新缓存,同样存在雪崩的问题。因而分布式集群的事务体系要完成更新锁机制,需求用到分布式锁,如 ZooKeeper。

2,后台更新。通过后台线程更新缓存,而不由事务线程来更新缓存,缓存的有效期设置为永久,后台线程定时更新缓存。

后台定时更新有一种特别的场景,当缓存内存不行时,会主动“踢掉”一部分缓存数据,从数据被“踢掉”到下一次定时更新缓存的这段时刻内,事务线程读取这部分值取得的是空值,而此刻事务线程自身又不去更新缓存,因而事务上看到的现象就是数据丢了。处理的方法有两种:a,除了定时更新缓存,后台线程还需求频繁地去读取缓存(例如,1 秒或许 100 毫秒读取一次),假如在读取时发现缓存被“踢了”就立刻更新,这种方法完成简略,但读取时刻间隔不能设置太长;b,事务处理线程发现缓存失效后,发送音讯告诉后台线程更新缓存。此刻或许出现多个事务处理线程都发送了缓存更新音讯,但对后台线程没有大的影响,后台线程更新缓存前判别缓存是否存在,存在就不执行更新操作。这种方法完成依赖音讯机制,复杂度会高一些,但缓存更新及时,用户体验更好。

第三点:缓存热门。虽然缓存体系的功能比较高,但关于特别热门的数据,假如大部分乃至所有的事务恳求都来运用同一份缓存数据,那么这份数据的缓存服务器的压力也相当大。例如,某明星微博发布宣告恋爱了,很短时刻发生上千万的用户来围观。

缓存热门的处理计划主要是仿制多份缓存,运用多个缓存副本,将短时刻内的恳求分散到多个缓存服务器上,减轻缓存热门导致的单台缓存服务器压力。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Of3CzKrAELGlPycRyTPgt2pQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券