PHP中文网2017-04-18 10:34:05
java的話,建議使用quartz,
1.quartz做各類定時任務很方便
2.它是支援集群的,原理是透過資料庫表來保證同一個任務只在一個服務上執行。
ringa_lee2017-04-18 10:34:05
假設你最簡單的方式使用quartz
,那麼你在代碼中就要修改了,在job邏輯中加入獲取鎖的操作,這個鎖可以做到數據庫,具體方法是:插入一條有業務意義主鍵記錄,執行時,叢集中相同的job只會有一條插入成功,這就代表它獲得了鎖,可以執行,否則退出此次job,不執行。
PHP中文网2017-04-18 10:34:05
Configure Clustering with JDBC-JobStore
Quartz’s clustering features bring both high availability and scalability to your scheduler via fail-over and load balancing functionality.
quartz 本身就是支援集群,容錯,負載平衡的。不需要改任何程式碼即可實現。
ringa_lee2017-04-18 10:34:05
可以做一個中間件系統,專門管理定時任務的觸發和訊息的訂閱和消費,到了時間觸發時就發一個訊息出來,由集群系統來訂閱這條訊息。訊息可以隨機投遞到叢集中任何一台機器。
阿神2017-04-18 10:34:05
使用zookeeper,redis等手動儲存定時任務執行狀態等信息,保證只執行一次。
將定時任務抽取到一個單獨的專案中(單機運作),但是任務具體內容透過遠端呼叫(dubbo,mq等)呼叫具體的分散式服務。也就是定時任務只是單獨的用於任務觸發,具體任務還是分散式執行的。
使用各種分佈任務調度系統,如Uncode-Schedule