摘要:微服務(wù)化之緩存設(shè)計(jì)一為什么需要緩存緩存作為微服務(wù)化設(shè)計(jì)的一把利劍,解決了高并發(fā)大數(shù)據(jù)場(chǎng)景下的數(shù)據(jù)預(yù)讀能力,大大提高了服務(wù)的性能。緩存過期策略有三種定時(shí)過期定時(shí)同步刷新定時(shí)異步刷新。因此選擇遠(yuǎn)程緩存。
微服務(wù)化之緩存設(shè)計(jì) 一、為什么需要緩存
緩存作為微服務(wù)化設(shè)計(jì)的一把利劍,解決了高并發(fā)、大數(shù)據(jù)場(chǎng)景下的數(shù)據(jù)預(yù)讀能力,大大提高了服務(wù)的性能??梢哉f緩存無處不在,但是真正使用好緩存并不是一件容易的事情。
本人目睹過很多緩存設(shè)計(jì)欠佳的項(xiàng)目,很多都沒有考慮一致性問題,甚至有的連最基本的防止雪崩的能力都沒有。
本文就個(gè)人經(jīng)歷并結(jié)合自己的思考提煉了一些設(shè)計(jì)要點(diǎn),目的就是讓大家可以更好的使用緩存,希望大家能有所收獲。
緩存的重要性不言而喻,接下來我們需要考慮緩存的技術(shù)選型。是選擇本地緩存,還是考慮遠(yuǎn)程緩存?如果使用遠(yuǎn)程緩存,是選擇Memcache還是Redis?本節(jié)主要解答這些疑問。
1、本地緩存
本地緩存的好處:1)成本低,包括硬件成本和維護(hù)成本;2)速度更快,相對(duì)遠(yuǎn)程緩存少了一次網(wǎng)絡(luò)交互
本地緩存的弊端:1)一致性很難保證;2)多次預(yù)熱,對(duì)底層存儲(chǔ)有一定壓力(可以忽略,但是也作為一個(gè)分析項(xiàng))
通過上述對(duì)比分析,當(dāng)業(yè)務(wù)場(chǎng)景對(duì)一致性要求比較低的情況下可以優(yōu)先考慮本地緩存。
2、MC or Redis ?
Redis適用場(chǎng)景:需要持久化,數(shù)據(jù)內(nèi)容比較大,需要復(fù)雜的數(shù)據(jù)結(jié)構(gòu),有高可用的需求。
MC適用場(chǎng)景:純KV,數(shù)據(jù)量和并發(fā)量非常大,使用MC更合適。
1、緩存 淘汰or更新?
數(shù)據(jù)有變更時(shí),到底是對(duì)緩存進(jìn)行淘汰還是更新操作?
總結(jié):
1)一般選擇淘汰緩存,任何場(chǎng)景都適用
2)在部分情形下,更新緩存可以提高性能(減少一次cache miss)
2、先操作 數(shù)據(jù)庫(kù)or緩存?
數(shù)據(jù)有變更時(shí),是先操作數(shù)據(jù)庫(kù)還是先操作緩存?
先操作數(shù)據(jù)庫(kù),后操作緩存:存在原子性問題
先set緩存,后操作數(shù)據(jù)庫(kù):存在原子性問題
總結(jié):先淘汰緩存,后操作數(shù)據(jù)庫(kù)
3、緩存過期策略
為什么需要為緩存設(shè)置過期時(shí)間,或者說什么場(chǎng)景下需要為緩存設(shè)置過期時(shí)間?
數(shù)據(jù)變更有兩種情況:1)可以收到數(shù)據(jù)變更的通知;2)無法感知數(shù)據(jù)變更。針對(duì)第一種情況,我們可以收到通知后,淘汰或者更新緩存。而第二種情況,就需要定時(shí)操作緩存。
緩存過期策略有三種:1)定時(shí)過期;2)定時(shí)同步刷新;3)定時(shí)異步刷新。
定時(shí)過期:會(huì)造成一次cache miss
定時(shí)同步刷新:更新緩存線程被阻塞,其他線程返回舊的緩存值。
定時(shí)異步刷新:緩存值異步更新,所有請(qǐng)求線程返回舊的緩存值。
從左到右,一致性降低,性能提高。
4、主從數(shù)據(jù)不一致優(yōu)化
為提高數(shù)據(jù)庫(kù)的讀性能,我們?cè)诤芏鄨?chǎng)景下都采用了讀寫分離。由于主從同步需要時(shí)間,所以在同步時(shí)間差內(nèi)如果有讀請(qǐng)求,會(huì)導(dǎo)致不一致的情況。如果引入緩存,不一致的時(shí)間會(huì)更長(zhǎng)。
有兩個(gè)優(yōu)化方向:
1) 從庫(kù)同步完立即淘汰緩存,減小不一致的時(shí)間;
2) 從庫(kù)同步完成前,讀請(qǐng)求訪問主庫(kù)。
當(dāng)然,該節(jié)主要是討論如何解決同步導(dǎo)致的不一致問題。如果使用場(chǎng)景對(duì)一致性要求不高的話,完全可以忽略,或者不做讀寫分離。
案例一:緩存第三方公司的天氣數(shù)據(jù),供公司內(nèi)部各個(gè)業(yè)務(wù)線使用。
1)由于第三方公司的數(shù)據(jù)是要付費(fèi)的,所以在滿足需要的情況下,盡可能的減少調(diào)用次數(shù)。因此選擇遠(yuǎn)程緩存。
2)天氣數(shù)據(jù)結(jié)構(gòu)非常簡(jiǎn)單,最普通的k-v存儲(chǔ),MC完全滿足需要。
3)由于天氣數(shù)據(jù)來源于第三方,數(shù)據(jù)變更無法感知,所以采用緩存過期策略。
4)對(duì)一致性要求不高,因此采用性能最好的定時(shí)異步更新策略。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/62034.html
摘要:微服務(wù)化之緩存設(shè)計(jì)一為什么需要緩存緩存作為微服務(wù)化設(shè)計(jì)的一把利劍,解決了高并發(fā)大數(shù)據(jù)場(chǎng)景下的數(shù)據(jù)預(yù)讀能力,大大提高了服務(wù)的性能。緩存過期策略有三種定時(shí)過期定時(shí)同步刷新定時(shí)異步刷新。因此選擇遠(yuǎn)程緩存。 微服務(wù)化之緩存設(shè)計(jì) 一、為什么需要緩存 緩存作為微服務(wù)化設(shè)計(jì)的一把利劍,解決了高并發(fā)、大數(shù)據(jù)場(chǎng)景下的數(shù)據(jù)預(yù)讀能力,大大提高了服務(wù)的性能??梢哉f緩存無處不在,但是真正使用好緩存并不是一件容易...
摘要:本文會(huì)以引出問題為主,后面有時(shí)間的話,筆者陸續(xù)會(huì)抽些重要的知識(shí)點(diǎn)進(jìn)行詳細(xì)的剖析與解答。敬請(qǐng)關(guān)注服務(wù)端思維微信公眾號(hào),獲取最新文章。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 這里,筆者結(jié)合自己過往的面試經(jīng)驗(yàn),整理了一些核心的知識(shí)清單,幫助讀者更好地回顧與復(fù)習(xí) Java 服務(wù)端核心技術(shù)。本文會(huì)以引出問題為主,后面有時(shí)間的話,筆者陸續(xù)會(huì)抽些重要的知識(shí)點(diǎn)進(jìn)...
摘要:淺談秒殺系統(tǒng)架構(gòu)設(shè)計(jì)后端掘金秒殺是電子商務(wù)網(wǎng)站常見的一種營(yíng)銷手段。這兩個(gè)項(xiàng)目白話網(wǎng)站架構(gòu)演進(jìn)后端掘金這是白話系列的文章。 淺談秒殺系統(tǒng)架構(gòu)設(shè)計(jì) - 后端 - 掘金秒殺是電子商務(wù)網(wǎng)站常見的一種營(yíng)銷手段。 不要整個(gè)系統(tǒng)宕機(jī)。 即使系統(tǒng)故障,也不要將錯(cuò)誤數(shù)據(jù)展示出來。 盡量保持公平公正。 實(shí)現(xiàn)效果 秒殺開始前,搶購(gòu)按鈕為活動(dòng)未開始。 秒殺開始時(shí),搶購(gòu)按鈕可以點(diǎn)擊下單。 秒殺結(jié)束后,按鈕按鈕變...
摘要:然而在微服務(wù)化之前,建議先進(jìn)行容器化,在容器化之前,建議先無狀態(tài)化,當(dāng)整個(gè)流程容器化了,以后的微服務(wù)拆分才會(huì)水到渠成。 此文已由作者劉超授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。 一、為什么要做無狀態(tài)化和容器化 很多應(yīng)用拆分成微服務(wù),是為了承載高并發(fā),往往一個(gè)進(jìn)程扛不住這么大的量,因而需要拆分成多組進(jìn)程,每組進(jìn)程承載特定的工作,根據(jù)并發(fā)的壓力用多個(gè)副本公共...
閱讀 1148·2021-11-24 10:27
閱讀 3422·2021-11-18 10:02
閱讀 2469·2021-11-16 11:45
閱讀 3239·2021-11-15 18:10
閱讀 923·2021-09-22 15:23
閱讀 1613·2019-08-30 15:53
閱讀 3103·2019-08-30 13:20
閱讀 1757·2019-08-30 12:53