如何構建延遲任務排程系統(三) 架構設計

2021-09-24 01:42:08 字數 1823 閱讀 4329

系統功能

延遲任務排程系統提供統一的任務操作介面給業務方呼叫,業務方可以提交任務,取消任務,查詢任務狀態。

排程服務屬於底層應用,因此採用mq的方式解耦,所有觸發的延遲任務都通過訊息的方式傳送給業務消費方,

由消費方控制流量,業務冪等。同時也保證了任務的重試機制。

採用技術:elastic-job + db + delayqueue + mq

業務呼叫方

延遲任務節點

zookeeper

elastic-job

資料分片

任務載入作業

任務在記憶體中的儲存和排程

資料庫

延遲任務狀態

init(1, "初始化"),

load(2, "任務已載入"),

sending(3, "訊息已發放"),

success(4, "業務處理成功"),

fail(5, "業務處理失敗"),

cancel(6, "業務取消");

`delay_task_id` bigint(20) not null comment '任務id',

`sharding_id` tinyint(4) not null comment '分片id',

`topic` varchar(100) not null comment '訊息topic',

`tag` varchar(100) not null comment '訊息tag',

`params` varchar(1000) not null comment '引數',

`trigger_time` bigint(19) not null comment '執行時間',

`status` tinyint(4) not null comment '任務狀態:1.初始化 2.任務已載入 3.訊息已發放 4.業務處理成功 5.業務處理失敗',

`extend_field` varchar(100) not null comment '擴充套件屬性',

`create_time` bigint(20) not null comment '建立時間',

`op_time` bigint(20) not null comment '最近一次更新時間',

`last_ver` int(10) not null comment '版本號',

`is_valid` tinyint(2) not null default '1' comment '是否有效 0-失效 1-有效',

primary key (`delay_task_id`)

) engine=innodb default charset=utf8mb4 comment='延遲任務表'

資料庫設計就一張表delay_task,用來儲存延遲任務的資料,包括業務方要消費的訊息的tag,topic,以及訊息體內容

原始碼請移步:

延遲任務排程系統 技術選型與設計(上篇)

redis實現 delayqueue實現 時間輪實現 之前的設計 db delayqueue zookeeper 另一種方案 db delayqueue zookeeper mq 下面所討論技術方案的前提是精確觸發,所以我們不討論目前業界的一些分布式排程系統如 elastic job,xxl job...

延遲任務排程系統 技術選型與設計(上篇)

redis實現 delayqueue實現 時間輪實現 之前的設計 db delayqueue zookeeper 另一種方案 db delayqueue zookeeper mq 下面所討論技術方案的前提是精確觸發,所以我們不討論目前業界的一些分布式排程系統如 elastic job,xxl job...

任務排程系統元件

前言 xxljob 和quzrts 比較 排程任務處理 xxljob quartz 的常見集群方案如下,通過在資料庫中配置定時器資訊,以資料庫悲觀鎖的方式達到同乙個任務始終只有乙個節點在執行 由個人開源的乙個輕量級分布式任務排程框架 主要分為 排程中心和執行器兩部分 排程中心在啟動初始化的時候,會預...