如果把體系龐大的計算機科學(xué)領(lǐng)域比作一臺機器,那么每個程序員的作用都不過是一顆螺絲釘,沒有面面俱到,只有精誠協(xié)作。程序員早已不是非得在C位,寫出經(jīng)典、傳世,改變歷史的編碼才能夠上優(yōu)秀,對于需要大量復(fù)雜程序設(shè)計的新興技術(shù),往往越是做扎實的基礎(chǔ)研究,越靠近底層,所做的貢獻就越大。存儲公鏈YottaChain創(chuàng)始人王東臨就用自己的實踐證明了這一點。
“YottaChain的LRC編碼是我親自寫的,在此之前,我已經(jīng)15年不需要寫代碼了。”
“這是YottaChain中最重要的代碼嗎?”
“它不是,但是沒它不行。它很關(guān)鍵。”
那么LRC是什么?YottaChain的LRC編碼又有什么獨特之處?
王東臨介紹:LRC是一種糾刪碼(Erasure Code,簡稱EC碼),糾刪碼是一種非常強大的數(shù)據(jù)冗余編碼。數(shù)據(jù)冗余編碼的專業(yè)術(shù)語是前向糾錯的分組差錯控制編碼,可以用N+M來表示,即將數(shù)據(jù)用該算法編碼成N+M個數(shù)據(jù)分片(Shard),每個數(shù)據(jù)分片1/N大小,只需要其中N個數(shù)據(jù)分片就能用對應(yīng)的譯碼算法還原數(shù)據(jù)。也就是說,最多允許M個數(shù)據(jù)分片丟失,數(shù)據(jù)也不會丟。
舉例來說,對于9+3模式來說,是將數(shù)據(jù)編碼成12個數(shù)據(jù)分片(注意不是切成12片,而是像加密一樣做數(shù)學(xué)編碼計算出這12片),每個數(shù)據(jù)分片的大小是原數(shù)據(jù)的1/9,這12個數(shù)據(jù)分片中最多允許丟失3個數(shù)據(jù)片,也能利用剩余的數(shù)據(jù)分片還原出原始數(shù)據(jù)。
數(shù)據(jù)冗余編碼會帶來一定的計算開銷和元數(shù)據(jù)開銷,但是數(shù)據(jù)冗余率(冗余后數(shù)據(jù)與原始數(shù)據(jù)的比例)極低,只有(N+M)/N,可靠性卻接近M副本。例如上例中9+3冗余的數(shù)據(jù)冗余率只有133%,但可靠性卻與3副本相當,而3副本的數(shù)據(jù)冗余率高達300%,僅僅硬盤的成本就是9+3冗余編碼的2倍還要多。
數(shù)據(jù)冗余編碼起源于通信領(lǐng)域,當把一大塊數(shù)據(jù)切成很多數(shù)據(jù)包來逐次傳輸時,這些數(shù)據(jù)包在過程中可能會出現(xiàn)錯誤或者干脆整個數(shù)據(jù)包被丟掉。為了解決這一問題,可以將原始數(shù)據(jù)幀編碼成帶冗余的新數(shù)據(jù)幀再進行傳輸。目的節(jié)點接收到足夠多的數(shù)據(jù)幀后,便可解碼得到原始的數(shù)據(jù)幀。比如網(wǎng)絡(luò)的延時/丟包,硬盤損毀等問題,就可以通過數(shù)據(jù)冗余編碼得到解決。
數(shù)據(jù)冗余編碼的主要功能是檢錯、糾錯和糾刪。檢錯的意思是能識別數(shù)據(jù)差錯,糾錯則更進一步,不僅能識別數(shù)據(jù)差錯,還能糾正出錯的數(shù)據(jù),這樣一個數(shù)據(jù)包在傳輸過程中出現(xiàn)數(shù)據(jù)錯誤時,也會被自動糾正。糾錯是有極限的,如果出錯的數(shù)據(jù)包的數(shù)量超過了糾錯能力,那就不能自動糾錯了。糾刪則是不僅能糾錯,而且能刪除超過糾錯能力的數(shù)據(jù)。糾刪碼在也應(yīng)用在存儲領(lǐng)域中,但這么多年來,存儲領(lǐng)域一直沿用的是通訊領(lǐng)域的糾刪碼,直到最近幾年,學(xué)術(shù)界開始認識到存儲領(lǐng)域與通訊領(lǐng)域的數(shù)據(jù)容錯的需求有些詫異,開始研究存儲專用的糾刪碼。
同樣是數(shù)據(jù)容錯需求,在存儲領(lǐng)域和在通訊領(lǐng)域有什么差異呢?原來,通訊領(lǐng)域的數(shù)據(jù)是實時傳輸?shù)模绻麄鬏數(shù)臄?shù)據(jù)出現(xiàn)超出糾錯能力的錯誤,可以重發(fā)數(shù)據(jù)包,但在存儲領(lǐng)域,就不存在重發(fā)的機會了,因為讀取數(shù)據(jù)的時候可能已經(jīng)是幾年以后了,到時萬一發(fā)現(xiàn)了數(shù)據(jù)錯誤,也不能重新存了。為了防止數(shù)據(jù)在存儲過程中逐年累計錯誤(即Silent Data Corruption)最終超出糾錯能力,存儲系統(tǒng)需要不斷驗證數(shù)據(jù)是否正確(即心跳監(jiān)測)并且重建(Rebuild)錯誤的數(shù)據(jù)。通信是沒有重建需求的(可以用重發(fā)來代替),所以通信領(lǐng)域使用的糾刪碼就沒有針對重建需求的優(yōu)化設(shè)計,而存儲領(lǐng)域需要針對重建需求進行優(yōu)化,這就誕生了LRC(Locally Repairable Code)編碼。
常規(guī)的數(shù)據(jù)冗余編碼(包括糾刪碼)都是很多年前就被數(shù)學(xué)家所發(fā)明,例如常用的RS編碼(Reed-solomon codes)就是由 Irving S. Reed和Gustave Solomon在1960年發(fā)明的。但LRC編碼目前在國際上都屬于前沿領(lǐng)域,研究和應(yīng)用還非常少,例如中國最大的存儲廠商華為公司就將其作為最新賣點重點宣傳。
作為代表中國存儲技術(shù)最高水平之一的YottaChain,也采用了LRC編碼,并且還發(fā)明了自己的LRC編碼,稱為YTLRC編碼。“數(shù)據(jù)存儲有可靠、可用、安全這三個指標。應(yīng)用LRC,我們要提高的便是可靠性。我們知道硬盤經(jīng)常會壞,壞了數(shù)據(jù)就丟了。系統(tǒng)層面上為了解決這個問題,通常是在分布式存儲系統(tǒng)中存放數(shù)據(jù)的多個副本,例如各大公有云廠商普遍采用三副本模式,當其中一份數(shù)據(jù)出現(xiàn)問題,就利用其它復(fù)本進行修復(fù)。但多副本模式的數(shù)據(jù)冗余率高,成本高,如果我們要存放大量對性能不敏感的冷數(shù)據(jù),就可以采用有輕微計算開銷但能將成本大幅度降低的糾刪碼技術(shù)。例如YottaChain采用128+36的編碼方式,將每個數(shù)據(jù)塊用YTLRC編碼成164個數(shù)據(jù)分片,每個數(shù)據(jù)分片的大小是該數(shù)據(jù)塊的1/128,最多允許丟失36個數(shù)據(jù)分片也能恢復(fù)數(shù)據(jù),存儲成本只有相同可靠性的多副本模式的1/10都不到。作為廣域網(wǎng)存儲,重建性能至關(guān)重要,為了提高重建性能,我們設(shè)計了先進的YTLRC編碼,不僅在絕大多數(shù)情況下重建性能比傳統(tǒng)糾刪碼提高了10多倍,而且與其它LRC編碼相比,采用了兩維方式構(gòu)建LRC,這樣即使在特殊情況下,重建性能也能比傳統(tǒng)糾刪碼提高數(shù)倍”,王東臨介紹。
王東臨還透露了“YTLRC編碼”背后的故事,這是他在長江學(xué)者、存儲編碼的學(xué)術(shù)界領(lǐng)袖西南交大的唐小虎教授指導(dǎo)下設(shè)計的。YTLRC繼承和發(fā)展了唐教授的學(xué)術(shù)成果,不僅在常規(guī)情況下(即一個數(shù)據(jù)塊只丟失了一個數(shù)據(jù)分片)數(shù)據(jù)重建性能可以提高16倍,而且在特殊情況下(即一個數(shù)據(jù)塊同時丟失多個數(shù)據(jù)分片)也能大幅提高數(shù)據(jù)重建性能。
作為15歲即以全國數(shù)學(xué)競賽一等獎(當時還沒有奧數(shù))保送到南開大學(xué)的天才少年,王東臨的數(shù)學(xué)功底非常扎實,再加上大學(xué)期間對羅素、希爾伯特等數(shù)學(xué)大師的研究,使得王東臨具備了足夠?qū)I(yè)的學(xué)術(shù)研究能力,這是王東臨能迅速理解唐教授的科研成果并能在其基礎(chǔ)上發(fā)展的根本原因。
王東臨還特別提到唐小虎教授卓越的學(xué)者風(fēng)范:當王東臨提出在YTLRC專利上給唐教授署名時,被唐教授婉言謝絕了。唐教授認為,雖然YTLRC得到其指導(dǎo),但具體技術(shù)方案是王東臨獨立設(shè)計的,他就不分享這個成果了。無奈之下,王東臨在YTLRC的開源軟件上專門對唐教授表示了感謝。
YTLRC是底層的基礎(chǔ)編碼,一般來說越“底層”也就越“困難”,它貫穿YottaChain整個分布式存儲系統(tǒng),負責(zé)數(shù)據(jù)的讀與寫,所以不容許出錯,不能有bug。再加上YottaChain是在臨近上線時才決定嘗試用LRC編碼來代替RS編碼的,時間有限又是不容出錯。所以闊別15年沒有寫代碼的王東臨“重操舊業(yè)”,親力親為寫了一個月的代碼,直到將YTLRC編碼完成并且通過了百萬次隨機測試。至今YTLRC已經(jīng)存儲了超過10PB的數(shù)據(jù),編解碼均正確無誤,充分說明了一個老程序員的基本功。
僅僅用了兩年多的時間,創(chuàng)建于2018年8月的YottaChain就成長為業(yè)界標桿,王東臨坦言并無什么訣竅,而是日復(fù)一日,是如履薄冰、始終懷著敬畏,是打破常規(guī)思維的不破不立,而這一切從平凡又偉大的YTLRC編碼中都可見微知著。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關(guān)資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責(zé)任。
任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )