微服務(wù)實踐01--微服務(wù)管理11--緩存02--分級緩存設(shè)計

微服務(wù)實踐目錄,可以參見連接芦缰。

緩存系列包括:
1.微服務(wù)管理-11.緩存概述
1.微服務(wù)管理-11.緩存-0.技術(shù)
1.微服務(wù)管理-11.緩存-1.多級緩存設(shè)計
1.微服務(wù)管理-11.緩存-2.典型緩存架構(gòu)設(shè)計
1.微服務(wù)管理-11.緩存-3.實踐
1.微服務(wù)管理-11.緩存-4.總結(jié)

背景

通過前面的文章說明了緩存的基本內(nèi)容,但對于緩存來說可以在網(wǎng)絡(luò)服務(wù)中的分層架構(gòu)中的任意一點(diǎn)都存在枫慷。從網(wǎng)絡(luò)服務(wù)分層架構(gòu)的最前端瀏覽器到最后端數(shù)據(jù)庫都使用了緩存技術(shù)让蕾。簡單的看在網(wǎng)絡(luò)服務(wù)中的每一層中都有緩存浪规,那就是多級緩存。

像CPU的Cache系統(tǒng)的緩存層級的劃分是因為CPU在做著幾方面的權(quán)衡:速度探孝、容量笋婿、晶體管體積、發(fā)熱量等顿颅。L1為了更快的訪問萌抵,用了更多/更大/更復(fù)雜的晶體管。而L2為了更大容量元镀,選擇了更小/更簡單的晶體管來實現(xiàn)绍填。而在互聯(lián)網(wǎng)系統(tǒng)中應(yīng)該考慮哪些權(quán)衡點(diǎn)來設(shè)計不同級別的緩存就成了問題。

cpu存儲特性

分級原因

經(jīng)典和通用型的互聯(lián)網(wǎng)系統(tǒng)就是一個分層系統(tǒng)栖疑,按照互聯(lián)網(wǎng)系統(tǒng)的分層概念在每一層上都有不同的緩存技術(shù)與處理方式讨永。互聯(lián)網(wǎng)分層緩存技術(shù)可以參見:一篇文章讓你明白你多級緩存的分層架構(gòu)遇革。我們這里不討論分層架構(gòu)中每層中緩存技術(shù)卿闹,這里討論從服務(wù)(業(yè)務(wù))接收到用戶請求后到服務(wù)(業(yè)務(wù))端作出響應(yīng)的這部分的緩存分級。

  • 分級場景

那么在互聯(lián)網(wǎng)系統(tǒng)中為什么做緩存分級萝快?答案就是解決“緩存雪崩”問題锻霎。緩存雪崩就是指緩存由于某些原因(混存宕機(jī)、大面積數(shù)據(jù)過期)揪漩,導(dǎo)致大量請求到達(dá)后端數(shù)據(jù)庫旋恼。進(jìn)一步促成數(shù)據(jù)庫崩潰,整個系統(tǒng)崩潰奄容,發(fā)生災(zāi)難冰更。

通過多級緩存解決緩存雪崩的問題。一方面可以提高緩存的穩(wěn)定性昂勒,另一方面可以將分級緩存看作有一個更大的緩存蜀细。這個緩存池內(nèi)緩存著所有的數(shù)據(jù),只要通過緩存擊穿的各種機(jī)制將數(shù)據(jù)一級一級的提調(diào)到最高級緩存中以達(dá)到像CPU分級緩存一樣的要求戈盈。

除了緩存雪崩這個場景外奠衔,還有用戶分群,地域分群等業(yè)務(wù)數(shù)據(jù)緩存可能會用到緩存分級的方式處理塘娶。

  • 與分布式緩存不同

分布式緩存是將緩存鏡像同步到其他的緩存服務(wù)上归斤。而緩存分級是將緩存劃分為不同的層次,每一層存儲的都是下層數(shù)據(jù)的子集血柳。一個是鏡像一個是子集官册,以這樣的方式實現(xiàn)緩存在不同場景下不同的解決方案生兆。

關(guān)注點(diǎn)

緩存分級主要解決緩存雪崩的問題难捌。那么在解決這個問題的過程中就需要對分級緩存的需要設(shè)計的點(diǎn)或著需要重點(diǎn)關(guān)注的點(diǎn)進(jìn)行梳理膝宁,并根據(jù)這些點(diǎn)進(jìn)行有針對行的設(shè)計工作。

  • 同構(gòu)或者異構(gòu)
    在《1.微服務(wù)管理-11.緩存概述》已經(jīng)說明緩存的數(shù)據(jù)應(yīng)該是越靠近響應(yīng)的最終結(jié)果越好根吁。這樣可以最大限度的減少因為業(yè)務(wù)代碼處理造成的延時問題员淫。每級緩存應(yīng)該保存同樣的數(shù)據(jù)還是保存不同的數(shù)據(jù)就成了問題,最靠近業(yè)務(wù)服務(wù)的緩存是不是應(yīng)該最應(yīng)該是最終結(jié)果击敌,而越靠近數(shù)據(jù)源的緩存是不是就應(yīng)該更傾向于結(jié)構(gòu)化數(shù)據(jù)介返。
同構(gòu)與異構(gòu)
  • 透明化
    緩存分層后對于研發(fā)人員來說應(yīng)該是透明的。不應(yīng)牽扯到過多的業(yè)務(wù)代碼沃斤。使業(yè)務(wù)代碼和緩存代碼耦合的分層緩存圣蝎。

  • 自動化
    各級緩存間的數(shù)據(jù)的同步應(yīng)該最好能夠自動化『馄浚可以從緩存更新的方式中直接獲取緩存映射邏輯徘公,并根據(jù)邏輯自行更新與失效緩存。緩存擊穿后更新緩存需要有自動化方法哮针。

業(yè)界方案

從業(yè)務(wù)分級緩存設(shè)計到的技術(shù)方面來看关面,分級緩存可以在客戶端分級緩存和服務(wù)端分級緩存兩種方式。下面分別說明這兩種方式的內(nèi)容:

  • 客戶端分級緩存(Java)

    • Ehcache
      Ehcache就是Hibernate緩存機(jī)制的緩存實現(xiàn)十厢。而Hibernate本身就帶有一級緩存等太、二級緩存功能。

    • J2Cache
      J2Cache是一個Java的二級緩存框架蛮放。第一級緩存使用內(nèi)存(同時支持 Ehcache 2.x缩抡、Ehcache 3.x 和 Caffeine),第二級緩存使用 Redis(推薦)/Memcached 包颁。 由于大量的緩存讀取會導(dǎo)致 L2 的網(wǎng)絡(luò)成為整個系統(tǒng)的瓶頸缝其,因此 L1 的目標(biāo)是降低對 L2 的讀取次數(shù)。 該緩存框架主要用于集群環(huán)境中徘六。單機(jī)也可使用内边,用于避免應(yīng)用重啟導(dǎo)致的緩存冷啟動后對后端業(yè)務(wù)的沖擊。

    • layering-cache
      layering-cache是一個支持分布式環(huán)境的多級緩存框架待锈,使用方式和spring-cache類似漠其,主要目的是在使用注解的時候支持配置過期時間。layering-cache其實是一個兩級緩存竿音,一級緩存使用Caffeine作為本地緩存和屎,二級緩存使用redis作為集中式緩存。并且基于redis的Pub/Sub做緩存的刪除春瞬,所以它是一個適用于分布式環(huán)境下的一個緩存系統(tǒng)柴信。

  • 服務(wù)端分級緩存

    Redis ReplicationCodis宽气,Twemproxy都是服務(wù)端分布式緩存技術(shù)随常,但通過調(diào)查發(fā)現(xiàn)所有的服務(wù)器緩存技術(shù)都不支持服務(wù)端分級緩存的潜沦。本想借助于Redis的Replication自行實現(xiàn)Redis的多級緩存支持,但是調(diào)查發(fā)現(xiàn)Redis的Miss事件是沒有對外公布的绪氛,無法使用Lua唆鸡,watch進(jìn)行Miss事件獲取。所以枣察,不能通過Miss事件進(jìn)行下一集緩存查詢争占。

設(shè)計

根據(jù)業(yè)界對于緩存的解決方案來說,對于服務(wù)端的緩存分級來說場景不多序目。故這里就不進(jìn)行服務(wù)端緩存分級的考量臂痕。在這樣的前提下對緩存進(jìn)行分級。像CPU的緩存的方式一樣猿涨,作者將緩存距離業(yè)務(wù)服務(wù)的遠(yuǎn)近對緩存服務(wù)進(jìn)行分級刻蟹。并說明這些分級下一般的實現(xiàn)技術(shù)。第一級緩存是服務(wù)的本地緩存嘿辟,第二季緩存是服務(wù)外緩存服務(wù)器協(xié)助緩存舆瘪。

第一級緩存應(yīng)該存儲數(shù)據(jù)量不是很大,數(shù)據(jù)更新頻率較低的數(shù)據(jù)红伦。一般情況下使用本地緩存作為第一級緩存英古。使用本地緩存的與微服務(wù)設(shè)計原則中的無狀態(tài)服務(wù)有相互沖突。這種沖突在分級緩存的實現(xiàn)中必須解決昙读,解決這個問題需要定義更好的緩存過期和緩存更新策略來解決召调。并分布式服務(wù)中每個服務(wù)都有多個實例,實例之間的緩存數(shù)據(jù)也需要進(jìn)行同步保證數(shù)據(jù)的一致性蛮浑。

第二級緩存使用緩存服務(wù)的方式實現(xiàn)就會增加緩存獲取與操作過程中的進(jìn)程間通信時間唠叛,所以緩存與最好處于同一個網(wǎng)絡(luò)中,以減少網(wǎng)絡(luò)通信的消耗沮稚。

緩存分級

回顧上面所說到的緩存分級注意事項:同構(gòu)或者異構(gòu)艺沼、透明化、自動化蕴掏,通過對Ehcache可以解決上述說有的注意點(diǎn)障般。不過所有的跟緩存相關(guān)的代碼都需要自行實現(xiàn),實現(xiàn)過程中操作異構(gòu)問題盛杰、解決緩存代碼與業(yè)務(wù)代碼隔離問題挽荡、解決自動化更新問題。

總結(jié)

分級緩存在一定等讀上解決系統(tǒng)可靠性即供,可用性問題定拟。并在此基礎(chǔ)上可以解決在地域IDC中對于地域用戶的數(shù)據(jù)的緩存與處理概念。以地域性劃分IDC以使用戶可以得到就近服務(wù)逗嫡,就近處理用戶的請求青自。分級緩存可以應(yīng)用解決技術(shù)問題也可以解決業(yè)務(wù)數(shù)據(jù)問題株依,可以在適用的場景中適用

參考

多級緩存——原理
多級緩存設(shè)計詳解 | 給數(shù)據(jù)庫減負(fù),刻不容緩性穿!
有贊透明多級緩存解決方案(TMC)
千萬級并發(fā)!如何設(shè)計一個多級緩存系統(tǒng)雷滚?
你所不知道的堆外緩存
一篇文章讓你明白你多級緩存的分層架構(gòu)

Cache為什么有那么多級需曾?為什么一級比一級大?是不是Cache越大越好祈远?

深入理解Redis Master-Slaver/Sentinel/Cluster原理
深入剖析Redis系列(三) - Redis集群模式搭建與原理詳解
復(fù)制(Replication)
如何基于 Redis Replication 設(shè)計并實現(xiàn) Redis-replicator呆万?
Redis集群實現(xiàn)原理探討
集群教程

如何優(yōu)雅的設(shè)計和使用緩存?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末车份,一起剝皮案震驚了整個濱河市谋减,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扫沼,老刑警劉巖出爹,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缎除,居然都是意外死亡严就,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門器罐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梢为,“玉大人,你說我怎么就攤上這事轰坊≈” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵肴沫,是天一觀的道長粟害。 經(jīng)常有香客問我,道長颤芬,這世上最難降的妖魔是什么我磁? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮驻襟,結(jié)果婚禮上夺艰,老公的妹妹穿的比我還像新娘。我一直安慰自己沉衣,他們只是感情好郁副,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著豌习,像睡著了一般存谎。 火紅的嫁衣襯著肌膚如雪拔疚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天既荚,我揣著相機(jī)與錄音稚失,去河邊找鬼。 笑死恰聘,一個胖子當(dāng)著我的面吹牛句各,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晴叨,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凿宾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了兼蕊?” 一聲冷哼從身側(cè)響起初厚,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎孙技,沒想到半個月后产禾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牵啦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年下愈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕾久。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡势似,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出僧著,到底是詐尸還是另有隱情履因,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布盹愚,位于F島的核電站栅迄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏皆怕。R本人自食惡果不足惜毅舆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愈腾。 院中可真熱鬧憋活,春花似錦、人聲如沸虱黄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辜梳,卻和暖如春粱甫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背作瞄。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工茶宵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宗挥。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓乌庶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親属韧。 傳聞我的和親對象是個殘疾皇子安拟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容