Fourinone2.0 提供了一個(gè) 4 合 1 分布式框架和簡(jiǎn)單易用的編程 API,實(shí)現(xiàn)對(duì)多臺(tái)計(jì)算機(jī) CPU、內(nèi)存、硬盤的統(tǒng)一利用,從而獲取到強(qiáng)大計(jì)算能力去解決復(fù)雜問題。由于多計(jì)算機(jī)物理上獨(dú)立,F(xiàn)ourinone 框架也提供完整的分布式協(xié)同和鎖以及簡(jiǎn)化 MQ 功能,用于實(shí)現(xiàn)多機(jī)的協(xié)作和通訊。
Fourinone 框架提供了一系列并行計(jì)算模式(農(nóng)民工 / 包工頭 / 職介紹 / 手工倉庫)用于利用多機(jī)多核 CPU 的計(jì)算能力;提供完整的分布式緩存和小型緩存用于利用多機(jī)內(nèi)存能力;
使提供像操作本地文件一樣操作遠(yuǎn)程文件(訪問、并行讀寫、拆分、排它、復(fù)制、解析、事務(wù)等)用于利用多機(jī)硬盤存儲(chǔ)能力;由于多計(jì)算機(jī)物理上獨(dú)立,F(xiàn)ourinone 框架也提供完整的分布式協(xié)同和鎖以及簡(jiǎn)化 MQ 功能,用于實(shí)現(xiàn)多機(jī)的協(xié)作和通訊。
Fourinone 采用 Java 開發(fā),2.0 版本整體大小 150k,就一個(gè) jar 和一個(gè)配置文件,沒有任何依賴,很方便嵌入式開發(fā)使用。
實(shí)現(xiàn)原理:
fourinone 對(duì)分布式協(xié)同的實(shí)現(xiàn), 是通過建立一個(gè) domain、node 兩層結(jié)構(gòu)的節(jié)點(diǎn)信息去完成。domain 可以是分類或者包,node 可以是具體屬性。domain 和 node 都是自己根據(jù)需求設(shè)計(jì)命名,比如可以將 domain 命名為“a.b.c...”表示一個(gè)樹型類目。
一個(gè) domain 下可以有很多個(gè) node,每個(gè) node 只指定一個(gè) domain,可以通過 domain 返回它下面所有的 node。
domain 不需要單獨(dú)建立,通常在建立 node 時(shí),如果不存在 domain 會(huì)自動(dòng)創(chuàng)建。
如果 domain 下沒有 node 了,該 domain 會(huì)自動(dòng)刪除。
如果刪除 domain,該 domain 下面 node 也都會(huì)刪除。
每個(gè) node 下可以存放一個(gè)值,可以是任意對(duì)象。
所有的節(jié)點(diǎn)信息存放在 parkserver 里,parkserver 提供協(xié)同者的功能。如下圖所示:
圖 1. 協(xié)調(diào)實(shí)現(xiàn)架構(gòu)
從上圖可以看到,其他分布式進(jìn)程可以通過 parkserver 的用戶接口:ParkLocal,對(duì)節(jié)點(diǎn)進(jìn)行增加、修改、刪除、指定心跳、指定權(quán)限等操作,并且結(jié)合 parkserver 提供同步備份、領(lǐng)導(dǎo)者選舉、過期時(shí)間設(shè)置等功能,共同來實(shí)現(xiàn)眾多分布式協(xié)同功能。
我們舉個(gè)例子,說明兩個(gè)分布式應(yīng)用完成協(xié)同功能的流程:
分布式應(yīng)用 A 通過 ParkLocal 在 ParkServer 上創(chuàng)建一個(gè) domain/node 的節(jié)點(diǎn),并且在節(jié)點(diǎn)里存放相應(yīng)的 value,這個(gè)節(jié)點(diǎn)以及它的 value 值代表分布式應(yīng)用 A 的某種協(xié)同信息,它存放在 ParkServer 上用于向分布式應(yīng)用 B 分享。
分布式應(yīng)用 B 通過 ParkLocal 操作 ParkServer,對(duì)它上面的分布式應(yīng)用 A 建立的這個(gè) domain/node 節(jié)點(diǎn)進(jìn)行監(jiān)聽,如果節(jié)點(diǎn) value 發(fā)生變化,那么分布式應(yīng)用 B 可以獲取到這個(gè) value,并進(jìn)行相應(yīng)的業(yè)務(wù)處理,這樣便將各自獨(dú)立的分布式應(yīng)用 A 和 B 協(xié)同了起來。
由于 ParkServer 保存著用于協(xié)同的節(jié)點(diǎn)和信息,為了防止 ParkServer 宕機(jī)導(dǎo)致整體故障,ParkServer 配置為一主多備的關(guān)系,互相同步信息,在故障時(shí)可以進(jìn)行領(lǐng)導(dǎo)者選舉,切換到備用 ParkServer 上繼續(xù)提供協(xié)同服務(wù)。