Fourinone四合一分佈式計算框架總體介紹

FourInOne(中文名字「四不像」)是一個四合一分佈式計算框架,在寫這個框架以前,我對分佈式計算進行了長時間的思考,也看了老外寫的其餘開源框架,當咱們把複雜的hadoop看成一門學科學習時,彷佛忘記了咱們想解決問題的初衷:咱們僅僅是想寫個程序把幾臺甚至更多的機器一塊兒用起來計算,把更多的cpu和內存利用上,來解決咱們數量大和計算複雜的問題,固然這個過程當中要考慮到分佈式的協同和故障處理。若是僅僅是爲了實現這個簡單的初衷,爲何一切會那麼複雜,我覺的本身能夠寫一個更簡單的東西,它不須要過分設計,只須要看上去更酷一點,更小巧一點,功能更強一點。因而我將本身對分佈式的理解融入到這個框架中,考慮到底層實現技術的類似性,我將Hadoop,Zookeeper,MQ,分佈式緩存四大主要的分佈式計算功能合爲一個框架內,對複雜的分佈式計算應用進行了大量簡化和概括。html

首先,對分佈式協同方面,它實現了Zookeeper全部的功能,而且作了不少改進,包括簡化Zookeeper的樹型結構,用domain/node兩層結構取代,簡化Watch回調多線程等待編程模型,用更直觀的容易保證業務邏輯完整性的內容變化事件以及狀態輪循取代,Zookeeper只能存儲信息不大於1M的內容,FourInOne超過1M的內容會之內存隱射文件存儲,加強了它的存儲功能,簡化了Zookeeper的ACL權限功能,用更爲程序員熟悉rw風格取代,簡化了Zookeeper的臨時節點和序列節點等類型,取代爲在建立節點時是否指定保持心跳,心跳斷掉時節點會自動刪除。FourInOne是高可用的,沒有單點問題,能夠有任意多個複本,它的複製不是定時而是基於內容變動複製,有更高的性能,FourInOne實現了領導者選舉算法(但不是Paxos),在領導者服務器宕機狀況下,會自動不延時的將請求切換到備份服務器上,選舉出新的領導者進行服務,這個過程當中,心跳節點仍然能保持健壯的穩定性,迅速跟新的領導者保持心跳鏈接。基於FourInOne能夠輕鬆實現分佈式配置信息,集羣管理,故障節點檢測,分佈式鎖,以及淘寶configserver等等協同功能。node

其次, 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的框架限制住思惟,而且鏈式的每一個環節也方便進行監控過程。web

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等方面幫助掌握fourinone的所有功能編程

郵箱:fourinone@yeah.net
qq羣:1313859設計模式

下載地址:
http://www.skycn.com/soft/68321.html緩存

相關文章
相關標籤/搜索