偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

緩存,原來我們一直都用錯了!

開發(fā) 開發(fā)工具
有架構(gòu)師說“緩存是萬金油,哪里有問題,加個緩存,就能優(yōu)化”,緩存的濫用,可能會導(dǎo)致一些錯誤用法。

緩存,是互聯(lián)網(wǎng)分層架構(gòu)中,非常重要的一個部分,通常用它來降低數(shù)據(jù)庫壓力,提升系統(tǒng)整體性能,縮短訪問時間。

有架構(gòu)師說“緩存是萬金油,哪里有問題,加個緩存,就能優(yōu)化”,緩存的濫用,可能會導(dǎo)致一些錯誤用法。

四類緩存常見誤用,你中招了嗎?

[[440543]]

誤用一:把緩存作為服務(wù)與服務(wù)之間傳遞數(shù)據(jù)的媒介。

如上圖:

(1)服務(wù)1和服務(wù)2約定好key和value,通過緩存?zhèn)鬟f數(shù)據(jù);

(2)服務(wù)1將數(shù)據(jù)寫入緩存,服務(wù)2從緩存讀取數(shù)據(jù),達到兩個服務(wù)通信的目的。 

該方案存在的問題是:

(1)數(shù)據(jù)管道,數(shù)據(jù)通知場景,MQ更加適合;

(2)多個服務(wù)關(guān)聯(lián)同一個緩存實例,會導(dǎo)致服務(wù)耦合。

誤用二:使用緩存未考慮雪崩。

常規(guī)的緩存玩法,如上圖:

(1)服務(wù)先讀緩存,緩存命中則返回;

(2)緩存不命中,再讀數(shù)據(jù)庫。 

什么時候會產(chǎn)生雪崩?

如果緩存掛掉,所有的請求會壓到數(shù)據(jù)庫,如果未提前做容量預(yù)估,可能會把數(shù)據(jù)庫壓垮(在緩存恢復(fù)之前,數(shù)據(jù)庫可能一直都起不來),導(dǎo)致系統(tǒng)整體不可服務(wù)。

如何應(yīng)對潛在的雪崩?

提前做容量預(yù)估,如果緩存掛掉,數(shù)據(jù)庫仍能扛住,才能執(zhí)行上述方案。

否則,就要進一步設(shè)計,更具體的,有兩類常見方案。

方案一:高可用緩存

如上圖:使用高可用緩存集群,一個緩存實例掛掉后,能夠自動做故障轉(zhuǎn)移。

方案二:緩存水平切分

如上圖:使用緩存水平切分,一個緩存實例掛掉后,不至于所有的流量都壓到數(shù)據(jù)庫上。

誤用三:調(diào)用方緩存數(shù)據(jù)。

如上圖:

(1)服務(wù)提供方緩存,向調(diào)用方屏蔽數(shù)據(jù)獲取的復(fù)雜性(這個沒問題);

(2)服務(wù)調(diào)用方,也緩存一份數(shù)據(jù),先讀自己的緩存,再決定是否調(diào)用服務(wù)(這個有問題)。

該方案存在的問題是:

(1)調(diào)用方需要關(guān)注數(shù)據(jù)獲取的復(fù)雜性;

(2)更嚴重的,服務(wù)修改db里的數(shù)據(jù),淘汰了服務(wù)cache之后,難以通知調(diào)用方淘汰其cache里的數(shù)據(jù),從而導(dǎo)致數(shù)據(jù)不一致;

(3)有人說,服務(wù)可以通過MQ通知調(diào)用方淘汰數(shù)據(jù),額,難道下游的服務(wù)要依賴上游的調(diào)用方,分層架構(gòu)設(shè)計不是這么玩的。

誤用四:多服務(wù)共用緩存實例。

如上圖:

(1)服務(wù)A和服務(wù)B共用一個緩存實例(不是通過這個緩存實例交互數(shù)據(jù))。

該方案存在的問題是:

(1)可能導(dǎo)致key沖突,彼此沖掉對方的數(shù)據(jù);

畫外音:可能需要服務(wù)A和服務(wù)B提前約定好了key,以確保不沖突,常見的約定方式是使用namespace:key的方式來做key。

(2)不同服務(wù)對應(yīng)的數(shù)據(jù)量,吞吐量不一樣,共用一個實例容易導(dǎo)致一個服務(wù)把另一個服務(wù)的熱數(shù)據(jù)擠出去;

(3)共用一個實例,會導(dǎo)致服務(wù)之間的耦合,與微服務(wù)架構(gòu)的“數(shù)據(jù)庫,緩存私有”的設(shè)計原則是相悖的;

建議的玩法是:

如上圖:各個服務(wù)私有化自己的數(shù)據(jù)存儲,對上游屏蔽底層的復(fù)雜性。 

總結(jié)

緩存使用小技巧:

(1)服務(wù)與服務(wù)之間不要通過緩存?zhèn)鬟f數(shù)據(jù);

(2)如果緩存掛掉,可能導(dǎo)致雪崩,此時要做高可用緩存,或者水平切分;

(3)調(diào)用方不宜再單獨使用緩存存儲服務(wù)底層的數(shù)據(jù),容易出現(xiàn)數(shù)據(jù)不一致,以及反向依賴;

(4)不同服務(wù),緩存實例要做垂直拆分。

這些坑,你踩過嗎?

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文 

 

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-07-18 15:41:56

互動百科

2024-12-27 09:29:09

2014-06-25 09:31:53

Android谷歌

2024-09-09 11:11:45

2025-06-18 03:30:00

AI人工智能智能體

2020-11-05 10:54:29

網(wǎng)絡(luò)安全安博通

2024-10-14 13:20:00

2024-12-06 08:20:22

BigDecimal浮點數(shù)初始化

2024-12-02 00:00:02

Svelte 5effect?數(shù)據(jù)

2021-11-29 18:34:14

內(nèi)存異步死循環(huán)

2017-03-03 09:55:25

2023-09-13 11:19:49

2023-09-13 17:08:31

2020-06-22 13:48:08

SQL查詢SELECT

2018-03-21 18:00:15

NestJS

2022-04-26 09:53:30

WiFi網(wǎng)絡(luò)

2018-07-03 13:47:45

Facebook數(shù)據(jù)泄露網(wǎng)絡(luò)安全

2021-06-04 15:50:49

AI 數(shù)據(jù)人工智能

2014-04-30 12:18:07

軟件設(shè)計

2015-09-15 17:01:59

點贊
收藏

51CTO技術(shù)棧公眾號