分布式的任務分發框架 Gearman

2021-09-08 17:22:28 字數 2128 閱讀 3266

官方文件: 安裝方法和示例都有,可以詳細看一下。

gearman是乙個分發任務的程式框架,可以用在各種場合,與hadoop相比,gearman更偏向於任務分發功能。它的任務分布非常簡單,簡單得可以只需要用指令碼即可完成。gearman最初用於livejournal的resize功能,由於resize需要消耗大量計算資源,因此需要排程到後端多台伺服器執行,完成任務之後返回前端再呈現到介面。

gearman可以做什麼

1,安裝方法

#安裝gearman

yuminstall

gearmand

#安裝libgearman

yuminstall libgearman-devel

#安裝gearman php擴充套件

pecl

install

gearman

#新增gearman.so到 php.ini

echo

"extension=gearman.so

" >> /etc/php.ini

沒有pecl的話裝一下

先看client.php註冊事件,client.php

<?php

//建立gearman物件

$client = new

gearmanclient();

//addserver預設是localhost,埠預設是4730,如果不是預設的話可以調整

$client ->addserver();

//$client->addserver("192.168.0.0",4730);

echo "sending job\n";

$username = "test";

$message = "message";

$data = array

( "username" => $username,

"message" => $message ,);

//註冊事件 以及 傳遞引數 , 多個引數使用json_encode轉換

// 任務可以阻塞式執行,還可以指定優先順序 ;當然,也可以非阻塞(執行不等待結果)執行

// 可以參考php gearman api文件 : donornal, dohigh, dolow,dobackground

$result = $client -> dobackground("testfunction", json_encode($data

));if ($result

) ?>

再看worker的處理,其實就是註冊事件處理函式 , worker.php

<?php

$worker = new

gearmanworker();

$worker->addserver();

//註冊事件及事件處理函式

$worker->addfunction("testfunction","handler");

//執行worker

while ($worker->work());

function handler(gearmanjob $job

) ?>

可以命令列執行 php client.php , php worker.php ,這裡啟動順序最好是先啟動worker,這樣事件可以得到及時處理;也可以先啟動client,事件會在gearman中排隊,等待worker處理;

還可以啟動多個worker,gearman會自動進行負載均衡,分配到不同的worker進行處理。

例如:通過gearman實現mysql到redis的資料同步(非同步複製)

gearman的監控:

可以使用supervisor,也可以使用gearman manager

使用supervisor監控gearman任務的例子見:

分布式任務排程框架 Elastic Job

elastic job是噹噹 開源的 個分布式排程解決 案,基於quartz 次開發的。分布式排程 在分布式環境中,任務能夠按照指定條件執行。例如 1 專案部署在多台伺服器上,其中定時任務只能有某一台主機執行,當此主機宕機其他定時任務選舉其一執行。2 分片執行 多台例項任務執行時,每個任務例項僅負責...

分布式任務 訊息佇列框架 go queue

為什麼寫這個庫 應用場景有哪些 如何使用 總結在開始自研go queue之前,針對以下我們調研目前的開源佇列方案 beanstalkd有一些特殊好用功能 支援任務priority 延時 delay 超時重發 time to run 和預留 buried 能夠很好的支援分布式的後台任務和定時任務處理。...

分布式 常見分布式框架

分布式協調系統 日誌複製系統 paxos演算法及其變體的實現,典型的有zookeeper etcd 分布式檔案系統 hdfs hadoop 分布式nosql redis hbase 訊息佇列 rabbitmq kafka,關注訊息的at least once,at most once,only on...