天天看點

什麼是緩存無底洞現象,如何解決?

該問題是由 facebook 的從業人員提出的,facebook 在 2010 年左右,memcached 節點就已經達 3000 個,緩存數千 G 内容。

他們發現了一個問題 - memcached 連接配接頻率,效率下降了,于是加 memcached 節點,添加了後,發現因為連接配接頻率導緻的問題仍然存在,并沒有好轉,稱之為 “無底洞現象” 。

什麼是緩存無底洞現象,如何解決?

目前主流的資料庫、緩存、Nosql、搜尋中間件等技術棧中,都支援 “分片” 技術,來滿足 “高性能、高并發、高可用、高擴充” 等要求。有些是在 client 端通過 Hash 取模(或一緻性 Hash)将值映射到不同的執行個體上,有些是在 client 端通過取值範圍的方式映射的。當然,也有些是在伺服器端進行的。但是,每一次操作都可能需要和不同節點進行網絡通信來完成,執行個體節點越多,則開銷會越大,對性能影響就越大。

主要可以從如下幾個方面避免和優化:

1. 資料分布方式

有些業務資料可能适合 Hash 分布,而有些業務适合采用範圍分布,這樣能夠從一定程度避免網絡 IO 的開銷。

2. IO 優化

可以充分利用連接配接池,NIO 等技術來盡可能降低連接配接開銷,增強并發連接配接能力。

3. 資料通路方式

一次性擷取大的資料集會比分多次去擷取小資料集的網絡 IO 開銷更小。

當然,緩存無底洞現象并不常見。在絕大多數的公司裡可能根本不會遇到。

繼續閱讀