1. 什麼是分布式緩存 ?
傳統意義上的緩存是儲存在應用本身的(JVM),隻有應用本身可以對緩存進行讀寫。在分布式系統中,将緩存抽取出來做成了緩存中間件(資料庫),分布式應用都可以對分布式緩存進行讀寫操作。并且分布式緩存具有高性能和高吞吐量的特性。
2. 為什麼使用分布式緩存 ?
分布式緩存主要作用:
- 高性能(提高系統性能);
- 高并發(提高系統并發);
- 減輕關系型資料庫壓力
2.1 高性能和高并發
随着系統的複雜性和使用者量的增加,并發越來越大,我們會發現系統變得越來越慢。因為關系型資料庫的 QPS 和 TPS 是有限的,例如 MySQL 資料庫,當 QPS 到達 3000 左右的時候(根據實際配置),MySQL 基本上就達到了瓶頸,資料處理就會急劇下降。處理幾條查詢 SQL 可能會消耗 1 秒左右的時間。
系統性能達到瓶頸後,我們需要性能更高的元件來減輕關系型資料庫的壓力并提高系統的性能,這個時候分布式緩存就登上了曆史的舞台。緩存中的資料以 key-value 的方式存儲資料,通過 key 查詢 value 耗時大概在 3ms 左右,相比關系型資料 1秒的查詢時間,性能提升 300 多倍這就提高了系統的性能。
系統并發達到瓶頸後,我們需要提高并發更高的元件來減輕關系型資料庫的壓力并提高系統并發性能,這個時候分布式緩存就登上了曆史的舞台,例如 Redis QPS 基本穩定在 30000。相比關系型資料有 10 倍左右的提升。
我們可以把關系型資料庫的資料查詢出來存放到分布式緩存中,以提高系統的性能和并發性。當然分布式緩存還有許多其它用途:緩存、排行榜、計數器、分布式會話、分布式鎖、涉及網絡(點贊、關注、好友)、最新清單、消息系統、即時通訊 等。
3. 分布式緩存引入的優缺點
3.1 優點
分布式緩存可以提高系統的性能、提高系統并發、減輕關系型資料庫的壓力。
3.2 缺點
- 提高系統的複雜度
- 緩存系統與關系型資料庫雙寫下資料不一緻的問題
- 緩存雪崩
- 緩存擊穿
- 緩存穿透
- 緩存并發競争
- 運維成本增加
4. 參考文獻
MySQL 5.7測試結果 (aliyun.com)
雲資料庫 MySQL 性能白皮書 - 白皮書 - 文檔中心 - 騰訊雲 (tencent.com)
獨享型測試資料_雲資料庫 RDS_性能白皮書_MySQL_MySQL 5.7測試資料_華為雲 (huaweicloud.com)
On Redis, Memcached, Speed, Benchmarks and The Toilet (antirez.com)
測試結果 (aliyun.com)