分布式定時任務秒級排程解決方案

2021-10-04 08:59:18 字數 1457 閱讀 6302

基於排程平台已存在的基本功能,在業務系統使用排程表、快取等方案,解決資料併發、實時性等問題。

1.業務系統使用排程表控制併發,排程平台會到排程表取需要執行的任務,取到任務之後更新任務表該條任務的狀態,防止任務併發執行,處理完成之後將狀態更新到處理狀態。

2.任務執行不跳出,對於實時性要求較高的任務,等待指定時間之後繼續取任務執行,不返回任務排程平台,做到準實時處理。

3.減少排程平台強依賴,排程平台只配置觸發url,沒有job執行必須依賴的引數,配置簡單,排程平台正常會配置乙個任務組(多個任務),某乙個或者幾個任務由於網路、系統等原因導致假死、呼叫異常等,其他排程能正常處理,不影響業務。

排程平台介紹:對各業務系統中的定時任務集中進行管理和排程

。所有任務、觸發規則統一在排程控制台定義、管理、刪除;

集中解決了集群環境下任務併發執行的控制;對

任務排程執**況的監控和異常簡訊告警、重試機制;提供跨業務系統的後繼任務排程

。任務排程表的目的是存放要執行的任務組,有執行狀態、分庫、分表等,每次排程執行前要先更新執行狀態,避免併發,排程平台也有排程併發的控制,但是由於網路、發布等原因,無法精確判斷業務是否實際執行,需要在業務系統控制。

欄位名描述

job任務組名稱

排程的任務組名,排程平台發起排程請求要傳改名稱,然後從該錶獲取要處理的分庫、分表

執行狀態

0:待處理,1:處理中

更新時間

存放執行狀態變更時間

待處理表名

排程任務要掃瞄的表名稱,用於備註,任務框架主要使用分庫分表

分庫號待處理表或者業務表資料量很大,要拆分到多個庫多張分表,用於提高查詢效能,例:1,3,5;就代表要處理1分庫、3分庫、5分庫

分表號例:0,5,10;代表要處理0分表、5分表、10分表

排程平台的排程任務名

排程平台每次排程,排程任務名(存redis)

排程應用ip

存本次排程的執行應用ip,用於分析問題(存redis)

存在的問題:頻繁查詢db,使用redis優化

job在處理任務時,需要載入任務到任務佇列中,但每次都需要查庫,不走快取,查詢次數也相當頻繁,對資料庫的效能有一定的影響。

將秒級job進行優化,原本秒級job每次載入完redis待處理佇列,處理完以後再次載入每次都會去查資料庫。優化過後會將待處理的job任務載入到redis中,每次讀取redis,並修改redis中的處理狀態,不再去運算元據庫。

直接看圖,已很詳細。

解決方案 分布式定時任務解決方案

服務有定時任務,當服務部署到多個節點時,每個節點在同乙個時間點都會執行相同的定時任務,需要做的是,讓同乙個時間點,每乙個定時任務只在乙個節點上執行。3.1 方案一 單獨設定任務排程服務 任務排程服務部署在單結點,定時任務以http請求的方式去向閘道器呼叫任務請求,閘道器將請求分發到集群中的某乙個節點...

分布式定時任務

在做springboot專案的時候,需要定時做對賬任務。但因為專案是集群部署,就存在多個pod例項的定時任務同時執行,存在重複性。怎麼保證集群中不重複地完成定時任務?下面給出本人總結的方案。對賬任務表 merchant idname is done 是否對賬,0沒有對賬 1商家102 商家20 3商...

redis解決分布式定時任務問題

場景分析 多伺服器針對於定時任務帶來的問題,保證任務只在乙個伺服器上在執行。解決方案1 redis bean public defaultredisscript redisscript scheduled cron 40 public void testscheduled else catch in...