成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么是分布式任務調度?怎樣實現任務調度?

開發 前端
通常任務調度的程序是集成在應用中的,比如:優惠卷服務中包括了定時發放優惠卷的的調度程序,結算服務中包括了定期生成報表的任務調度程序,由于采用分布式架構,一個服務往往會部署多個冗余實例來運行我們的業務,在這種分布式系統環境下運行任務調度,我們稱之為分布式任務調度。

通常任務調度的程序是集成在應用中的,比如:優惠卷服務中包括了定時發放優惠卷的的調度程序,結算服務中包括了定期生成報表的任務調度程序,由于采用分布式架構,一個服務往往會部署多個冗余實例來運行我們的業務,在這種分布式系統環境下運行任務調度,我們稱之為分布式任務調度,如下圖:

不管是任務調度程序集成在應用程序中,還是單獨構建的任務調度系統,如果采用分布式調度任務的方式就相當于將任務調度程序分布式構建,這樣就可以具有分布式系統的特點,并且提高任務的調度處理能力:

1、并行任務調度

并行任務調度實現靠多線程,如果有大量任務需要調度,此時光靠多線程就會有瓶頸了,因為一臺計算機CPU的處理能力是有限的。

如果將任務調度程序分布式部署,每個結點還可以部署為集群,這樣就可以讓多臺計算機共同去完成任務調度,我們可以將任務分割為若干個分片,由不同的實例并行執行,來提高任務調度的處理效率。

2、高可用

若某一個實例宕機,不影響其他實例來執行任務。

3、彈性擴容

當集群中增加實例就可以提高并執行任務的處理效率。

4、任務管理與監測

對系統中存在的所有定時任務進行統一的管理及監測。讓開發人員及運維人員能夠時刻了解任務執行情況,從而做出快速的應急處理響應。

5、避免任務重復執行

當任務調度以集群方式部署,同一個任務調度可能會執行多次,比如在上面提到的電商系統中到點發優惠券的例子,就會發放多次優惠券,對公司造成很多損失,所以我們需要控制相同的任務在多個運行實例上只執行一次。

public static void main(String[] args) {    
    //任務執行間隔時間
    final long timeInterval = 1000;
    Runnable runnable = new Runnable() {
        public void run() {
            while (true) {
                //TODO:something
                try {
                    Thread.sleep(timeInterval);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    };
    Thread thread = new Thread(runnable);
    thread.start();
}

上面的代碼實現了按一定的間隔時間執行任務調度的功能。

Jdk也為我們提供了相關支持,如Timer、ScheduledExecutor,下邊我們了解下。

Timer方式實現:

public static void main(String[] args){  
    Timer timer = new Timer();  
    timer.schedule(new TimerTask(){
        @Override  
        public void run() {  
           //TODO:something
        }  
    }, 1000, 2000);  //1秒后開始調度,每2秒執行一次
}

Timer 的優點在于簡單易用,每個Timer對應一個線程,因此可以同時啟動多個Timer并行執行多個任務,同一個Timer中的任務是串行執行。

ScheduledExecutor方式實現:

public static void main(String [] agrs){
    ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
    service.scheduleAtFixedRate(
            new Runnable() {
                @Override
                public void run() {
                    //TODO:something
                    System.out.println("todo something");
                }
            }, 1,
            2, TimeUnit.SECONDS);
}

Java 5 推出了基于線程池設計的 ScheduledExecutor,其設計思想是,每一個被調度的任務都會由線程池中一個線程去執行,因此任務是并發執行的,相互之間不會受到干擾。

Timer 和 ScheduledExecutor 都僅能提供基于開始時間與重復間隔的任務調度,不能勝任更加復雜的調度需求。比如,設置每月第一天凌晨1點執行任務、復雜調度任務的管理、任務間傳遞數據等等。

第三方Quartz方式實現,項目地址:https://github.com/quartz-scheduler/quartz

Quartz 是一個功能強大的任務調度框架,它可以滿足更多更復雜的調度需求,Quartz 設計的核心類包括 Scheduler, Job 以及 Trigger。其中,Job 負責定義需要執行的任務,Trigger 負責設置調度策略,Scheduler 將二者組裝在一起,并觸發任務開始執行。Quartz支持簡單的按時間間隔調度、還支持按日歷調度方式,通過設置CronTrigger表達式(包括:秒、分、時、日、月、周、年)進行任務調度。

下邊是一個例子代碼:

public static void main(String [] agrs) throws SchedulerException {
    //創建一個Scheduler
    SchedulerFactory schedulerFactory = new StdSchedulerFactory();
    Scheduler scheduler = schedulerFactory.getScheduler();
    //創建JobDetail
    JobBuilder jobDetailBuilder = JobBuilder.newJob(MyJob.class);
    jobDetailBuilder.withIdentity("jobName","jobGroupName");
    JobDetail jobDetail = jobDetailBuilder.build();
    //創建觸發的CronTrigger 支持按日歷調度
        CronTrigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("triggerName", "triggerGroupName")
                .startNow()
                .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
                .build();
    scheduler.scheduleJob(jobDetail,trigger);
    scheduler.start();
}

public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext){
        System.out.println("todo something");
    }
}

通過以上內容我們學習了什么是任務調度,任務調度所解決的問題,以及任務調度的多種實現方式。

責任編輯:華軒 來源: 今日頭條
相關推薦

2020-09-29 19:20:05

鴻蒙

2023-06-26 00:14:28

Openjob分布式任務

2022-06-20 15:32:55

Stage模型分布式開發

2025-01-06 08:53:37

2020-11-06 12:12:35

HarmonyOS

2019-11-15 10:16:27

分布式任務框架

2022-06-13 07:43:21

分布式Spring

2021-11-10 16:10:18

鴻蒙HarmonyOS應用

2024-09-03 08:14:34

2024-08-07 08:15:47

2024-05-23 10:19:57

2024-09-23 04:00:00

java架構分布式系統

2021-11-29 08:48:00

K8S KubernetesAirflow

2025-05-13 03:22:00

2021-05-31 20:24:16

鴻蒙HarmonyOS應用

2023-11-07 07:56:40

2021-08-16 09:55:41

鴻蒙HarmonyOS應用

2022-01-27 08:44:58

調度系統開源

2023-12-26 07:44:00

Spring定時調度

2022-08-19 18:03:12

Scheduler
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品一区二区三区在线观看 | 亚州一区二区三区 | 成人免费视频网 | 国产午夜精品久久久 | 国产精品亚洲综合 | 91综合网| 国产视频福利在线观看 | 国产伦精品一区二区三区精品视频 | 日本成年免费网站 | 国内精品视频一区二区三区 | 国产 日韩 欧美 中文 在线播放 | av性色全交蜜桃成熟时 | 国产精品久久久久久久久免费樱桃 | 久久久久久久久淑女av国产精品 | 日本中文字幕日韩精品免费 | 毛片久久久 | 日韩欧美手机在线 | 国产精品久久久久久久三级 | 成人福利在线视频 | 男人天堂社区 | 国产成人精品久久二区二区91 | 欧美精品第三页 | 在线精品国产 | 99在线播放| 免费久久网 | 99精品国产在热久久 | 欧美在线免费 | 国产乱码精品一区二区三区忘忧草 | 亚洲国产成人av好男人在线观看 | av片在线观看 | 视频一区二区在线观看 | 91色视频在线观看 | 国产成人小视频 | 91原创视频| 自拍中文字幕 | 亚洲欧美一区在线 | 91偷拍精品一区二区三区 | av一二三四| 欧美电影免费观看高清 | 97在线观视频免费观看 | 91精品国产乱码久久久久久久久 |