CDN缓存替代算法
CDN緩存工作過程如下:用戶發(fā)出一個(gè)請求,如果請求被命中,緩存將對用戶的請求進(jìn)行響應(yīng),返回其請求的數(shù)據(jù);如果未被命中,緩存向上拉取用戶需要的數(shù)據(jù),并對其存儲(chǔ)的數(shù)據(jù)進(jìn)行替換。
緩存算法的意義在于,根據(jù)用戶的請求習(xí)慣,對于緩存種的數(shù)據(jù)進(jìn)行更新,使得用戶據(jù)請求的命中率提高,縮短整體響應(yīng)用戶請求延時(shí),同時(shí)提高高峰時(shí)間網(wǎng)絡(luò)所能承受的訪問容量。
現(xiàn)有的緩存替代算法主要思路有下面幾種:
1、基于訪問頻率,通過某段時(shí)間內(nèi)對資源被訪問的次數(shù)進(jìn)行統(tǒng)計(jì),以此判斷該資源接下來是否被訪問,典型算法:LFU、2Q、LIRS
2、基于訪問時(shí)間,通過i記錄資源訪問的時(shí)間,以時(shí)間做判斷,典型算法:LRU
3、訪問時(shí)間與訪問頻率相結(jié)合,典型算法:LRFU、FBR
CDN緩存算法具體有五種典型算法:
1、“最近最少使用”緩存算法
2、“最少頻率使用”緩存算法
3、“基于分?jǐn)?shù)因子”緩存算法
4、“塊等級”緩存算法
Least Recently Used算法
緩存將保留最近一段時(shí)間內(nèi)經(jīng)常使用的數(shù)據(jù),而淘汰最近未被經(jīng)常使用的數(shù)據(jù)。
基于事實(shí):最近一段時(shí)間內(nèi)經(jīng)常被訪問的數(shù)據(jù)在未來一段時(shí)間內(nèi)也會(huì)被訪問
簡單版本的實(shí)現(xiàn)可以參考https://leetcode-cn.com/problems/lru-cache/
缺點(diǎn):最近被訪問的內(nèi)容不一定是最熱門的,這將導(dǎo)致一些冷門內(nèi)容留在緩存種,影響用戶訪問內(nèi)容和服務(wù)響應(yīng)用戶的效率。
另外可以看看mysql里面對于lru的改進(jìn):MySQL——Innodb改進(jìn)LRU算法
Least Frequency Used算法
該算法按照內(nèi)容的訪問頻率對內(nèi)容進(jìn)行排序。
緩存一般被分為兩部分:固定緩存(AC,Actual Cache)和隱藏緩(SC,Shadow Cache)
固定緩存是更新不頻繁,資源變動(dòng)較少的那部分緩存
隱藏緩存是更新頻繁,資源變動(dòng)較大的那部分緩存
當(dāng)用戶發(fā)出訪問請求時(shí),未命中的內(nèi)容將先被存儲(chǔ)到SC種。在一定時(shí)間間隔T內(nèi),緩存中會(huì)維持一個(gè)頻率列表,記錄每個(gè)內(nèi)容被訪問的次數(shù)。T時(shí)間過去之后,{AC,SC}種被請求次數(shù)最多的內(nèi)容將會(huì)被更新到AC中,在下一輪T之內(nèi),AC中內(nèi)容不會(huì)被替換掉。
基于事實(shí):內(nèi)容被訪問的頻率能夠反映內(nèi)容的熱門程度。AC和SC的增加使得最少頻率的準(zhǔn)確率得到提高
缺點(diǎn):計(jì)算頻率的時(shí)間段T的大小不好控制,AC和SC的容量不好控制,替換時(shí)間設(shè)定不好控制
簡單版本的實(shí)現(xiàn)可以參考:
https://leetcode-cn.com/problems/lfu-cache/solution/lfuhuan-cun-by-leetcode-solution/
代碼如下:
Scoring based Caching算法
1、定義:對每一個(gè)視頻(Vi),都維護(hù)一個(gè)分?jǐn)?shù)(Si)。每個(gè)視頻i在被放入緩存時(shí),都會(huì)得到一個(gè)初始化分?jǐn)?shù)Si = B。
每一次視頻i被請求,該視頻都會(huì)得到一個(gè)新的分?jǐn)?shù),而其余視頻分?jǐn)?shù)也會(huì)相應(yīng)調(diào)整:Si = Si + A,其余視頻Sk = Sk - 1(k != i)
2、替換規(guī)則:在維護(hù)一個(gè)分?jǐn)?shù)上,有兩種替換策略:
- 區(qū)間分?jǐn)?shù)法:定義一個(gè)有效分?jǐn)?shù)區(qū)間【M,N】。若某個(gè)視頻的分?jǐn)?shù)在這個(gè)區(qū)間內(nèi),且不再緩存中,則把這個(gè)視頻放入緩存。如果某個(gè)在緩存中的視頻的分?jǐn)?shù)不在這個(gè)區(qū)間內(nèi),則在緩存中刪除該視頻
- 最優(yōu)分?jǐn)?shù)法:根據(jù)一個(gè)節(jié)點(diǎn)的最大存儲(chǔ)能力,如能存L個(gè)視頻,選擇最優(yōu)分?jǐn)?shù)的內(nèi)容進(jìn)行緩存。每次有一部視頻的分?jǐn)?shù)有改變,則進(jìn)行排序,凡分?jǐn)?shù)不在前L的視頻從緩存中刪除,凡分?jǐn)?shù)在前L的視頻加入緩存中
3、請求處理:對于每個(gè)CDN視頻的請求,會(huì)出現(xiàn)以下三種處理事件
- 1、請求的視頻已在緩存中,請求命中。此時(shí)只需要對視頻的分?jǐn)?shù)做出調(diào)整,不需要在緩存中刪除內(nèi)容,也不需要向上級節(jié)點(diǎn)請求內(nèi)容。CDN內(nèi)部沒有流量消耗
- 2、請求的視頻不在緩存中而算法要求節(jié)點(diǎn)緩存該視頻。節(jié)點(diǎn)向上級節(jié)點(diǎn)賦值被請求的視頻,然后在復(fù)制之后向用戶發(fā)送被請求的視頻,將視頻加入緩存,調(diào)整分?jǐn)?shù)。此時(shí)CDN內(nèi)部有流量消耗,邊緣節(jié)點(diǎn)向中心節(jié)點(diǎn)復(fù)制了視頻內(nèi)容
- 3、請求的視頻不在緩存中而算法不要求節(jié)點(diǎn)緩存該視頻,調(diào)整分?jǐn)?shù),不需要從中心點(diǎn)復(fù)制內(nèi)容,請求被轉(zhuǎn)發(fā)到中心節(jié)點(diǎn)。CDN內(nèi)部沒有流量消耗
4、其他
1、一般來說,節(jié)點(diǎn)應(yīng)該維護(hù)每一部視頻的分?jǐn)?shù),但實(shí)際上分?jǐn)?shù)過低的視頻,一般不維護(hù)分?jǐn)?shù),而是從關(guān)注列表中移除
2、Shadow Cache。每個(gè)節(jié)點(diǎn)存儲(chǔ)能力被分為兩個(gè)部分。較大的部分用來存儲(chǔ)內(nèi)容,較小的部分用來存儲(chǔ)視頻列表、分?jǐn)?shù)等與管理有關(guān)的內(nèi)容。兩個(gè)存儲(chǔ)空間嚴(yán)格分開。宏觀上看,節(jié)點(diǎn)有部分存儲(chǔ)能看不可見,稱為Shadow Cache
最后,基于分?jǐn)?shù)因子的緩存算法不是一個(gè)獨(dú)立的算法,而是其他算法的基礎(chǔ)或者框架。例如LRU和LFU可以看作對于分?jǐn)?shù)不同定義的最優(yōu)分?jǐn)?shù)法的分?jǐn)?shù)因子緩存。
Chunk-level Caching算法
1、定義:基于塊等級的緩存算法, 時(shí)在分?jǐn)?shù)因子緩存算法基礎(chǔ)上,把每個(gè)視頻分成大小相同、內(nèi)容連續(xù)的k塊分別存儲(chǔ),然后每個(gè)視頻塊的分?jǐn)?shù)Sk繼承原視頻的分?jǐn)?shù)Si。定義第i個(gè)視頻的第k塊視頻的分?jǐn)?shù)為Si,k
2、計(jì)分策略:
每部視頻被訪問,則對視頻i內(nèi)的所有塊都進(jìn)行+1:Si,k = Si,k +1
若第k塊被完整觀看,則Si,k = Si,k + 1
若停止觀看(退出、快進(jìn)、快退),則說明用戶對該塊不感興趣,則Si,k = Si,k - 1;
3、請求處理
大部分時(shí)候,塊等級的緩存算法,與基于分?jǐn)?shù)因子的緩存算法十分相像,即上面SC出現(xiàn)的3種請求處理的情況都會(huì)出現(xiàn)。不同之處在于之前是比較Si來進(jìn)行取舍,現(xiàn)在是比較Si,k。
4、其他
基于塊等級的緩存算法,主要用于單個(gè)內(nèi)容較大的內(nèi)容分發(fā)網(wǎng)絡(luò),如視頻分發(fā)網(wǎng)絡(luò)。它考慮了以下一個(gè)事實(shí),即人們可能對視頻的某一段感興趣,把整個(gè)視頻存儲(chǔ)下來會(huì)產(chǎn)生浪費(fèi);或者人們只瀏覽了視頻的開頭,就會(huì)選擇看或者不看。因此,在計(jì)分規(guī)則中,充分考慮了這些事實(shí)。
① 一個(gè)用戶請求了某個(gè)視頻,則可能對這個(gè)視頻的其他部分都感興趣,因此計(jì)分策略1體現(xiàn)了這個(gè)需求。
② 一個(gè)用戶看完了某一塊,則可能不會(huì)再回去看了,因此計(jì)分策略2體現(xiàn)了這個(gè)需求。
③ 一個(gè)用戶停止觀看某段視頻,則可能不會(huì)再看這段視頻之后的其他視頻塊,因此計(jì)分策略3體現(xiàn)了這個(gè)需求。
總結(jié)
- 上一篇: 颐和园退票什么时候能退款
- 下一篇: 缓存一致性解决方法