什么是缓存无底洞现象,如何解决?

该问题是由 facebook 的工作人员提出的,facebook 在 2010 年左右,memcached 节点就已经达 3000 个,缓存数千 G 内容。

他们发现了一个问题 - memcached 连接频率,效率下降了,于是加 memcached 节点,添加了后,发现因为连接频率导致的问题仍然存在,并没有好转,称之为 “无底洞现象” 。

目前主流的数据库、缓存、Nosql、搜索中间件等技术栈中,都支持 “分片” 技术,来满足 “高性能、高并发、高可用、高扩展” 等要求。有些是在 client 端通过 Hash 取模(或一致性 Hash)将值映射到不同的实例上,有些是在 client 端通过取值范围的方式映射的。当然,也有些是在服务器端进行的。但是,每一次操作都可能需要和不同节点进行网络通信来完成,实例节点越多,则开销会越大,对性能影响就越大。

主要可以从如下几个方面避免和优化:

1. 数据分布方式

有些业务数据可能适合 Hash 分布,而有些业务适合采用范围分布,这样能够从一定程度避免网络 IO 的开销。

2. IO 优化

可以充分利用连接池,NIO 等技术来尽可能降低连接开销,增强并发连接能力。

3. 数据访问方式

一次性获取大的数据集会比分多次去获取小数据集的网络 IO 开销更小。

当然,缓存无底洞现象并不常见。在绝大多数的公司里可能根本不会遇到。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值