# JGroups概念 在 JGroups 中,集群(cluster)是一個由多個節點組成的邏輯實體,節點可以通過一個共用的集群名稱來進行連接和通信。這個集群名稱可以在配置中指定或在運行時動態創建。 JGroups 提供了多種方式來創建集群,並使節點能夠加入到相同的集群中。下麵是一些常見的方式: 1 ...
什麼是 Openjob?
Openjob 基於Akka架構的新一代分散式任務調度框架。支持多種定時任務、延時任務、工作流設計,採用無中心化架構,底層使用一致性分片演算法,支持無限水平擴容。
特性
Openjob 除了支持基本的任務調度,還提供延時任務、分散式計算以及工作流。
定時任務
- 普通定時任務,支持Unix Crontab 表達式。
- 秒級定時任務,適用於對實時性要求比較高的業務,例如執行間隔為3秒的定時調度任務。
- 固定頻率任務,Crontab 必須被 60 整除,不支持其它數量級時間間隔的任務,一般用於定期輪詢場景。
延時任務
- 基於 Redis 實現高性能延時任務,一體化解決定時任務和延時任務,同時提供豐富的報表與統計。
分散式計算
-
單機,隨機選擇一臺機器完成任務執行。
-
廣播,應用所有機器同時執行且等待全部結束。
-
Map模型,類似於 Hadoop 的Map。只需簡單實現一個Map方法,就可以將海量數據分佈到多台機器上執行。
-
MapReduce模型,MapReduce模型是Map模型的擴展。所有子任務執行完成後執行Reduce方法,可以在Reduce方法中處理任務運行結果和數據。
-
靜態分片,類似Elastic-Job模型,控制台配置分片數,可以按照分片分配到不同的客戶端執行,支持多語言版本。
執行器
- 普通執行器,普通函數或類的方式執行任務
- HTTP,定時請求固定的地址。
- Shell,定時執行 shell 腳本
可視化運維
- 任務儀錶盤,豐富的任務統計和報表。
- 任務歷史執行記錄,任務執行歷史追溯。
- 任務運行日誌,完善的任務日誌存儲(H2/Mysql/Elasticsearch)
- 任務運行堆棧,詳細記錄任務運行堆棧信息。
報警與許可權
- 提供任務事件監控報警,以及詳細的報警歷史,同時支持企業微信、飛書、webhook觸達通知。
- 命名空間方式設計,支持按鈕級別許可權管理,輕鬆應對複雜的項目管理。
多語言
- Java 及其衍生框架,原生支持。
- Go 支持 go mod 方式安裝依賴,以及常見框架整合(Gin)。
- PHP 支持通過 Golang agent 方式執行 PHP 任務。基於 Swoole 衍生框架(Swoft),支持 Composer 安裝依賴直接使用。
- Python 支持通過 Golang agent,方式執行 Python 任務。
適用場景
Openjob 適用於業務有一定的定時任務需求,非常適用於定時任務與延時任務一體化解決場景,比如每天凌晨數據清理、生成數據報表。同時適用於輕量級計算,可以使用 Map/MapReduce 實現分散式數據計算。對於複雜的任務流或任務編排場景可以使用可視化工作流,輕鬆解決。
開源對比
項目 | Quartz | Elastic-Job | XXL-JOB | Openjob |
---|---|---|---|---|
定時調度 | Cron | Cron | Cron | * 定時任務 * 秒級任務 * 一次性任務 * 固定頻率 |
延時任務 | 不支持 | 不支持 | 不支持 | 基於 Redis 實現分散式高性能延時任務,實現定時與延時一體化 |
任務編排 | 不支持 | 不支持 | 不支持 | 通過圖形化編排任務(workflow) |
分散式計算 | 不支持 | 靜態分片 | 廣播 | * 廣播 * Map/MapReduce * 多語言靜態分片 |
多語言 | Java | * Java * 腳本任務 |
* Java * 腳本任務 |
* Java * Go(Gin、beego) * PHP(Swoft) * Python(Agent) * 腳本任務 * HTTP任務 |
可視化 | 無 | 弱 | * 歷史記錄 * 運行日誌(不支持存儲) * 監控大盤 |
* 歷史記錄 * 運行日誌(支持 H2/Mysql/Elasticsearch) * 監控大盤 * 操作記錄 * 查看日誌堆棧 |
可運維 | 無 | 啟用、禁用任務 | * 啟用、禁用任務 * 手動運行任務 * 停止任務 |
* 啟用、禁用任務 * 手動運行任務 * 停止任務 |
報警監控 | 無 | 郵件 | 郵件 | * 郵件 * webhook * 企微 * 飛書 |
性能 | 每次調度通過DB搶鎖,對DB壓力大 | ZooKeeper是性能瓶頸 | 由Master節點調度,Master節點壓力大。 | 任務採用分片演算法,每個節點都可以調度,無性能瓶頸,支持無限水平擴展,支持海量任務調度。 |
更多內容
- 官網: https://openjob.io
- Github: https://github.com/open-job/openjob
- 線上體驗: https://demo.openjob.io
- QQ交流群: 849015265