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


一、背景

服務有定時任務,當服務部署到多個節點時,每個節點在同一個時間點都會執行相同的定時任務,需要做的是,讓同一個時間點,每一個定時任務只在一個節點上執行。

二、 解決方案思路

  • 單獨設置任務調度服務
  • 使用Redis實現
  • 使用XXL-JOB實現
  • 使用Elastic-Job框架實現
  • 使用LTS框架實現

三、方案

3.1 方案一:單獨設置任務調度服務

任務調度服務部署在單結點,定時任務以Http請求的方式去向網關調用任務請求,網關將請求分發到集群中的某一個節點,某一個節點執行任務。

3.2 方案二:使用Redis實現

每個定時任務都在Redis中設置一個Key-Value,Key為自定義的每個定時任務的名字(如task1:redis:lock),Value為服務器Ip,同時設置合適的過期時間(例如設置為5min)。

每個節點在執行時,都要進行以下操作:

  • 1.是否存在Key,若不存在,則設置Key-Value,Value為當前節點的IP
  • 2.若存在Key,則比較Value是否是當前Ip,若是則繼續執行定時任務,若不是,則不往下執行。

3.3 方案三:開源分布式框架(推薦)

1、使用XXL-JOB實現

分布式任務調度平台XXL-JOB 官網文檔

參考文檔

[1]: XXL-JOB 官網文檔地址
[2]: Elastic-Job
[3]: LTS


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM