QCon專訪彭淵:Fourinone是俄羅斯套娃中最小的一個
淘寶Fourinone是一個自主研發(fā)的分布式并行計算框架,它集成了Hadoop、ZooKeeper、MQ、分布式緩存四大主要的分布式計算功能,F(xiàn)ourinone的功能強大用途廣泛,它實現(xiàn)了ZooKeeper的所有功能并進行了很多改進,它同時又提供完整的分布式緩存支持,包括中小型緩存以及大型集群緩存,它使用不同于Map/Reduce的全新設(shè)計模式解決問題,模仿現(xiàn)實中生產(chǎn)加工鏈?zhǔn)郊硬⑿刑幚淼?ldquo;包工頭/農(nóng)民工/手工倉庫/職業(yè)所”方式設(shè)計分布式計算,它還可以當(dāng)做簡單的mq使用。Fourinone整體短小精悍,就一個jar包沒有任何依賴,很方便嵌入式開發(fā)使用。InfoQ就Fourinone相關(guān)技術(shù)設(shè)計對彭淵做出了采訪。
InfoQ:您在演講中提到的四個功能產(chǎn)品:Hadoop、ZooKeeper、MQ、分布式緩存,F(xiàn)ourinone中如何平衡它們之間的關(guān)系?
彭淵: 首先,我覺得應(yīng)該再解釋一下Fourinone是什么:
Fourinone是一個精心設(shè)計的框架和API,它不是四個產(chǎn)品的組合,它不是Hadoop的復(fù)制品,也不是將幾個開源產(chǎn)品拼湊起來的東西。它的目的是幫助你去利用多臺計算機的資源實現(xiàn)各種分布式應(yīng)用。下面這段話是它的定義:
Fourinone提供了一個4合1分布式框架和簡單易用的編程API,實現(xiàn)對多臺計算機CPU、內(nèi)存、硬盤的統(tǒng)一利用,從而獲取到強大計算能力去解決復(fù)雜問題。
Fourinone框架提供了一系列并行計算模式(農(nóng)民工/包工頭/職介紹/手工倉庫)用于利用多機多核CPU的計算能力;提供完整的分布式緩存和小型緩存用于利用多機內(nèi)存能力;提供像操作本地文件一樣操作遠程文件(訪問、并行讀寫、拆分、排它、復(fù)制、解析、事務(wù)等)用于利用多機硬盤存儲能力;由于多計 算機物理上獨立,F(xiàn)ourinone框架也提供完整的分布式協(xié)同和鎖以及簡化MQ功能,用于實現(xiàn)多機的協(xié)作和通訊。
所以,框架和編程API是Fourinone的核心,它不實現(xiàn)具體的分布式應(yīng)用,但是你可以用它幫助你去實現(xiàn)具體的分布式應(yīng)用,無論是分布式計算還是存儲還是協(xié)同等。
在智能手機出現(xiàn)以前,我們會認為電話、MP3、應(yīng)用程序、數(shù)碼相機是完全不同的產(chǎn)品,實際上我們不清楚這些產(chǎn)品內(nèi)在技術(shù)的聯(lián)系,我們只是一個使用者,當(dāng)智能手機出現(xiàn)以后,我們發(fā)現(xiàn)它們也可以結(jié)合的很好。
Fourinone實際上將多種分布式問題的理解融入到了一個框架中,考慮到底層實現(xiàn)技術(shù)的相似性,對復(fù)雜的分布式計算應(yīng)用進行了大量簡化和歸納,所以最后它看上去綜合了4種主要的功能。
雖然中國人動輒花費上百萬去購買美國人的應(yīng)用服務(wù)器層軟件,并誤認為是需要數(shù)千工程師長周期才能完成的工程,但是有過多年的行業(yè)經(jīng)驗和認真研究過開源軟件就知道,幾乎所有的開源軟件的作者一般只有1-3個人,這種創(chuàng)新孵化階段的投資并不大。Hadoop的作者其實也是Lucene的作者,這跟軟件外包以人頭數(shù)計算利潤的形式是不一樣。如果進行了商業(yè)包裝,加入了銷售、解決方案、技術(shù)支持、售后服務(wù)等等,那整個服務(wù)團隊和投資都會加大。
InfoQ:Hadoop這個社區(qū)現(xiàn)在的發(fā)展如何?如果其它用戶選擇這個產(chǎn)品出現(xiàn)問題時能否及時找到和產(chǎn)品一樣免費或者廉價的技術(shù)支持?
彭淵: Hadoop社區(qū)現(xiàn)在正在被各商業(yè)公司借助“大數(shù)據(jù)”理念進行商業(yè)改裝和推動,縱觀十年來的it行業(yè)的幾次技術(shù)浪潮:
·COM/COM+
·J2EE/EJB
·SSH
·SOA/SAAS
·云計算/大數(shù)據(jù)
Hadoop屬于上面大數(shù)據(jù)這波潮,這個行業(yè)的技術(shù)推新規(guī)律從來都沒變,都是先拋理念,再出產(chǎn)品,再賣服務(wù),最終獲取商業(yè)利益,所以Hadoop社區(qū)不會是完全單純和廉價的?,F(xiàn)在的Hadoop認證就是一種收費的技術(shù)培訓(xùn)服務(wù),商業(yè)公司改裝過的Hadoop產(chǎn)品肯定也是收費的。
而Fourinone做的是一個框架和工具,它不存在被商業(yè)改裝和推動,所以它的社區(qū)更簡單、完全免費。好的工具軟件最好要做到自助,將復(fù)雜的問題簡單化,而不是將簡單的問題復(fù)雜化,就像使用Windows、 Word、 iPhone這些東西,幾乎不需要太多學(xué)習(xí)成本,不需要過度依賴一個技術(shù)社區(qū)。Fourinone自帶了一系列學(xué)習(xí)指南和功能Demo,幾乎可以涵蓋所有學(xué)習(xí)內(nèi)容了。
InfoQ:系統(tǒng)中如果發(fā)送、接收的數(shù)據(jù)錯誤需要替換怎么做?
彭淵: Fourinone里的數(shù)據(jù)發(fā)送多數(shù)是工頭將相關(guān)計算的數(shù)據(jù)/命令/消息通過手工倉庫傳給工人執(zhí)行,并檢驗執(zhí)行狀態(tài)。如果發(fā)送接收發(fā)生錯誤,那通常有兩種情況: 一種是系統(tǒng)故障引起的發(fā)送接收失敗, 一種是業(yè)務(wù)邏輯意義上的錯誤數(shù)據(jù)。系統(tǒng)故障導(dǎo)致網(wǎng)絡(luò)斷掉或者掛機,框架會捕獲故障信息并通告,工頭在檢驗工人執(zhí)行狀態(tài)時會獲知,并進行相應(yīng)的業(yè)務(wù)上的故障處理,重發(fā)或者單獨記錄;業(yè)務(wù)邏輯意義上的錯誤數(shù)據(jù),通常在工人的業(yè)務(wù)實現(xiàn)邏輯里去判斷,這個是由開發(fā)者去控制,框架不做業(yè)務(wù)邏輯上的處理。
InfoQ:這個系統(tǒng)一旦遭遇故障,不同節(jié)點數(shù)據(jù)不一致,如何恢復(fù)整個系統(tǒng)?性能和安全性如何平衡,什么數(shù)據(jù)放在這個系統(tǒng)上?淘寶自己的交易數(shù)據(jù)、財務(wù)信息、組織人事信息是否也在這個架構(gòu)上管理?
彭淵: 這兩個問題是以Hadoop的思維方式問的數(shù)據(jù)的存儲和容災(zāi)處理。
Fourinone不是Hadoop,它是一個框架和API,它不是一個存數(shù)據(jù)的文件系統(tǒng),它的計算數(shù)據(jù)的來源可以是任意數(shù)據(jù),如數(shù)據(jù)庫,分布式文件系統(tǒng),緩存系統(tǒng)等等,但它本身不存儲數(shù)據(jù),只做分布式計算,通常一個典型的分布式計算結(jié)構(gòu),由工頭、工人、職介所組成,其中工頭是嵌入式的,它不是一個服務(wù)程序,在嵌入它的系統(tǒng)里new工頭類并管理它的生命周期,工頭不存在恢復(fù)或者容災(zāi)的概念。工人和職介所是服務(wù)程序,如果工人節(jié)點故障,職介所會實時感知,工頭分配計算時會獲取到最新活躍工人數(shù)量,如果是職介所節(jié)點故障,F(xiàn)ourinone實現(xiàn)了領(lǐng)導(dǎo)者選舉機制,會實時切換到備份職介所上。
Fourinone新版本提供了對分布式文件的操作處理,將集群中所有機器的硬盤資源利用起來,通過統(tǒng)一的fttp文件路徑訪問,如:
windows:fttp://v020138.sqa.cm4/d:/data/a.log
linux:fttp://v020138.sqa.cm4/home/user/a.log
提供對集群文件的操作支持,包括:
1、元數(shù)據(jù)訪問,添加刪除,按塊拆分, 高性能并行讀寫,排它讀寫(按文件部分內(nèi)容鎖定),隨機讀寫,集群復(fù)制等
2、對集群文件的解析支持(包括按行,按分割符,按最后標(biāo)識讀取)
3、對整形數(shù)據(jù)的高性能讀寫支持(ArrayInt比ArrayList存的更多更快)
4、兩階段提交和事務(wù)補償處理
5、自帶一個集群文件瀏覽器,可以查看集群所有硬盤上的文件(不同于Hadoop的namenode,沒有單點問題和容量限制)
總的來說,將集群看做一個操作系統(tǒng),像操作本地文件一樣操作遠程文件。
但是Fourinone并不提供一個分布式存儲系統(tǒng),比如文件數(shù)據(jù)的導(dǎo)入導(dǎo)出、拆分存儲、負載均衡,備份容災(zāi)等存儲功能,不過開發(fā)人員可以利用這些API去設(shè)計和實現(xiàn)這些功能,用來滿足自己的特定需求。
所以,F(xiàn)ourinone將復(fù)雜的備份容災(zāi)通過簡化的API方法給開發(fā)者,但是不實現(xiàn)具體的備份策略,這個由開發(fā)者根據(jù)自己的存儲特點去做。就像使用Windows,往C盤存了一張圖片,Windows不會自動往D盤復(fù)制一張,但是提供鼠標(biāo)右健點復(fù)制的功能,你可以使用該功能去備份。
Fourinone為了追求一個最輕巧精簡的框架,只做俄羅斯套娃中最小的一個,開發(fā)者可以去細細體會,并擴充更多的精彩。
彭淵,現(xiàn)在淘寶網(wǎng)任高級專家,從事互聯(lián)網(wǎng)核心技術(shù)研究。之前在金蝶總體架構(gòu)部任SOA架構(gòu)師,負責(zé)設(shè)計ESB。
從業(yè)Java技術(shù)領(lǐng)域十多年,撰寫過多款開源軟件,擁有軟件著作權(quán)的代表作有:BS系列軟件(包括財務(wù)進銷存、OA產(chǎn)品、CRM等)、FMS視頻會議、Flash網(wǎng)站生成軟件。其中BS系列軟件獲得過風(fēng)險投資, FMS視頻會議獲得金山舉辦的首屆中國優(yōu)秀軟件創(chuàng)新大賽優(yōu)秀獎。《BS財務(wù)進銷存》、《FLASH網(wǎng)站生成軟件》在華軍、天空可免費下載。
《淘寶分布式并行計算四合一框架Fourinone》是云計算方面作品,目前已經(jīng)通過壓測并用于淘寶業(yè)務(wù)場景, WordCount和排序等經(jīng)典指標(biāo)均優(yōu)于Hadoop。