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

1、背景

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

2、 解決方案思路

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

3、方案

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

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

3.2 方案二:使用Redis實現

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

每一個節點在執行時,都要進行如下操做:服務器

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

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

一、使用XXL-JOB實現框架

分佈式任務調度平臺XXL-JOB 官網文檔分佈式

參考文檔

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

相關文章
相關標籤/搜索