1緩存相關
1.1緩存穿透
問題:查詢的key再redis中不存在,對應的id在數據庫也不存在。此時被非法用戶進行攻擊,大量的請求會去數據庫(DB)造成宕機,從而影響整個系統。這種現象稱之爲 緩存穿透;
解決方法:緩存redis把空的數據也緩存到redis中,比如空字符串,空對象等;
1.2緩存雪崩
在高併發下,大量緩存key在同一時間失效,大量請求直接落在數據庫上,導致數據庫宕機。
緩存雪崩一般只能緩解,不能杜絕;
解決方式:緩存永不過期、過期時間錯開(避免大量緩存同一時間過期)、多緩存結合(redis、Memcache)【先請求redis,沒有就去Memcache】、採購第三方redis(比如阿里雲)
2 分佈式架構
- 什麼是分佈式架構:
- 不同的業務(功能模塊)分散部署在不同的服務器
- 每個子系統負責一- 個或者多個不同的業務模塊
- 服務之間可以相互交互與通信
- 分佈式系統設計對用戶透明
- 可以發展爲集羣分佈式系統架構
- 舉例單體架構和分佈式架構
- 分佈式架構優點:
- 業務解耦
- 系統模塊化,可重用化
- 提升系統併發量
- 優化運維部署效率
- 分佈式架構缺點:
- 架構複雜
- 部署多個子系統複雜
- 系統之間通信耗時
- 新人融入團隊緩慢.
- 調試複雜.
- 分佈式架構設計原則
- 異步解耦
- 冪等- -致性
- 拆分原則(功能、業務拆分)
- 融合分佈式中間件
- 容錯高可用
3Nosql
3.1什麼是NoSql
- 存值方式: key-value
- Not Only Sql
- 傳統項目使用純數據庫
- 爲互聯網和大數據而生
- 水平(橫向)擴展方便高效
- 高性能讀取
- 高可用
- 存數據,做緩存
3.2Nosql常見分類
- 鍵值對數據庫:Redis. Memcache
- 列存儲數據庫:Hbase. Cassandra
- 文檔型數據庫:MongoDB. CouchDB
- 圖形數據庫:Neo4J、FlockDB
4分佈式緩存
4.1什麼是分佈式緩存
- 提升讀取速度性能
- 分佈式計算領域
- 爲數據庫降低查詢壓力
4.2什麼是reids
- NoSql
- 分佈式緩存中間件
- key-value存儲
- 提供海量數據存儲訪問
- 數據存儲在內存裏,讀取更快
- 非關係型、分佈式、開源、水平擴展
5分佈式緩存方案對比
5.1Ehcache(適合單應用)
- 優點:
- 基於java開發
- 基於JVM緩存
- 簡單、輕巧、方便
- 缺點:
- 集羣不支持
- 分佈式不支持
5.2Memcache
- 優點:
- 簡單的key-value存儲
- 內存使用率比較高
- 多核處理,多線程.
- 缺點:
- 無法容災(重啓後之前數據無法恢復)
- 無法持久化
5.3Redis
- 優點:
- 豐富的數據結構
- 持久化.
- 主從同步、故障轉移
- 內存數據庫
- 缺點:
- 單線程
- 單核