我們的數(shù)據(jù)集群目前規(guī)模過萬,總數(shù)據(jù)量以EB計(jì),日新增數(shù)據(jù)量則以PB計(jì)……
這些數(shù)字來自某移動(dòng)互聯(lián)網(wǎng)企業(yè)在一次技術(shù)交流活動(dòng)上對(duì)自家數(shù)據(jù)處理能力的介紹。先不說EB,就說說1PB是什么概念吧?大約是2億張照片或2億首MP3音樂,如果一個(gè)人不停地聽這些音樂,能聽上1900年。
大家可能會(huì)驚嘆于這家企業(yè)強(qiáng)大的數(shù)據(jù)處理能力,但并非所有企業(yè)都具備同樣的能力——激增的數(shù)據(jù)量如果超過了數(shù)據(jù)處理能力,就會(huì)導(dǎo)致“信息過載“問題,為此,人類發(fā)明了能夠過濾信息的“搜索引擎”和“推薦系統(tǒng)”,用以高效識(shí)別和應(yīng)用那部分“至關(guān)重要”的數(shù)據(jù)。
然而,據(jù)國際數(shù)據(jù)公司IDC在報(bào)告《數(shù)據(jù)時(shí)代2025》中的預(yù)測(cè),到2025年,屬于數(shù)據(jù)分析的全球數(shù)據(jù)總量將增長至原來的50倍,達(dá)到5.2ZB;認(rèn)知系統(tǒng)“觸及”的分析數(shù)據(jù)總量也將隨之增長至原來的100倍,達(dá)到1.4ZB!這意味著用來挑選、過濾數(shù)據(jù)的推薦系統(tǒng)和搜索引擎,也一樣難逃”信息過載“。
推薦系統(tǒng)本質(zhì)上就是一個(gè)信息過濾系統(tǒng),通常分為:召回、排序、重排序這三個(gè)環(huán)節(jié),每個(gè)環(huán)節(jié)逐層過濾,最終從海量數(shù)據(jù)中篩選出幾十個(gè)用戶可能感興趣的信息推薦給用戶。更直接一些,要想實(shí)現(xiàn)推薦系統(tǒng)這三個(gè)關(guān)鍵環(huán)節(jié),就需要四個(gè)模塊化的層面,即數(shù)據(jù)、存儲(chǔ)(內(nèi)存&存儲(chǔ))、服務(wù)和應(yīng)用。
其中,存儲(chǔ)層用于存儲(chǔ)數(shù)據(jù)層的數(shù)據(jù);服務(wù)層是對(duì)外提供接口的部分;應(yīng)用層根據(jù)不同場景配置的召回策略來直接對(duì)接服務(wù)層,發(fā)起請(qǐng)求得到推薦反饋。顯然,數(shù)據(jù)、存儲(chǔ)是推薦系統(tǒng)的底層邏輯,能夠決定引擎“走多遠(yuǎn)”,而服務(wù)層和應(yīng)用層則是上層建筑,對(duì)用戶體驗(yàn)起到重要作用。
圖注:推薦引擎的模塊化層面架構(gòu)圖
因此,要想從根本上解決推薦系統(tǒng)的信息過載問題,就要從數(shù)據(jù)及存儲(chǔ)層著手。
推薦、搜索背后的挑戰(zhàn):數(shù)據(jù)硬件瓶頸
從文字發(fā)明前,人類就一直在為“合適”的數(shù)據(jù)尋找“合適”的數(shù)據(jù)存儲(chǔ)方式,例如書寫工具作為一種原始存儲(chǔ)技術(shù),其讓人類有了記錄生活的能力;1890年代,穿孔卡的出現(xiàn)為人類打開了另一個(gè)全新時(shí)代的大門,標(biāo)志著現(xiàn)代信息程序化的初露鋒芒。
穿孔卡所能處理的數(shù)據(jù)當(dāng)然不能一勞永逸地滿足人類經(jīng)濟(jì)生活的需求,1966年,動(dòng)態(tài)隨機(jī)存取內(nèi)存(DRAM)出現(xiàn),開創(chuàng)性地用電容來存儲(chǔ)信息,而所謂的“動(dòng)態(tài)“并非是指內(nèi)部的某個(gè)功能,而是指電容終究會(huì)喪失電荷,因此必須定期”動(dòng)態(tài)“刷新。這意味著DRAM一旦斷電就將面臨數(shù)據(jù)丟失的風(fēng)險(xiǎn)。
內(nèi)存專注于“數(shù)據(jù)存儲(chǔ)”,結(jié)合“數(shù)據(jù)處理“才能構(gòu)成數(shù)據(jù)價(jià)值的閉環(huán)。1971年英特爾推出全球首款CPU的創(chuàng)舉則畫全了這個(gè)閉環(huán)。此后,數(shù)據(jù)處理的硬件發(fā)明一直都在沿著內(nèi)存與CPU并存的格局發(fā)展。
而今,從大數(shù)據(jù)時(shí)代帶來數(shù)據(jù)量暴增,數(shù)據(jù)類型不斷增多,數(shù)據(jù)處理并發(fā)度和速度不斷提升這三個(gè)現(xiàn)狀考慮,是時(shí)候?qū)?shù)據(jù)處理和存儲(chǔ)的硬件技術(shù)來次大換代了。其實(shí),將這三個(gè)特征納入推薦系統(tǒng),就不難發(fā)現(xiàn),在內(nèi)存上下功夫,會(huì)更有助于破解推薦系統(tǒng)的信息過載難題。
讓我們來劃一下重點(diǎn)吧:數(shù)據(jù)規(guī)模、高并發(fā)、實(shí)時(shí)推薦等這幾點(diǎn),就是所有基于大數(shù)據(jù)做推薦服務(wù)或產(chǎn)品的企業(yè)都會(huì)遇到的共同問題:
1.數(shù)據(jù)量指數(shù)增長問題:越是精準(zhǔn),越是個(gè)性化的推薦,就越需要為每個(gè)用戶都保存一份推薦數(shù)據(jù),也就是說數(shù)據(jù)量會(huì)隨著用戶線性增長。
2.數(shù)據(jù)稀疏性問題:現(xiàn)在待處理的推薦系統(tǒng)規(guī)模越來越大,用戶和信息(譬如音樂、網(wǎng)頁、文獻(xiàn)……)數(shù)目動(dòng)輒百千萬計(jì),兩個(gè)用戶在選擇上的重疊非常少。
3.需要快速及時(shí)響應(yīng)用戶請(qǐng)求(運(yùn)算):隨著新聞、短視頻等消費(fèi)用戶碎片化時(shí)間的應(yīng)用層出不窮,推薦系統(tǒng)更倚重實(shí)時(shí)推薦策略。
就如前文所說,要解決這些問題,就要從“數(shù)據(jù)”和”存儲(chǔ)“這兩個(gè)底層邏輯找答案。
第一個(gè)問題的解決,需要大容量存儲(chǔ)設(shè)備;第二個(gè)問題需要“借力”算法,例如通過擴(kuò)散的算法,從原來的一階關(guān)聯(lián)到二階甚至更高階的關(guān)聯(lián),甚至通過迭代尋優(yōu)的方法,考慮全局信息導(dǎo)致的關(guān)聯(lián),其中“全局”一詞背后需要高性能處理器的助力;而應(yīng)對(duì)第三個(gè)問題則需要更高性能的存儲(chǔ)來支持,例如用戶在使用APP時(shí),留給推薦系統(tǒng)的處理時(shí)長往往是毫秒級(jí)的,這就對(duì)推薦系統(tǒng)的存儲(chǔ)部分的吞吐量、響應(yīng)速度、穩(wěn)定性和意外中斷后的恢復(fù)能力提出了更高的要求。
從上面這個(gè)三個(gè)方案不難看出,存儲(chǔ)既要更大容量,也需要更優(yōu)性能,換言之推薦系統(tǒng)的IT基礎(chǔ)架構(gòu)既要滿足對(duì)海量數(shù)據(jù)存儲(chǔ)的承載能力,還需要在大數(shù)據(jù)量下保證計(jì)算分析的時(shí)效性。換句話說,上面這三個(gè)問題環(huán)環(huán)相扣,必須要找到一個(gè)“三管齊下”的解決方案。
“數(shù)據(jù)硬件”新趨勢(shì):顛覆內(nèi)存與存儲(chǔ)的邊界
三管齊下說來容易,但又該如何實(shí)現(xiàn)呢?其實(shí),只要一步活,就可以步步活。
這一步就是要把更多數(shù)據(jù)“存放”在更接近CPU的位置進(jìn)行處理。
傳統(tǒng)上業(yè)界存放數(shù)據(jù)的主流產(chǎn)品包括DRAM,基于NAND技術(shù)的固態(tài)盤(SSD)以及傳統(tǒng)機(jī)械硬盤(HDD)。這些技術(shù)各有優(yōu)缺點(diǎn),例如DRAM雖然性能好、時(shí)延低,但容量受限、價(jià)格昂貴且有數(shù)據(jù)易失性;與DRAM相比,固態(tài)盤(SSD)可提供更大容量和更低成本,但無法提供相同的性能水平;傳統(tǒng)硬盤(HDD)就更別提了,勝在容量和成本更優(yōu),但有旋轉(zhuǎn)的盤片,很難避免與可靠性、物理空間要求、散熱等因素有關(guān)的總體擁有成本問題。
總結(jié)一下,上述這些產(chǎn)品的不足,概括起來就是:離CPU近的,性能雖好但很難滿足承載大體量數(shù)據(jù)和數(shù)據(jù)持久性的需求,而距離遠(yuǎn)的產(chǎn)品容量雖大,即在性能上與DRAM差距較大。
圖注:傳統(tǒng)內(nèi)存-存儲(chǔ)架構(gòu)在性能和容量上都存在缺口
如何解決?當(dāng)前業(yè)界有一個(gè)解決方案是開辟全新的產(chǎn)品技術(shù)路線:打破內(nèi)存和存儲(chǔ)的特性,將兩者的優(yōu)勢(shì)融合起來。
這一技術(shù)路線的提出者和重要實(shí)踐者,就是大家熟悉的英特爾,而它將內(nèi)存和存儲(chǔ)特性融合的產(chǎn)品,名為英特爾傲騰持久內(nèi)存(Optane Persistent Memory,簡稱Optane PMem)。這種產(chǎn)品采用的傲騰存儲(chǔ)介質(zhì)正是實(shí)現(xiàn)這種融合的基石,已被很多專家和用戶視為存儲(chǔ)“黑科技”。
采用了這種存儲(chǔ)“黑科技“的傲騰持久內(nèi)存,一句話就可以概括其特點(diǎn),那就是擁有接近DRAM,遠(yuǎn)超NAND SSD的性能,但容量又比DRAM大(單條容量可達(dá)128GiB,256GiB和512GiB),價(jià)格或單位容量的成本更實(shí)惠,且具備數(shù)據(jù)非易失能力(斷電后數(shù)據(jù)不會(huì)丟失)。
圖注:增添了傲騰持久內(nèi)存和傲騰固態(tài)盤的全新內(nèi)存-存儲(chǔ)架構(gòu)
對(duì)內(nèi)存和存儲(chǔ)優(yōu)勢(shì)的融合讓傲騰持久內(nèi)存得以提供兩種工作模式:
一是App Direct模式,讓應(yīng)用能通過load/store字節(jié)訪問方式直接訪問持久內(nèi)存,保存到持久內(nèi)存的數(shù)據(jù)斷電后不丟失。訪問持久內(nèi)存的時(shí)延和DRAM接近。
二是內(nèi)存模式,傲騰持久內(nèi)存在這種模式下可用作DRAM之外進(jìn)行容量擴(kuò)展的易失性內(nèi)存。
圖注:傲騰持久內(nèi)存的兩種工作模式
說到這里,結(jié)果已經(jīng)要呼之欲出了:在App Direct模式下工作的傲騰持久內(nèi)存正是我們尋求的、能兼顧推薦系統(tǒng)兩個(gè)底層邏輯——數(shù)據(jù)和存儲(chǔ)的答案,它既能把更多數(shù)據(jù)放在靠近CPU的位置,同時(shí)又能滿足推薦系統(tǒng)高速數(shù)據(jù)處理過程中的性能和可靠性要求。
打通內(nèi)存與存儲(chǔ),讓數(shù)據(jù)從負(fù)擔(dān)變?yōu)?ldquo;富礦”
目前,已有數(shù)家在推薦技術(shù)上處于行業(yè)領(lǐng)先地位的企業(yè)認(rèn)識(shí)到,并開始借重傲騰持久內(nèi)存的上述優(yōu)勢(shì),百度就是嘗鮮者之一。
人們對(duì)于百度的傳統(tǒng)觀感就是搜索引擎服務(wù),其實(shí)百度的搜索引擎早就利用公司在大數(shù)據(jù)和AI方面的技術(shù)優(yōu)勢(shì)和積累,增添了基于信息聚合,能向用戶投送個(gè)性化內(nèi)容的Feed流服務(wù)。在這項(xiàng)服務(wù)背后擔(dān)綱數(shù)據(jù)層和存儲(chǔ)層關(guān)鍵角色的,就是它的核心內(nèi)存數(shù)據(jù)庫Feed-Cube。
由于業(yè)務(wù)飛速拓展,百度Feed流服務(wù)需要Feed-Cube部署更大容量的內(nèi)存來承載規(guī)模激增的數(shù)據(jù),可DRAM高昂的成本和有限的容量規(guī)格使得內(nèi)存擴(kuò)展帶來的TCO壓力不斷抬升,在這種情況下,百度在初代英特爾傲騰持久內(nèi)存(100系列)剛剛發(fā)布不久,就盯上了它。
于是2019年時(shí),百度就圍繞如何在Feed-Cube上利用傲騰持久內(nèi)存的優(yōu)勢(shì)開展了一系列嘗試。它先后對(duì)比測(cè)試了僅使用DRAM,DRAM+持久內(nèi)存和僅使用持久內(nèi)存支持Feed-Cube的狀況。結(jié)果表明,在第二代至強(qiáng)可擴(kuò)展處理器與傲騰持久內(nèi)存組合上,如果使用DRAM和持久內(nèi)存的混合配置,F(xiàn)eed-Cube在2,000萬大并發(fā)訪問壓力下的平均訪問耗時(shí)僅上升約30微秒(約24%),CPU的整機(jī)消耗占比上升7%,性能波動(dòng)完全可接受,由于換來的單服務(wù)器上的DRAM使用量可以減半,從成本角度而言則是個(gè)大好消息。
百度還發(fā)現(xiàn),即使只基于傲騰持久內(nèi)存來構(gòu)建Feed-Cube,在每秒50萬次查詢(QPS)的訪問壓力下,其平均時(shí)延與只配置DRAM的方案對(duì)比上升約9.66%,性能波動(dòng)也可接受。
圖注:百度Feed-Cube內(nèi)存配置的變化路徑,和不同路徑或配置下的處理時(shí)延對(duì)比
對(duì)傲騰存儲(chǔ)“黑科技”優(yōu)勢(shì)的初步認(rèn)可,讓百度開始了在更多關(guān)鍵應(yīng)用場景中發(fā)掘其應(yīng)用價(jià)值的探索之路。包括在關(guān)鍵業(yè)務(wù)中考查其持久性對(duì)數(shù)據(jù)恢復(fù)的加速,還有優(yōu)化BigSQL數(shù)據(jù)處理平臺(tái)(基于SPARK SQL)的交互式查詢性能和成本等。
這些成功的嘗試,最終促使百度決定基于傲騰持久內(nèi)存,從存儲(chǔ)引擎層面開啟了更大的創(chuàng)新或者說是改造,即推出使用持久內(nèi)存和PMDK(英特爾開源的持久內(nèi)存開發(fā)工具包)優(yōu)化的新一代用戶態(tài)單機(jī)存儲(chǔ)引擎,為百度離線與部分在線業(yè)務(wù)提供高效穩(wěn)定、低時(shí)延、低成本和易擴(kuò)展的存儲(chǔ)服務(wù)。
該引擎可用于塊、文件和對(duì)象存儲(chǔ)等多種應(yīng)用場景,將傲騰持久內(nèi)存(APP Direct模式)用作引擎緩存層的存儲(chǔ)介質(zhì),來存儲(chǔ)元數(shù)據(jù)、緩存和索引。并通過PMDK進(jìn)行內(nèi)存調(diào)度,加速這些數(shù)據(jù)的讀寫,最大程度減少資源損耗。
圖注:SNIA編程模型和PMDK工作示意圖。傲騰持久內(nèi)存遵循SNIA編程模型,PMDK可幫助應(yīng)用直接訪問持久內(nèi)存設(shè)備,而不需要經(jīng)過文件系統(tǒng)的頁高速緩存系統(tǒng)、系統(tǒng)調(diào)用和驅(qū)動(dòng),避免了數(shù)據(jù)IO產(chǎn)出的開銷,可大大降低數(shù)據(jù)時(shí)延。
經(jīng)測(cè)試,這個(gè)全新的存儲(chǔ)引擎寫入一個(gè)4K數(shù)據(jù)的整體時(shí)間消耗大約為4.5微秒,而將其中的持久內(nèi)存換成DRAM,全程用時(shí)大約是3微秒,在時(shí)延上相差不大。但使用DRAM和使用持久內(nèi)存的成本卻相差很大,相同的成本投入下,持久內(nèi)存的空間是DRAM的三倍之多,這意味著可以緩存更多數(shù)據(jù),也能以更合理的方式進(jìn)行數(shù)據(jù)存盤,有效提高后端存儲(chǔ)設(shè)備的IO效率。
百度將傲騰持久內(nèi)存導(dǎo)入包括Feed流服務(wù)在內(nèi)各種產(chǎn)品和服務(wù)進(jìn)行嘗試,以及采用它開發(fā)新一代用戶態(tài)單機(jī)存儲(chǔ)引擎的意義,并不在于它使用這種存儲(chǔ)“黑科技”解決了自身的業(yè)務(wù)需求,更多的,是為傲騰持久內(nèi)存在搜索、推薦系統(tǒng)和更多大數(shù)據(jù)場景中的應(yīng)用進(jìn)行了重要的探索,能為遇到或即將面臨同樣信息過載問題的企業(yè)和用戶提供值得借鑒的寶貴經(jīng)驗(yàn)。
或許很快,就會(huì)有更多倚重搜索、推薦技術(shù)或服務(wù)的企業(yè)導(dǎo)入傲騰持久內(nèi)存,尤其是英特爾在今年四月剛剛發(fā)布了與傲騰持久內(nèi)存搭配的全新算力干將——面向單路和雙路服務(wù)器的第三代至強(qiáng)可擴(kuò)展處理器。它在內(nèi)存通道的支持上從上一代產(chǎn)品的6通道升級(jí)到了8通道,速度也從上一代的2666MT/提升到了高達(dá)3200MT/s,在與DRAM和傲騰持久內(nèi)存200系列配合使用時(shí),每路內(nèi)存容量可達(dá)6TB之多。這款全新處理器還支持了PCI-E 4.0技術(shù),并新添了支持PCI-E 4.0的傲騰固態(tài)盤P5800X(也是基于傲騰存儲(chǔ)介質(zhì)構(gòu)建),這表明傲騰固態(tài)盤與傲騰持久內(nèi)存的數(shù)據(jù)交互也將進(jìn)一步提速。
圖注:存儲(chǔ)“黑科技“兩款新品——傲騰持久內(nèi)存200系列和傲騰固態(tài)盤P5800X
由此不難看出,英特爾對(duì)這項(xiàng)存儲(chǔ)“黑科技“的改進(jìn)、優(yōu)化、升級(jí)和普及的步伐一直在持續(xù),也許還會(huì)越來越快,現(xiàn)在已有消息稱,下一代傲騰持久內(nèi)存單條容量就會(huì)達(dá)到1TB……這樣一來,也許大家擔(dān)心存儲(chǔ)系統(tǒng)“信息過載”的日子,離我們就越來越遠(yuǎn)了。