4個影響快取命中率的因素,你知道幾個?
阿新 • • 發佈:2019-12-31
一、快取命中率的介紹
命中:可以直接通過快取獲取到需要的資料。 不命中:無法直接通過快取獲取到想要的資料,需要再次查詢資料庫或者執行其它的操作。原因可能是由於快取中根本不存在,或者快取已經過期。 通常來講,快取的命中率越高則表示使用快取的收益越高,應用的效能越好(響應時間越短、吞吐量越高),抗併發的能力越強。 由此可見,在高併發的網際網路系統中,快取的命中率是至關重要的指標。二、如何監控快取的命中率
在memcached中,執行state命令可以檢視memcached服務的狀態資訊,其中cmd_get表示總的get次數,get_hits表示get的總命中次數,命中率 = get_hits/cmd_get。 當然,我們也可以通過一些開源的第三方工具對整個memcached叢集進行監控,顯示會更直觀。比較典型的包括:zabbix、MemAdmin等。 如圖:MemAdmin對memcached服務的命中率情況的監控統計三、影響快取命中率的幾個因素
1、業務場景和業務需求 快取適合“讀多寫少”的業務場景,反之,使用快取的意義其實並不大,命中率會很低。 業務需求決定了對時效性的要求,直接影響到快取的過期時間和更新策略。時效性要求越低,就越適合快取。在相同key和相同請求數的情況下,快取時間越長,命中率會越高。 網際網路應用的大多數業務場景下都是很適合使用快取的。 2、快取的設計(粒度和策略) 通常情況下,快取的粒度越小,命中率會越高。舉個實際的例子說明: 當快取單個物件的時候(例如:單個使用者資訊),只有當該物件對應的資料發生變化時,我們才需要更新快取或者讓移除快取。而當快取一個集合的時候(例如:所有使用者資料),其中任何一個物件對應的資料發生變化時,都需要更新或移除快取。 還有另一種情況,假設其他地方也需要獲取該物件對應的資料時(比如其他地方也需要獲取單個使用者資訊),如果快取的是單個物件,則可以直接命中快取,反之,則無法直接命中。這樣更加靈活,快取命中率會更高。 此外,快取的更新/過期策略也直接影響到快取的命中率。當資料發生變化時,直接更新快取的值會比移除快取(或者讓快取過期)的命中率更高,當然,系統複雜度也會更高。 3、快取容量和基礎設施 快取的容量有限,則容易引起快取失效和被淘汰(目前多數的快取框架或中介軟體都採用了LRU演演算法)。同時,快取的技術選型也是至關重要的,比如採用應用內建的本地快取就比較容易出現單機瓶頸,而採用分散式快取則畢竟容易擴充套件。所以需要做好系統容量規劃,並考慮是否可擴充套件。此外,不同的快取框架或中介軟體,其效率和穩定性也是存在差異的。 4、其他因素 當快取節點發生故障時,需要避免快取失效並最大程度降低影響,這種特殊情況也是架構師需要考慮的。業內比較典型的做法就是通過一致性Hash演演算法,或者通過節點冗餘的方式。 有些朋友可能會有這樣的理解誤區:既然業務需求對資料時效性要求很高,而快取時間又會影響到快取命中率,那麼系統就別使用快取了。其實這忽略了一個重要因素--併發。通常來講,在相同快取時間和key的情況下,併發越高,快取的收益會越高,即便快取時間很短。四、提高快取命中率的方法
五、最後
歡迎大家一起交流,喜歡文章記得點個贊喲,感謝支援!