如何利用緩存理論來分析網(wǎng)購物流的未來

7 評(píng)論 8981 瀏覽 34 收藏 22 分鐘

計(jì)算機(jī)技術(shù)的進(jìn)步顛覆了整個(gè)世界,而其中的很多技術(shù)不僅能解決計(jì)算機(jī)方面的問題,對(duì)很多其他方面的問題也很有啟發(fā)。今天筆者給大家介紹緩存理論,從緩存理論的角度來看待一些產(chǎn)品及生活上的問題,將會(huì)有許多有趣的結(jié)果,這就是今天的主題緩存理論+。筆者在此保證,本文沒有門檻,但需要耐心。

理論

如果這節(jié)看不太明白不用糾結(jié),結(jié)合后面的例子會(huì)容易得多。

眾所周知,內(nèi)存和硬盤是電腦的兩個(gè)重要部件,雖說兩者都是用來存儲(chǔ)數(shù)據(jù)的,特性卻大相徑庭:

  • 內(nèi)存訪問速度快,容量小,斷電后無法保存數(shù)據(jù),在計(jì)算機(jī)中充當(dāng)緩存的角色。
  • 硬盤訪問速度慢,容量大,斷電后數(shù)據(jù)不丟失,用于長(zhǎng)久地保持?jǐn)?shù)據(jù)。

CPU是個(gè)急性子,每秒幾百億次計(jì)算不在話下,自然愛和內(nèi)存打交道,不待見硬盤,不待見到什么程度呢,即使CPU要讀取硬盤里的數(shù)據(jù),也先讓硬盤把數(shù)據(jù)交給內(nèi)存,CPU再從內(nèi)存讀,緩存往往就是指這樣快卻容量小的中間存儲(chǔ)。

問題來了,內(nèi)存容量小,而計(jì)算機(jī)可能會(huì)使用的數(shù)據(jù)卻很大,導(dǎo)致內(nèi)存裝不下,只能把裝不下數(shù)據(jù)擱硬盤里,要使用硬盤中的數(shù)據(jù),得先讓內(nèi)存清出一些暫時(shí)不用的數(shù)據(jù),再從硬盤里把所需數(shù)據(jù)加載到內(nèi)存,這種倒騰的過程叫做置換Swap,而清出數(shù)據(jù)的操作稱為淘汰數(shù)據(jù)。從硬盤讀數(shù)據(jù)就耗時(shí)了,所以我們希望我們每次取數(shù)據(jù)時(shí)數(shù)據(jù)都在內(nèi)存里,減少硬盤的訪問。

操作系統(tǒng)有一個(gè)很重要的任務(wù)——調(diào)整內(nèi)存中的數(shù)據(jù),目的在于減少用戶使用電腦時(shí)因讀取硬盤而造成的延遲和卡頓。調(diào)整一般發(fā)生兩種情況下,一個(gè)是電腦閑置的時(shí)候,提前將用戶可能會(huì)用到數(shù)據(jù)搬到內(nèi)存中;另一個(gè)就是置換的時(shí)候,加載用戶所需數(shù)據(jù)的同時(shí),舍棄那些比較不可能被訪問的數(shù)據(jù)。

計(jì)算機(jī)科學(xué)里把訪問數(shù)據(jù)時(shí)數(shù)據(jù)剛好在內(nèi)存里的概率成為命中率。為了提升用戶體驗(yàn),減少等待,就得提高命中率,選擇合適的內(nèi)存置換(淘汰)算法就顯得至關(guān)重要,內(nèi)存置換算法是指在發(fā)生置換操作時(shí),應(yīng)該淘汰內(nèi)存中的哪些數(shù)據(jù),來放置新的數(shù)據(jù),常用的算法(別怕,都很簡(jiǎn)單)有

1、先進(jìn)先出算法(FIFO,F(xiàn)irst In First Out)

淘汰最先進(jìn)來的數(shù)據(jù),這個(gè)算法非常簡(jiǎn)單,這樣做的道理是最先進(jìn)來的數(shù)據(jù)可能已經(jīng)用過了,過時(shí)了。對(duì)于一次性或短期使用的數(shù)據(jù),非常合適,但對(duì)于長(zhǎng)期使用的數(shù)據(jù),就不合適了。這個(gè)算法命中率并不高,常常被提起主要是用來襯托其他算法的優(yōu)越性,有點(diǎn)類似奧特曼的小怪獸。

2、最久沒訪問算法(LRU,Least Rescently Used)

淘汰內(nèi)存中最久沒有被用到的數(shù)據(jù),這個(gè)就比FIFO合理多了,最久沒被訪問,可能真的是過時(shí)了。從邏輯上來說是相對(duì)合理的,而且比較簡(jiǎn)單,現(xiàn)在流行的操作系統(tǒng)大多都使用它或它的變種。當(dāng)然,這個(gè)算法對(duì)于那種需要被周期性訪問的數(shù)據(jù)就不合適了。

3、最不頻繁算法(LFU,Least Frequency Used)

淘汰內(nèi)存中在最近一段時(shí)間內(nèi)使用頻率最低的數(shù)據(jù),這個(gè)又比LRU更合理了,就是保留最近最常用的數(shù)據(jù),剔除最不常用的蛀蟲。它并不是操作系統(tǒng)的寵兒,因?yàn)樗?jì)算量比較大,自身會(huì)消耗一些內(nèi)存,對(duì)于操作系統(tǒng)這樣的惜時(shí)(內(nèi)存)如金的家伙是不可接受的。

4、智能算法(AI)

我定義的一類算法,它泛指通過機(jī)器學(xué)習(xí)算法依據(jù)各種歷史數(shù)據(jù),計(jì)算各個(gè)數(shù)據(jù)未來一小段時(shí)間內(nèi)將會(huì)被訪問的概率,保留概率高的,淘汰低的。舉個(gè)例子,假設(shè)你白天使用電腦工作,晚上使用電腦娛樂,那么AI算法可能會(huì)在白天盡量在內(nèi)存中保留工作相關(guān)的數(shù)據(jù)。

比如一些word文檔及辦公軟件的數(shù)據(jù),而到了晚上,工作相關(guān)的數(shù)據(jù)則優(yōu)先被淘汰,內(nèi)存中常駐游戲,影音之類的數(shù)據(jù)。再比如,操作系統(tǒng)檢測(cè)到了我剛剛下載了一部電影,那么這時(shí)應(yīng)該將這部電影的數(shù)據(jù)及播放器的數(shù)據(jù)加載到內(nèi)存中,其他類型的則可能被淘汰。AI算法的計(jì)算量顯然很大也很復(fù)雜,入不了操作系統(tǒng)的法眼,但在很多情況下卻非常好用。
再介紹一個(gè)概念:多級(jí)緩存,后面將會(huì)用到。

其實(shí)在電腦中,內(nèi)存并不是讀取速度最快的存儲(chǔ)介質(zhì),還有更快的,叫CPU緩存。如果你看CPU的參數(shù),經(jīng)常能看到(L1/L2/L3緩存,他們共同組成CPU緩存),它是CPU的一部分,你們?cè)诳碈PU規(guī)格時(shí)常常會(huì)看到,它離CPU計(jì)算核心更近,訪問速度更快,但容量更小。CPU緩存和內(nèi)存的關(guān)系 與 內(nèi)存和硬盤的關(guān)系是一毛一樣的。其實(shí)CPU緩存中還能細(xì)分,“ L1緩存 ”是“ L2緩存 ”的緩存,“L2緩存”是“L3緩存”的緩存,“L3緩存”是內(nèi)存的緩存,如下圖所示,這樣不斷嵌套的緩存結(jié)構(gòu)就叫多級(jí)緩存。

cpu_cache_structure

緩存還有另外一個(gè)作用,緩沖。

計(jì)算機(jī)中的例子不太好說,舉個(gè)拉面店的例子。

有個(gè)拉面店只賣一種拉面,顧客時(shí)多時(shí)少,有時(shí)一次性來好幾個(gè)人,師傅現(xiàn)做的話肯定有顧客等很久,如果提前做很多的話又有可能做多賣不出去,那么師傅想了這么一個(gè)策略,提前做好一些拉面,放在一個(gè)固定的桌子上,如果桌子上的拉面達(dá)到2碗,師傅就慢著點(diǎn)做,如果一直沒賣出去,桌上的面達(dá)到4碗,就完全不做了,如果某個(gè)時(shí)段生意旺賣很快,桌上的面可能會(huì)少于2碗,或者賣完,甚至還有人等,那么師傅就要開足馬力做面了。

那么,這里就把桌子當(dāng)作緩存,通過緩存策略,給師傅一定的緩沖時(shí)間,一定程度上抵消人流波動(dòng)帶來的影響。

緩沖可以從兩個(gè)角度解釋,一個(gè)是任務(wù)發(fā)送者,另一個(gè)是任務(wù)處理者。在發(fā)送者和處理者之間設(shè)置緩存,來協(xié)調(diào)任務(wù)發(fā)送速度與處理速度不一致。當(dāng)任務(wù)發(fā)送速度大于處理速度時(shí),任務(wù)在緩存中堆積,發(fā)送者減慢發(fā)送速度,處理者提高處理速度;如果緩存中任務(wù)非常少了,則提高發(fā)送速度,減慢處理速度。如果處理是一次性的,緩存能減少處理的頻率。

舉個(gè)例子:垃圾桶是一種緩存,如果家里沒有垃圾桶,我們一旦有垃圾就得扔到外頭的垃圾桶,垃圾桶的存著可以減少我們處理的頻率。

產(chǎn)品例子

緩存理論不僅在計(jì)算機(jī)領(lǐng)域應(yīng)用廣泛,而且在生活和產(chǎn)品中也常常用到。我們先對(duì)理論進(jìn)行抽象:

  • 緩存/內(nèi)存,泛指那些使用方便又非常有限的容器。
  • 硬盤,那些使用不方便但容量非常大的容器。
  • 數(shù)據(jù),放在容器中的物體。
  • 算法,上面的算法大多都是說怎么淘汰,而下面往往說的是怎么保留,怎樣選擇,其實(shí)本質(zhì)是一樣的。從保留數(shù)據(jù)的角度重新解釋上面的算法:FIFO,保留最后進(jìn)入內(nèi)存的;LRU,保留最近用過的;LFU,保留近期使用最頻繁的;AI,保留未來最可能用到的。

下面舉例:

我們的電腦桌面就是一個(gè)“緩存”,你可以在上面放文件及程序,它非常方便,觸手可及,但是它容量非常有限,而資源管理器(我的電腦)則像是“硬盤”。桌面空間有限,東西多了也容易造成混亂,所以必須有所取舍,熵君在整理電腦桌面時(shí)一般會(huì)將最常用的放在桌面上,不常用的淘汰,這其實(shí)就是LFU算法 。

我們的手機(jī)桌面的首屏也可以當(dāng)做“緩存”,一打開就能用到,而最下面一排的快捷欄則是更高級(jí)的緩存。我一直期望手機(jī)有這樣一個(gè)功能,自動(dòng)把最常用(LFU)的應(yīng)用放首屏,省得我去整理。

安卓首屏

chrome的首頁就有很多標(biāo)簽卡,都是你最常打開的網(wǎng)站(LFU),非常方便。

chrome首頁

網(wǎng)站的首頁也是一個(gè)緩存,就拿電商網(wǎng)站來說,首頁資源是非常珍貴的,過去,這個(gè)首頁往往是死的,把一些熱門的商品放在首頁,而現(xiàn)在都是使用推薦算法為每個(gè)用戶定制首頁,這就是上面所說的AI算法。新聞網(wǎng)站也很類似,以前都是編輯根據(jù)經(jīng)驗(yàn)人工調(diào)整的首頁,現(xiàn)在往往會(huì)引入智能算法(AI),結(jié)合用戶個(gè)性化,新聞時(shí)效性等綜合因素來安排首頁內(nèi)容。

亞馬遜首頁

生活中也有很多例子。筆者在整理房間的時(shí)候就會(huì)使用緩存理論,我會(huì)劃定一些緩存。

比如桌面,或者其他一些觸手可及的地方;我也會(huì)制造緩存,比如指定衣柜中的某個(gè)格子為緩存,規(guī)定放在這個(gè)格子里的衣服可以隨意堆放。這些“緩存”常常會(huì)溢出,比如桌上太多東西了,影響我工作了;或者衣柜里的緩存區(qū)衣服太滿,衣服不好找了。

這時(shí)我就會(huì)清理,我會(huì)把不常用的物品清出緩存區(qū),并規(guī)整地放在它應(yīng)該放的地方。這樣就避免了頻繁整理常用的物品,而這些常用的物品常常在你整理后又會(huì)使用到,那么之前就白整理了。這里也用到了緩存的緩沖功能。

這樣的例子還有很多,比如微信的首屏也是個(gè)緩存,顯示最近的對(duì)話,顯然是使用LRU算法。當(dāng)你在某個(gè)場(chǎng)景抽象出了緩存,那么下一步就是選取合適的算法,一般情況下LFU/LRU這樣的簡(jiǎn)單算法就夠用了,如果緩存資源非常珍貴,那么就應(yīng)該求助你們的算法工程師做一套AI算法了,這就是緩存理論+

緩存理論與電商物流

如何利用緩存理論分析網(wǎng)購物流的未來呢?

購物模式

如果把網(wǎng)購當(dāng)做一次數(shù)據(jù)訪問,那么我們可以把商品當(dāng)做數(shù)據(jù),把發(fā)貨的倉庫當(dāng)做硬盤,緩存則可以有很多種,那么我們將得到以下幾種購物模式:

模式一

從硬盤直接讀取數(shù)據(jù),不經(jīng)過緩存。也就是網(wǎng)購,并送貨上門。

緩存-送貨上門

(1)優(yōu)點(diǎn):直接,不需要顧客奔波。

(2)缺點(diǎn)

  1. 慢;
  2. 無法確定派送時(shí)間。很多時(shí)候顧客在派送的時(shí)候不在目的地,或者由于其他原因無法接收,這樣要么限制了顧客自由,要么降低了快遞員的效率。

模式二

先從硬盤讀取數(shù)據(jù)到緩存/內(nèi)存,再從緩存讀取數(shù)據(jù)。也就是網(wǎng)購,送貨到自提柜再由用戶自提,自提柜就是緩存。

緩存-自提柜

(1)優(yōu)點(diǎn):用戶收貨不再受到快遞派送時(shí)間的制約。

(2)缺點(diǎn):

  1. 要自己取,如果自提柜遠(yuǎn)還不順路就更費(fèi)勁了;
  2. 慢;
  3. 很多地方?jīng)]有自提柜;
  4. 自提柜的空間無法充分利用,如果自提柜很密集,那么空置率肯定很高。

模式三

數(shù)據(jù)已經(jīng)提前從硬盤加載到內(nèi)存,直接訪問內(nèi)存就可以了。這就便利店的模式,便利店也是一種緩存,老板進(jìn)貨就是從硬盤加載數(shù)據(jù)到緩存的操作。

緩存-便利店

(1)優(yōu)點(diǎn):快。

(2)缺點(diǎn)

  1. 要自己??;
  2. 商品有限,很多東西都買不到。

從緩存理論的角度分析

從緩存理論的角度,以上這幾種購物方式其實(shí)是可以互相轉(zhuǎn)換的。如果僅僅從緩存的角度,如何分析這幾種模式?

  • 模式一:沒有緩存,每次從硬盤加載,慢。
  • 模式二:有緩存,但是每次仍然從硬盤加載數(shù)據(jù),緩存只起到了緩沖的作用,相當(dāng)于命中率為0的緩存。無法確保緩存被充分利用,當(dāng)自提柜密度提高時(shí)更甚。如果你把自提柜的空間比作便利店的貨架,這相當(dāng)于便利店的貨架很大部分沒擺放商品。
  • 模式三:有緩存,緩存利用率高,但緩存算法并不是最優(yōu)化,這是由店老板決定的,因此命中率還有提高的空間。緩存就像一潭死水,無法變化,緩存中沒有的數(shù)據(jù)(店里沒有的商品)無法獲取。

筆者的理想模式是怎么樣的呢?讓我們通過改造模式二(自提柜)來獲得:

  • 增加自提柜的密度,要比便利店還更密,提供更好的覆蓋度及體驗(yàn)。
  • 發(fā)展自提柜快遞員這種職業(yè),和普通快遞員不同,他們的任務(wù)是由顧客直接指派,并且快速響應(yīng),派送距離很短,一般1公里以內(nèi)(由自提柜的密度決定),解決懶人的最后一公里。其實(shí)這個(gè)不一定有必要,更多的是想告訴你,通過這樣,模式2可以取代模式1,并解決模式1的時(shí)間問題。
  • 預(yù)先加載,在顧客購買之前,就將商品緩存到自提柜,這樣,自提柜就和便利店就很相似了。這樣就能充分利用自提柜的空間(緩存)。Android手機(jī)中有很多優(yōu)化軟件,在你內(nèi)存占滿時(shí)會(huì)讓你清理內(nèi)存,而這與Android的內(nèi)存策略背道而馳,因?yàn)楫?dāng)內(nèi)存占滿時(shí)內(nèi)存才是被充分利用的,這樣能提高命中率,如果需要加載新的數(shù)據(jù),那么Android會(huì)自動(dòng)舍棄些不常用的數(shù)據(jù)。
  • 使用AI算法對(duì)緩存(自提柜中提前加載的貨物)進(jìn)行安排,利用機(jī)器學(xué)習(xí)算法結(jié)合用戶數(shù)據(jù),預(yù)測(cè)某個(gè)自提柜附近的顧客們將會(huì)購買的商品,并將這些商品預(yù)先緩存好。當(dāng)用戶在電商網(wǎng)站購物時(shí),發(fā)現(xiàn)自己想要的商品已經(jīng)在附近的自提柜中,這樣,購物體驗(yàn)就接近便利店了。

一些電商公司有過近似的嘗試,但還是離理想模式有差距。

亞馬遜是個(gè)奇葩公司,總是有很多驚人的想法,其中有一個(gè)是擅自派送商品到顧客家,而顧客甚至沒有訂購,如果顧客覺得這個(gè)不是他想要的,可以拒收。這個(gè)想法的邏輯和前面提的預(yù)先加載是一致的,雖然兩者是類似,但是亞馬遜這個(gè)做法是不可行的,因?yàn)樗鼪]有緩存,目標(biāo)是某個(gè)用戶,這就要求算法得精確到個(gè)人,難度太大。而通過緩存(自提柜)的緩沖作用,目標(biāo)可以擴(kuò)大為附近的顧客,這樣對(duì)算法的要求就大大降低。

每年的雙十一阿里都搞得風(fēng)風(fēng)火火,快遞的效率一年比一年高,爆倉的情況已經(jīng)好了很多,這里的秘訣就是阿里依據(jù)AI算法將商品提前緩存到各地的倉庫,這樣就對(duì)物流網(wǎng)絡(luò)起到了緩沖的作用,同時(shí)也減少了用戶等待的時(shí)間。

倉庫也是一種緩存,那么倉庫是緩存,自提柜又是什么呢?這其實(shí)并不沖突,上面提過了多級(jí)緩存這個(gè)概念,明顯,自提柜是最末端的緩存,而倉庫則是上一級(jí)緩存,其實(shí)倉庫本身也是多級(jí)緩存,比如北京市朝陽區(qū)的倉庫是北京市倉庫的緩存,北京市倉庫又可能是河北省倉庫的緩存。阿里做的這個(gè)工作已經(jīng)非常接近了,但是還停留在解決具體問題的階段,沒有去抽象升華。

  • 菜鳥驛站,這個(gè)看著非常相似,實(shí)則差十萬八千里。它沿襲了阿里輕資產(chǎn),分流風(fēng)險(xiǎn),做平臺(tái)的風(fēng)格。菜鳥驛站對(duì)各個(gè)快遞代售點(diǎn)沒有控制力,體驗(yàn)很差,如果把各個(gè)代售點(diǎn)當(dāng)做緩存,阿里無法對(duì)緩存做任何安排??偟膩碚f還不如現(xiàn)在的自提柜。當(dāng)然它成本低,發(fā)展速度快是優(yōu)點(diǎn)。
  • 順豐嘿客,似乎是網(wǎng)購體驗(yàn)店與自提柜的合體,發(fā)展并不順利,還沒完全摸透意圖。不過沒有強(qiáng)大的電商無法完全實(shí)現(xiàn)理想模式。

有些讀者可能會(huì)有疑問:這樣大肆租店/場(chǎng)地成本一定很高吧?是的,成本確實(shí)很高,但你想想,便利店都能支撐起這樣的店租,而緩存算法及機(jī)制更為先進(jìn)的理想模式肯定能創(chuàng)造更多價(jià)值,所以不用擔(dān)心。

電商公司及快遞公司,怎樣能更快地到達(dá)理想模式?

  • 發(fā)展(收購)便利店,慢慢將貨架自提柜化。
  • 將自動(dòng)售貨機(jī)與自提柜結(jié)合,取代貨架,進(jìn)一步無人化。
  • 利用數(shù)據(jù)及算法優(yōu)化便利店緩存(貨架/自提柜/自動(dòng)售貨機(jī))上的貨品,提高命中率。
  • 鏈接倉庫與自提柜,形成多級(jí)緩存,隨著自提柜數(shù)量的提升,增加倉庫的數(shù)量。
  • 將物流標(biāo)準(zhǔn)化自動(dòng)化,進(jìn)一步提升物流速度和效率。
  • 在少數(shù)城市試錯(cuò)。

理想模式不可能完全取代商店,但作為一種理論上更先進(jìn)模式,我相信它會(huì)消滅大部分商店,而商店存在的意義更多將是展示、體驗(yàn)還有服務(wù)。

一不小心又寫多了,科學(xué)并不像大家想象的那么死板,經(jīng)過理解與抽象,很容易應(yīng)用到生活和產(chǎn)品中,今天的緩存理論,希望你喜歡。

 

作者:熵君,公眾號(hào)/微博:@熵君

本文由 @熵君 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 好久沒看到這么好的文章了,勝讀十年書??!既有雄厚的技術(shù)支撐,又有深邃的商業(yè)分析。行文如同高山流水!?。?/p>

    來自山東 回復(fù)
  2. 現(xiàn)在很多電商的自建倉就是一個(gè)緩存,各賣家商品的存量、存放位置都是預(yù)估后計(jì)算出來的,接到訂單后自建倉直接代發(fā)貨,比商家自己發(fā)貨方便快捷。

    來自江蘇 回復(fù)
  3. 漲知識(shí)了

    回復(fù)
  4. 但這邊還是有一個(gè)關(guān)于同類產(chǎn)品競(jìng)爭(zhēng)的問題。
    當(dāng)電商中品牌沖類目第一的競(jìng)爭(zhēng)蔓延到了線下,勢(shì)必也會(huì)對(duì)已有的品牌線下渠道造成沖擊,營銷成本反而變高了,品牌的利益受損。
    像現(xiàn)在這種僅僅存放包裹的自提柜還算是相安無事,但損害的是消費(fèi)者的體驗(yàn)。

    回復(fù)
    1. 我理解你的擔(dān)憂,但線下的營銷成本也是非常高的,例如便利店里的食品品牌,好幾年了,還是那幾個(gè)品牌,新品牌機(jī)會(huì)很小,而這些老品牌每年得砸多少廣告來維持形象?相反,電商里頭的品牌則眼花繚亂,涌現(xiàn)出很多新的名牌。另一個(gè)就是,線下品牌的營銷渠道對(duì)線上也有效,也就是說線上品牌的營銷渠道更多,有些電商品牌已經(jīng)開始在公交車站做廣告。
      自提柜的問題沒太明白。

      回復(fù)
  5. 作者是技術(shù)出身嗎?好厲害! ??

    來自北京 回復(fù)
    1. 是的 ??

      回復(fù)