分佈式計算框架Fourinone

Fourinone

  FourInOne(中文名字“四不像”)是一個四合一分佈式計算框架,在寫這個框架之前,我對分佈式計算進行了長時間的思考,也看了老外寫的其他開源框架,當我們把複雜的hadoop當作一門學科學習時,似乎忘記了我們想解決問題的初衷:我們僅僅是想寫個程序把幾臺甚至更多的機器一起用起來計算,把更多的cpu和內存利用上,來解決我們數量大和計算複雜的問題,當然這個過程中要考慮到分佈式的協同和故障處理。如果僅僅是爲了實現這個簡單的初衷,爲什麼一切會那麼複雜,我覺的自己可以寫一個更簡單的東西,它不需要過度設計,只需要看上去更酷一點,更小巧一點,功能更強一點。於是我將自己對分佈式的理解融入到這個框架中,考慮到底層實現技術的相似性,我將Hadoop,Zookeeper,MQ,分佈式緩存四大主要的分佈式計算功能合爲一個框架內,對複雜的分佈式計算應用進行了大量簡化和歸納。
  首先,對分佈式協同方面,它實現了Zookeeper所有的功能,並且做了很多改進,包括簡化Zookeeper的樹型結構,用domain/node兩層結構取代,簡化Watch回調多線程等待編程模型,用更直觀的容易保證業務邏輯完整性的內容變化事件以及狀態輪循取代,Zookeeper只能存儲信息不大於1M的內容,FourInOne超過1M的內容會以內存映射文件存儲,增強了它的存儲功能,簡化了Zookeeper的ACL權限功能,用更爲程序員熟悉rw風格取代,簡化了Zookeeper的臨時節點和序列節點等類型,取代爲在創建節點時是否指定保持心跳,心跳斷掉時節點會自動刪除。FourInOne是高可用的,沒有單點問題,可以有任意多個複本,它的複製不是定時而是基於內容變更復制,有更高的性能,FourInOne實現了領導者選舉算法(但不是Paxos),在領導者服務器宕機情況下,會自動不延時的將請求切換到備份服務器上,選舉出新的領導者進行服務,這個過程中,心跳節點仍然能保持健壯的穩定性,迅速跟新的領導者保持心跳連接。基於FourInOne可以輕鬆實現分佈式配置信息,集羣管理,故障節點檢測,分佈式鎖,以及淘寶configserver等等協同功能。
  其次, FourInOne可以提供完整的分佈式緩存功能。如果對一箇中小型的互聯網或者企業應用,僅僅利用domain/node進行k/v的存儲即可,因爲domain/node都是內存操作而且讀寫鎖分離,同時擁有複製備份,完全滿足緩存的高性能與可靠性。對於大型互聯網應用,高峯訪問量上百萬的併發讀寫吞吐量,會超出單臺服務器的承受力,FourInOne提供了fa?ade的解決方案去解決大集羣的分佈式緩存,利用硬件負載均衡路由到一組fa?ade服務器上,fa?ade可以自動爲緩存內容生成key,並根據key準確找到散落在背後的緩存集羣的具體哪臺服務器,當緩存服務器的容量到達限制時,可以自由擴容,不需要成倍擴容,因爲fa?ade的算法會登記服務器擴容時間版本,並將key智能的跟這個時間匹配,這樣在擴容後還能準確找到之前分配到的服務器。另外,基於FourInOne可以輕鬆實現web應用的session功能,只需要將生成的key寫入客戶端cookie即可。
  FourInOne對於分佈式大數據量並行計算的解決方案不同於複雜的hadoop,它不像hadoop的中間計算結果依賴於hdfs,它使用不同於map/reduce的全新設計模式解決問題。FourInOne有“包工頭”,“農民工”,“手工倉庫”的幾個核心概念。“農民工”爲一個計算節點,可以部署在多個機器,它由開發者自由實現,計算時,“農民工”到“手工倉庫”獲取輸入資源,再將計算結果放回“手工倉庫”返回給“包工頭”。“包工頭”負責承包一個複雜項目的一部分,可以理解爲一個分配任務和調度程序,它由開發者自己實現,開發者可以自由控制調度過程,比如按照“農民工”的數量將源數據切分成多少份,然後遠程分配給“農民工”節點進行計算處理,它處理完的中間結果數據不限制保存在hdfs裏,而可以自由控制保存在分佈式緩存、數據庫、分佈式文件裏。如果需要結果數據的合併,可以新建立一個“包工頭”的任務分配進行完成。多個“包工頭”之間進行責任鏈式處理。總的來說,是將大數據的複雜分佈式計算,設計爲一個鏈式的多“包工頭”環節去處理,每個環節包括利用多臺“農民工”機器進行並行計算,無論是拆分計算任務還是合併結果,都可以設計爲一個單獨的“包工頭”環節。這樣做的好處是,開發者有更大能力去深入控制並行計算的過程,去保持使用並行計算實現業務邏輯的完整性,而且對各種不同類型的並行計算場景也能靈活處理,不會因爲某些特殊場景被map/reduce的框架限制住思維,並且鏈式的每個環節也方便進行監控過程。
  FourInOne也可以當成簡單的mq來使用,將domain視爲mq隊列,每個node爲一個隊列消息,監控domain的變化事件來獲取隊列消息。也可以將domain視爲訂閱主題,將每個訂閱者註冊到domain的node上,發佈者將消息逐一更新每個node,訂閱者監控每個屬於自己的node的變化事件獲取訂閱消息,收到後刪除內容等待下一個消息。但是FourInOne不實現JMS的規範,不提供JMS的消息確認和消息過濾等特殊功能,不過開發者可以基於FourInOne自己去擴充這些功能,包括mq集羣,利用一個獨立的domain/node建立隊列或者主題的key隱射,再仿照上面分佈式緩存的智能根據key定位服務器的做法實現集羣管理。
  FourInOne整體代碼僅僅爲70k,跟Hadoop, Zookeeper, Memcache, ActiveMq等開源產品代碼上沒有任何相似性,不需要任何依賴,引用一個jar包就可以嵌入式使用,良好支持window環境,可以在一臺機器上模擬分佈式環境,更方便開發。
  開發包裏自帶了一系列傻瓜上手demo,包括分佈式計算、統一配置管理、集羣管理、分佈式鎖、分佈式緩存、MQ等方面, 每個demo均控制在少許行代碼內,但是涵蓋了fourinone主要的功能,方便大家快速理解並掌握。產品開源工作已經在提交中,屆時歡迎更多對分佈式並行計算有興趣的人員加入擔任貢獻者。
擴展閱讀:
開放分類:
並行計算HadoopMQZooKeeper分佈式緩存
發佈了12 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章