1.緩存雪崩和緩存穿透問題java
1.1緩存雪崩redis
簡介:緩存同一時間大面積的失效,因此,後面的請求都會落到數據庫上,形成數據庫短期內承受大量請求而崩掉。數據庫
解決辦法:緩存
使用純java的ehcache做爲本地緩存
Reids 做爲遠程分佈式緩存
解決redis緩存壓力過大,提升緩存速度,以及緩存性能。服務器
redis和Ehcache緩存的區別
若是是單個應用或者對緩存訪問要求很高的應用,用ehcache。
若是是大型系統,存在緩存共享、分佈式部署、緩存內容很大的,建議用redis。框架
實際工做中使用Ehcache
咱們在項目中使用集中式緩存(Redis或者式Memcached等),一般都是檢查緩存中是否存在
指望值的數據,若是存在直接返回,若是不存在就查詢數據庫而後在將數據庫緩存,這個時候若是緩存系統由於某些緣由宕機,形成服務沒法訪問,那麼大的量請求直接穿透到數據庫,最數據庫壓力很是大。分佈式
這時候咱們讓ehcache做爲二級緩存,當redis服務器宕機後,能夠查詢ehcache緩存。
這樣可以有效的扛住服務器請求壓力。
所以, 通常 Redis做爲一級緩存, ehcache做爲二級緩存。ide
簡介:在分佈式系統中,單個應用一般會有多個不一樣類型的外部依賴服務,內部一般依賴於各類RPC服務,外部則依賴於各類HTTP服務。這些依賴服務不可避免的會出現調用失敗,好比超時、異常等狀況,如何在外部依賴出問題的狀況,仍然保證自身應用的穩定。Hystrix的目標就是可以在1個或多個依賴出現問題時,系統依然能夠穩定的運行,其手段包括隔離、限流和降級等。性能
經過線程池+隊列的方式,經過信號量的方式。好比商品評論比較慢,最大能同時處理10個線程,隊列待處理5個,那麼若是同時20個線程到達的話,其中就有5個線程被限流了,其中10個先被執行,另外5個在隊列中spa
當依賴的服務有大量超時時,在讓新的請求去訪問根本沒有意義,只會無畏的消耗現有資源,好比咱們設置了超時時間爲1s,若是短期內有大量請求在1s內都得不到響應,就意味着這個服務出現了異常,此時就沒有必要再讓其餘的請求去訪問這個服務了,這個時候就應該使用熔斷器避免資源浪費
所謂降級,就是當某個服務熔斷以後,服務將再也不被調用,此時客戶端能夠本身準備一個本地的fallback(回退)回調,返回一個缺省值。 例如:(備用接口/緩存/mock數據),這樣作,雖然服務水平降低,但好歹可用,比直接掛掉要強,固然這也要看適合的業務場景
1.2緩存穿透