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