如何利用緩存理論來分析網(wǎng)購物流的未來
計算機技術(shù)的進步顛覆了整個世界,而其中的很多技術(shù)不僅能解決計算機方面的問題,對很多其他方面的問題也很有啟發(fā)。今天筆者給大家介紹緩存理論,從緩存理論的角度來看待一些產(chǎn)品及生活上的問題,將會有許多有趣的結(jié)果,這就是今天的主題緩存理論+。筆者在此保證,本文沒有門檻,但需要耐心。
理論
如果這節(jié)看不太明白不用糾結(jié),結(jié)合后面的例子會容易得多。
眾所周知,內(nèi)存和硬盤是電腦的兩個重要部件,雖說兩者都是用來存儲數(shù)據(jù)的,特性卻大相徑庭:
- 內(nèi)存訪問速度快,容量小,斷電后無法保存數(shù)據(jù),在計算機中充當緩存的角色。
- 硬盤訪問速度慢,容量大,斷電后數(shù)據(jù)不丟失,用于長久地保持數(shù)據(jù)。
CPU是個急性子,每秒幾百億次計算不在話下,自然愛和內(nèi)存打交道,不待見硬盤,不待見到什么程度呢,即使CPU要讀取硬盤里的數(shù)據(jù),也先讓硬盤把數(shù)據(jù)交給內(nèi)存,CPU再從內(nèi)存讀,緩存往往就是指這樣快卻容量小的中間存儲。
問題來了,內(nèi)存容量小,而計算機可能會使用的數(shù)據(jù)卻很大,導(dǎo)致內(nèi)存裝不下,只能把裝不下數(shù)據(jù)擱硬盤里,要使用硬盤中的數(shù)據(jù),得先讓內(nèi)存清出一些暫時不用的數(shù)據(jù),再從硬盤里把所需數(shù)據(jù)加載到內(nèi)存,這種倒騰的過程叫做置換Swap,而清出數(shù)據(jù)的操作稱為淘汰數(shù)據(jù)。從硬盤讀數(shù)據(jù)就耗時了,所以我們希望我們每次取數(shù)據(jù)時數(shù)據(jù)都在內(nèi)存里,減少硬盤的訪問。
操作系統(tǒng)有一個很重要的任務(wù)——調(diào)整內(nèi)存中的數(shù)據(jù),目的在于減少用戶使用電腦時因讀取硬盤而造成的延遲和卡頓。調(diào)整一般發(fā)生兩種情況下,一個是電腦閑置的時候,提前將用戶可能會用到數(shù)據(jù)搬到內(nèi)存中;另一個就是置換的時候,加載用戶所需數(shù)據(jù)的同時,舍棄那些比較不可能被訪問的數(shù)據(jù)。
計算機科學(xué)里把訪問數(shù)據(jù)時數(shù)據(jù)剛好在內(nèi)存里的概率成為命中率。為了提升用戶體驗,減少等待,就得提高命中率,選擇合適的內(nèi)存置換(淘汰)算法就顯得至關(guān)重要,內(nèi)存置換算法是指在發(fā)生置換操作時,應(yīng)該淘汰內(nèi)存中的哪些數(shù)據(jù),來放置新的數(shù)據(jù),常用的算法(別怕,都很簡單)有:
1、先進先出算法(FIFO,F(xiàn)irst In First Out)
淘汰最先進來的數(shù)據(jù),這個算法非常簡單,這樣做的道理是最先進來的數(shù)據(jù)可能已經(jīng)用過了,過時了。對于一次性或短期使用的數(shù)據(jù),非常合適,但對于長期使用的數(shù)據(jù),就不合適了。這個算法命中率并不高,常常被提起主要是用來襯托其他算法的優(yōu)越性,有點類似奧特曼的小怪獸。
2、最久沒訪問算法(LRU,Least Rescently Used)
淘汰內(nèi)存中最久沒有被用到的數(shù)據(jù),這個就比FIFO合理多了,最久沒被訪問,可能真的是過時了。從邏輯上來說是相對合理的,而且比較簡單,現(xiàn)在流行的操作系統(tǒng)大多都使用它或它的變種。當然,這個算法對于那種需要被周期性訪問的數(shù)據(jù)就不合適了。
3、最不頻繁算法(LFU,Least Frequency Used)
淘汰內(nèi)存中在最近一段時間內(nèi)使用頻率最低的數(shù)據(jù),這個又比LRU更合理了,就是保留最近最常用的數(shù)據(jù),剔除最不常用的蛀蟲。它并不是操作系統(tǒng)的寵兒,因為它計算量比較大,自身會消耗一些內(nèi)存,對于操作系統(tǒng)這樣的惜時(內(nèi)存)如金的家伙是不可接受的。
4、智能算法(AI)
我定義的一類算法,它泛指通過機器學(xué)習(xí)算法依據(jù)各種歷史數(shù)據(jù),計算各個數(shù)據(jù)未來一小段時間內(nèi)將會被訪問的概率,保留概率高的,淘汰低的。舉個例子,假設(shè)你白天使用電腦工作,晚上使用電腦娛樂,那么AI算法可能會在白天盡量在內(nèi)存中保留工作相關(guān)的數(shù)據(jù)。
比如一些word文檔及辦公軟件的數(shù)據(jù),而到了晚上,工作相關(guān)的數(shù)據(jù)則優(yōu)先被淘汰,內(nèi)存中常駐游戲,影音之類的數(shù)據(jù)。再比如,操作系統(tǒng)檢測到了我剛剛下載了一部電影,那么這時應(yīng)該將這部電影的數(shù)據(jù)及播放器的數(shù)據(jù)加載到內(nèi)存中,其他類型的則可能被淘汰。AI算法的計算量顯然很大也很復(fù)雜,入不了操作系統(tǒng)的法眼,但在很多情況下卻非常好用。
再介紹一個概念:多級緩存,后面將會用到。
其實在電腦中,內(nèi)存并不是讀取速度最快的存儲介質(zhì),還有更快的,叫CPU緩存。如果你看CPU的參數(shù),經(jīng)常能看到(L1/L2/L3緩存,他們共同組成CPU緩存),它是CPU的一部分,你們在看CPU規(guī)格時常常會看到,它離CPU計算核心更近,訪問速度更快,但容量更小。CPU緩存和內(nèi)存的關(guān)系 與 內(nèi)存和硬盤的關(guān)系是一毛一樣的。其實CPU緩存中還能細分,“ L1緩存 ”是“ L2緩存 ”的緩存,“L2緩存”是“L3緩存”的緩存,“L3緩存”是內(nèi)存的緩存,如下圖所示,這樣不斷嵌套的緩存結(jié)構(gòu)就叫多級緩存。
緩存還有另外一個作用,緩沖。
計算機中的例子不太好說,舉個拉面店的例子。
有個拉面店只賣一種拉面,顧客時多時少,有時一次性來好幾個人,師傅現(xiàn)做的話肯定有顧客等很久,如果提前做很多的話又有可能做多賣不出去,那么師傅想了這么一個策略,提前做好一些拉面,放在一個固定的桌子上,如果桌子上的拉面達到2碗,師傅就慢著點做,如果一直沒賣出去,桌上的面達到4碗,就完全不做了,如果某個時段生意旺賣很快,桌上的面可能會少于2碗,或者賣完,甚至還有人等,那么師傅就要開足馬力做面了。
那么,這里就把桌子當作緩存,通過緩存策略,給師傅一定的緩沖時間,一定程度上抵消人流波動帶來的影響。
緩沖可以從兩個角度解釋,一個是任務(wù)發(fā)送者,另一個是任務(wù)處理者。在發(fā)送者和處理者之間設(shè)置緩存,來協(xié)調(diào)任務(wù)發(fā)送速度與處理速度不一致。當任務(wù)發(fā)送速度大于處理速度時,任務(wù)在緩存中堆積,發(fā)送者減慢發(fā)送速度,處理者提高處理速度;如果緩存中任務(wù)非常少了,則提高發(fā)送速度,減慢處理速度。如果處理是一次性的,緩存能減少處理的頻率。
舉個例子:垃圾桶是一種緩存,如果家里沒有垃圾桶,我們一旦有垃圾就得扔到外頭的垃圾桶,垃圾桶的存著可以減少我們處理的頻率。
產(chǎn)品例子
緩存理論不僅在計算機領(lǐng)域應(yīng)用廣泛,而且在生活和產(chǎn)品中也常常用到。我們先對理論進行抽象:
- 緩存/內(nèi)存,泛指那些使用方便又非常有限的容器。
- 硬盤,那些使用不方便但容量非常大的容器。
- 數(shù)據(jù),放在容器中的物體。
- 算法,上面的算法大多都是說怎么淘汰,而下面往往說的是怎么保留,怎樣選擇,其實本質(zhì)是一樣的。從保留數(shù)據(jù)的角度重新解釋上面的算法:FIFO,保留最后進入內(nèi)存的;LRU,保留最近用過的;LFU,保留近期使用最頻繁的;AI,保留未來最可能用到的。
下面舉例:
我們的電腦桌面就是一個“緩存”,你可以在上面放文件及程序,它非常方便,觸手可及,但是它容量非常有限,而資源管理器(我的電腦)則像是“硬盤”。桌面空間有限,東西多了也容易造成混亂,所以必須有所取舍,熵君在整理電腦桌面時一般會將最常用的放在桌面上,不常用的淘汰,這其實就是LFU算法 。
我們的手機桌面的首屏也可以當做“緩存”,一打開就能用到,而最下面一排的快捷欄則是更高級的緩存。我一直期望手機有這樣一個功能,自動把最常用(LFU)的應(yīng)用放首屏,省得我去整理。
chrome的首頁就有很多標簽卡,都是你最常打開的網(wǎng)站(LFU),非常方便。
網(wǎng)站的首頁也是一個緩存,就拿電商網(wǎng)站來說,首頁資源是非常珍貴的,過去,這個首頁往往是死的,把一些熱門的商品放在首頁,而現(xiàn)在都是使用推薦算法為每個用戶定制首頁,這就是上面所說的AI算法。新聞網(wǎng)站也很類似,以前都是編輯根據(jù)經(jīng)驗人工調(diào)整的首頁,現(xiàn)在往往會引入智能算法(AI),結(jié)合用戶個性化,新聞時效性等綜合因素來安排首頁內(nèi)容。
生活中也有很多例子。筆者在整理房間的時候就會使用緩存理論,我會劃定一些緩存。
比如桌面,或者其他一些觸手可及的地方;我也會制造緩存,比如指定衣柜中的某個格子為緩存,規(guī)定放在這個格子里的衣服可以隨意堆放。這些“緩存”常常會溢出,比如桌上太多東西了,影響我工作了;或者衣柜里的緩存區(qū)衣服太滿,衣服不好找了。
這時我就會清理,我會把不常用的物品清出緩存區(qū),并規(guī)整地放在它應(yīng)該放的地方。這樣就避免了頻繁整理常用的物品,而這些常用的物品常常在你整理后又會使用到,那么之前就白整理了。這里也用到了緩存的緩沖功能。
這樣的例子還有很多,比如微信的首屏也是個緩存,顯示最近的對話,顯然是使用LRU算法。當你在某個場景抽象出了緩存,那么下一步就是選取合適的算法,一般情況下LFU/LRU這樣的簡單算法就夠用了,如果緩存資源非常珍貴,那么就應(yīng)該求助你們的算法工程師做一套AI算法了,這就是緩存理論+。
緩存理論與電商物流
如何利用緩存理論分析網(wǎng)購物流的未來呢?
購物模式
如果把網(wǎng)購當做一次數(shù)據(jù)訪問,那么我們可以把商品當做數(shù)據(jù),把發(fā)貨的倉庫當做硬盤,緩存則可以有很多種,那么我們將得到以下幾種購物模式:
模式一
從硬盤直接讀取數(shù)據(jù),不經(jīng)過緩存。也就是網(wǎng)購,并送貨上門。
(1)優(yōu)點:直接,不需要顧客奔波。
(2)缺點
- 慢;
- 無法確定派送時間。很多時候顧客在派送的時候不在目的地,或者由于其他原因無法接收,這樣要么限制了顧客自由,要么降低了快遞員的效率。
模式二
先從硬盤讀取數(shù)據(jù)到緩存/內(nèi)存,再從緩存讀取數(shù)據(jù)。也就是網(wǎng)購,送貨到自提柜再由用戶自提,自提柜就是緩存。
(1)優(yōu)點:用戶收貨不再受到快遞派送時間的制約。
(2)缺點:
- 要自己取,如果自提柜遠還不順路就更費勁了;
- 慢;
- 很多地方?jīng)]有自提柜;
- 自提柜的空間無法充分利用,如果自提柜很密集,那么空置率肯定很高。
模式三
數(shù)據(jù)已經(jīng)提前從硬盤加載到內(nèi)存,直接訪問內(nèi)存就可以了。這就便利店的模式,便利店也是一種緩存,老板進貨就是從硬盤加載數(shù)據(jù)到緩存的操作。
(1)優(yōu)點:快。
(2)缺點
- 要自己??;
- 商品有限,很多東西都買不到。
從緩存理論的角度分析
從緩存理論的角度,以上這幾種購物方式其實是可以互相轉(zhuǎn)換的。如果僅僅從緩存的角度,如何分析這幾種模式?
- 模式一:沒有緩存,每次從硬盤加載,慢。
- 模式二:有緩存,但是每次仍然從硬盤加載數(shù)據(jù),緩存只起到了緩沖的作用,相當于命中率為0的緩存。無法確保緩存被充分利用,當自提柜密度提高時更甚。如果你把自提柜的空間比作便利店的貨架,這相當于便利店的貨架很大部分沒擺放商品。
- 模式三:有緩存,緩存利用率高,但緩存算法并不是最優(yōu)化,這是由店老板決定的,因此命中率還有提高的空間。緩存就像一潭死水,無法變化,緩存中沒有的數(shù)據(jù)(店里沒有的商品)無法獲取。
筆者的理想模式是怎么樣的呢?讓我們通過改造模式二(自提柜)來獲得:
- 增加自提柜的密度,要比便利店還更密,提供更好的覆蓋度及體驗。
- 發(fā)展自提柜快遞員這種職業(yè),和普通快遞員不同,他們的任務(wù)是由顧客直接指派,并且快速響應(yīng),派送距離很短,一般1公里以內(nèi)(由自提柜的密度決定),解決懶人的最后一公里。其實這個不一定有必要,更多的是想告訴你,通過這樣,模式2可以取代模式1,并解決模式1的時間問題。
- 預(yù)先加載,在顧客購買之前,就將商品緩存到自提柜,這樣,自提柜就和便利店就很相似了。這樣就能充分利用自提柜的空間(緩存)。Android手機中有很多優(yōu)化軟件,在你內(nèi)存占滿時會讓你清理內(nèi)存,而這與Android的內(nèi)存策略背道而馳,因為當內(nèi)存占滿時內(nèi)存才是被充分利用的,這樣能提高命中率,如果需要加載新的數(shù)據(jù),那么Android會自動舍棄些不常用的數(shù)據(jù)。
- 使用AI算法對緩存(自提柜中提前加載的貨物)進行安排,利用機器學(xué)習(xí)算法結(jié)合用戶數(shù)據(jù),預(yù)測某個自提柜附近的顧客們將會購買的商品,并將這些商品預(yù)先緩存好。當用戶在電商網(wǎng)站購物時,發(fā)現(xiàn)自己想要的商品已經(jīng)在附近的自提柜中,這樣,購物體驗就接近便利店了。
一些電商公司有過近似的嘗試,但還是離理想模式有差距。
亞馬遜是個奇葩公司,總是有很多驚人的想法,其中有一個是擅自派送商品到顧客家,而顧客甚至沒有訂購,如果顧客覺得這個不是他想要的,可以拒收。這個想法的邏輯和前面提的預(yù)先加載是一致的,雖然兩者是類似,但是亞馬遜這個做法是不可行的,因為它沒有緩存,目標是某個用戶,這就要求算法得精確到個人,難度太大。而通過緩存(自提柜)的緩沖作用,目標可以擴大為附近的顧客,這樣對算法的要求就大大降低。
每年的雙十一阿里都搞得風(fēng)風(fēng)火火,快遞的效率一年比一年高,爆倉的情況已經(jīng)好了很多,這里的秘訣就是阿里依據(jù)AI算法將商品提前緩存到各地的倉庫,這樣就對物流網(wǎng)絡(luò)起到了緩沖的作用,同時也減少了用戶等待的時間。
倉庫也是一種緩存,那么倉庫是緩存,自提柜又是什么呢?這其實并不沖突,上面提過了多級緩存這個概念,明顯,自提柜是最末端的緩存,而倉庫則是上一級緩存,其實倉庫本身也是多級緩存,比如北京市朝陽區(qū)的倉庫是北京市倉庫的緩存,北京市倉庫又可能是河北省倉庫的緩存。阿里做的這個工作已經(jīng)非常接近了,但是還停留在解決具體問題的階段,沒有去抽象升華。
- 菜鳥驛站,這個看著非常相似,實則差十萬八千里。它沿襲了阿里輕資產(chǎn),分流風(fēng)險,做平臺的風(fēng)格。菜鳥驛站對各個快遞代售點沒有控制力,體驗很差,如果把各個代售點當做緩存,阿里無法對緩存做任何安排??偟膩碚f還不如現(xiàn)在的自提柜。當然它成本低,發(fā)展速度快是優(yōu)點。
- 順豐嘿客,似乎是網(wǎng)購體驗店與自提柜的合體,發(fā)展并不順利,還沒完全摸透意圖。不過沒有強大的電商無法完全實現(xiàn)理想模式。
有些讀者可能會有疑問:這樣大肆租店/場地成本一定很高吧?是的,成本確實很高,但你想想,便利店都能支撐起這樣的店租,而緩存算法及機制更為先進的理想模式肯定能創(chuàng)造更多價值,所以不用擔心。
電商公司及快遞公司,怎樣能更快地到達理想模式?
- 發(fā)展(收購)便利店,慢慢將貨架自提柜化。
- 將自動售貨機與自提柜結(jié)合,取代貨架,進一步無人化。
- 利用數(shù)據(jù)及算法優(yōu)化便利店緩存(貨架/自提柜/自動售貨機)上的貨品,提高命中率。
- 鏈接倉庫與自提柜,形成多級緩存,隨著自提柜數(shù)量的提升,增加倉庫的數(shù)量。
- 將物流標準化自動化,進一步提升物流速度和效率。
- 在少數(shù)城市試錯。
理想模式不可能完全取代商店,但作為一種理論上更先進模式,我相信它會消滅大部分商店,而商店存在的意義更多將是展示、體驗還有服務(wù)。
一不小心又寫多了,科學(xué)并不像大家想象的那么死板,經(jīng)過理解與抽象,很容易應(yīng)用到生活和產(chǎn)品中,今天的緩存理論,希望你喜歡。
作者:熵君,公眾號/微博:@熵君
本文由 @熵君 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
好久沒看到這么好的文章了,勝讀十年書啊!既有雄厚的技術(shù)支撐,又有深邃的商業(yè)分析。行文如同高山流水?。?!
現(xiàn)在很多電商的自建倉就是一個緩存,各賣家商品的存量、存放位置都是預(yù)估后計算出來的,接到訂單后自建倉直接代發(fā)貨,比商家自己發(fā)貨方便快捷。
漲知識了
但這邊還是有一個關(guān)于同類產(chǎn)品競爭的問題。
當電商中品牌沖類目第一的競爭蔓延到了線下,勢必也會對已有的品牌線下渠道造成沖擊,營銷成本反而變高了,品牌的利益受損。
像現(xiàn)在這種僅僅存放包裹的自提柜還算是相安無事,但損害的是消費者的體驗。
我理解你的擔憂,但線下的營銷成本也是非常高的,例如便利店里的食品品牌,好幾年了,還是那幾個品牌,新品牌機會很小,而這些老品牌每年得砸多少廣告來維持形象?相反,電商里頭的品牌則眼花繚亂,涌現(xiàn)出很多新的名牌。另一個就是,線下品牌的營銷渠道對線上也有效,也就是說線上品牌的營銷渠道更多,有些電商品牌已經(jīng)開始在公交車站做廣告。
自提柜的問題沒太明白。
作者是技術(shù)出身嗎?好厲害! ??
是的 ??