6个常见的高并发缓存问题,你知道几个?( 二 )


还有一种情况,例如某个时间点内,系统预加载的缓存周期性集中失效了,也可能会导致雪崩 。为了避免这种周期性失效,可以通过设置不同的过期时间,来错开缓存过期,从而避免缓存集中失效 。
从应用架构角度,我们可以通过限流、降级、熔断等手段来降低影响,也可以通过多级缓存来避免这种灾难 。
此外,从整个研发体系流程的角度,应该加强压力测试,尽量模拟真实场景,尽早的暴露问题从而防范 。

6个常见的高并发缓存问题,你知道几个?

文章插图
 
 
缓存无底洞现象该问题由 facebook 的工作人员提出的, facebook 在 2010 年左右,memcached 节点就已经达3000 个,缓存数千 G 内容 。
他们发现了一个问题---memcached 连接频率,效率下降了,于是加 memcached 节点,添加了后,发现因为连接频率导致的问题,仍然存在,并没有好转,称之为”无底洞现象” 。
6个常见的高并发缓存问题,你知道几个?

文章插图
 
 
目前主流的数据库、缓存、Nosql、搜索中间件等技术栈中,都支持“分片”技术,来满足“高性能、高并发、高可用、可扩展”等要求 。
有些是在client端通过Hash取模(或一致性Hash)将值映射到不同的实例上,有些是在client端通过范围取值的方式映射的 。当然,也有些是在服务端进行的 。
但是,每一次操作都可能需要和不同节点进行网络通信来完成,实例节点越多,则开销会越大,对性能影响就越大 。
主要可以从如下几个方面避免和优化:
1、数据分布方式
有些业务数据可能适合Hash分布,而有些业务适合采用范围分布,这样能够从一定程度避免网络IO的开销 。
2、IO优化
可以充分利用连接池,NIO等技术来尽可能降低连接开销,增强并发连接能力 。
3、数据访问方式
一次性获取大的数据集,会比分多次去获取小数据集的网络IO开销更小 。
当然,缓存无底洞现象并不常见 。在绝大多数的公司里可能根本不会遇到 。




推荐阅读