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