FlowJob任務(wù)調(diào)度框架
FlowJob任務(wù)調(diào)度框架,支持延時(shí)、定時(shí)、corn任務(wù);任務(wù)分發(fā)支持隨機(jī)、輪詢、一致性哈希、廣播、故障轉(zhuǎn)移、MapReduce等模式;支持任務(wù)編排,DAG工作流,支持在工作流程中進(jìn)行規(guī)則判斷。
flowjob主要用于搭建統(tǒng)一的任務(wù)調(diào)度平臺(tái),方便各個(gè)業(yè)務(wù)方進(jìn)行接入使用。 項(xiàng)目在設(shè)計(jì)的時(shí)候,考慮了擴(kuò)展性、穩(wěn)定性、伸縮性等相關(guān)問題,可以作為公司的任務(wù)調(diào)度中間件被使用。
功能介紹
flowjob主要分為以下幾個(gè)部分:
- Broker:中心節(jié)點(diǎn),負(fù)責(zé)任務(wù)的調(diào)度。
- Worker:工作節(jié)點(diǎn),主要負(fù)責(zé)任務(wù)的具體執(zhí)行。
- Console:通過Broker提供的Api,進(jìn)行任務(wù)創(chuàng)建/更新等一些管控操作。
- Registry:注冊(cè)中心,目前使用DB做為注冊(cè)中心。提供了對(duì)應(yīng)接口,可以基于其它組件如zk、nacos等進(jìn)行靈活的封裝。
- Datasource:數(shù)據(jù)庫用于持久化運(yùn)行數(shù)據(jù)
調(diào)度類型
- 固定速度:作業(yè)創(chuàng)建后,每次調(diào)度下發(fā)后,間隔固定時(shí)間長(zhǎng)度后,再次觸發(fā)作業(yè)調(diào)度。
- 固定延遲:作業(yè)創(chuàng)建后,每次作業(yè)下發(fā)執(zhí)行完成(成功或失敗)后,間隔固定時(shí)間長(zhǎng)度后,再次觸發(fā)作業(yè)調(diào)度。
- CRON:通過CRON表達(dá)式指定作業(yè)觸發(fā)調(diào)度的時(shí)間點(diǎn)。
負(fù)載策略
- 隨機(jī):將作業(yè)隨機(jī)下發(fā)給某一個(gè)worker執(zhí)行。
- 輪詢:將任務(wù)逐個(gè)分配給worker。
- 最不經(jīng)常使用:將作業(yè)下發(fā)給一個(gè)時(shí)間窗口內(nèi),接收作業(yè)最少的worker。
- 最近最少使用:將作業(yè)下發(fā)給一個(gè)時(shí)間窗口內(nèi),最長(zhǎng)時(shí)間沒有接受worker的worker。
- 一致性hash:同樣參數(shù)的作業(yè)將始終下發(fā)給同一臺(tái)機(jī)器。
- 指定節(jié)點(diǎn):讓作業(yè)指定下發(fā)到某個(gè)worker執(zhí)行。
節(jié)點(diǎn)過濾方式
- 執(zhí)行器:任務(wù)只會(huì)下發(fā)給包含任務(wù)對(duì)應(yīng)執(zhí)行器的worker。
- 標(biāo)簽:任務(wù)只會(huì)下發(fā)給包含指定標(biāo)簽的worker。
- 容量:基于worker的任務(wù)隊(duì)列/CPU/內(nèi)存使用情況過濾(TODO)
任務(wù)觸發(fā)方式
- API:通過指定api觸發(fā)任務(wù)執(zhí)行。
- 調(diào)度:Broker自動(dòng)組裝數(shù)據(jù),調(diào)度對(duì)應(yīng)的任務(wù)。
任務(wù)類型
任務(wù)可以為單任務(wù)/工作流。單任務(wù)可以理解為只有一個(gè)節(jié)點(diǎn)的工作流任務(wù)。
- 普通:對(duì)應(yīng)某個(gè)執(zhí)行器,執(zhí)行結(jié)束任務(wù)結(jié)束。
- 廣播:在下發(fā)的時(shí)間點(diǎn),對(duì)每個(gè)可下發(fā)的節(jié)點(diǎn)下發(fā)任務(wù),所以子任務(wù)執(zhí)行完成當(dāng)前任務(wù)才執(zhí)行完成。
- Map:分為split和map兩個(gè)步驟。split的時(shí)候進(jìn)行任務(wù)拆分,map則對(duì)每個(gè)拆分任務(wù)進(jìn)行執(zhí)行。
- MapReduce:相比于Map多了Reduce過程,可以對(duì)所有Map任務(wù)的執(zhí)行結(jié)果進(jìn)行一個(gè)匯總。
使用幫助
Server部署
環(huán)境要求
- JDK8
- Mysql
Step1: 數(shù)據(jù)庫配置
目前使用flywaydb動(dòng)態(tài)地進(jìn)行數(shù)據(jù)初始化操作
| 配置項(xiàng) | 說明 |
|---|---|
| spring.datasource.url | 連接地址 |
| spring.datasource.username | 賬號(hào) |
| spring.datasource.password | 密碼 |
Step2: 服務(wù)打包
根據(jù)需要修改配置
| 配置項(xiàng) | 說明 |
|---|---|
| flowjob.broker.name | 節(jié)點(diǎn)名稱,保持全局唯一。默認(rèn)不配置自動(dòng)生成即可 |
| flowjob.broker.host | 提供給worker的服務(wù)的 host。可以是域名或 IP 地址,如不填寫則自動(dòng)發(fā)現(xiàn)本機(jī)非 127.0.0.1 的地址。多網(wǎng)卡場(chǎng)景下,建議顯式配置 host。 |
| flowjob.broker.port | 提供給worker的服務(wù) port 如果未指定此配置,則嘗試使用 配置;如server.port配置;如{server.port} 配置也不存在,則使用 8080, |
| flowjob.broker.scheme | RPC 通信協(xié)議類型。默認(rèn)為 http。于worker保持一致 |
| flowjob.broker.heartbeat-interval | broker心跳時(shí)間間隔,毫秒。默認(rèn)2000 |
| flowjob.broker.heartbeat-timeout | broker心跳超時(shí)時(shí)間,毫秒。默認(rèn)5000 |
| flowjob.broker.worker.heartbeat-timeout | worker心跳超時(shí)時(shí)間,毫秒。默認(rèn)5000 |
項(xiàng)目根目錄下,執(zhí)行如下命令打包編譯,通過-P參數(shù)指定環(huán)境,如開發(fā)環(huán)境為-P dev
mvn clean package -Dmaven.test.skip=true -P dev
Worker部署
對(duì)于需要使用worker的Web應(yīng)用(宿主應(yīng)用),可以參考Demo。
Step1: 添加依賴
對(duì)于Maven項(xiàng)目
<dependency>
<groupId>io.github.limbo-world</groupId>
<artifactId>flowjob-worker-spring-boot-starter</artifactId>
<version>1.0.1</version>
</dependency>
Step2: 修改配置
| 配置項(xiàng) | 說明 |
|---|---|
| flowjob.worker.name | 節(jié)點(diǎn)名稱,保持全局唯一。默認(rèn)不配置自動(dòng)生成即可 |
| flowjob.worker.scheme | RPC 通信協(xié)議類型。默認(rèn)為 http。于broker保持一致 |
| flowjob.worker.host | RPC host。可以是域名或 IP 地址,如不填寫則自動(dòng)發(fā)現(xiàn)本機(jī)非 127.0.0.1 的地址。多網(wǎng)卡場(chǎng)景下,建議顯式配置 host。 |
| flowjob.worker.port | RPC port 如果未指定此配置,則嘗試使用 配置;如??????.????配置;如{server.port} 配置也不存在,則使用 8080, |
| flowjob.worker.brokers | Broker節(jié)點(diǎn)地址,可配置多個(gè),參考DEMO中的配置 |
| flowjob.worker.heartbeat | Worker 向 Broker 發(fā)送心跳請(qǐng)求的間隔,默認(rèn) 2 秒。 |
| flowjob.worker.tags | 標(biāo)簽,k=v形式 |
參與貢獻(xiàn)
如果你對(duì)本項(xiàng)目有任何建議或想加入我們的,可以通過下面方式:,歡迎提交 issues 進(jìn)行指正。
- 報(bào)告 issue: github issues
- 提交PR:github PR
- 加入我們:[email protected]
評(píng)論
圖片
表情
