日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
什么是分布式任務(wù)調(diào)度?怎樣實(shí)現(xiàn)任務(wù)調(diào)度?

通常任務(wù)調(diào)度的程序是集成在應(yīng)用中的,比如:優(yōu)惠卷服務(wù)中包括了定時(shí)發(fā)放優(yōu)惠卷的的調(diào)度程序,結(jié)算服務(wù)中包括了定期生成報(bào)表的任務(wù)調(diào)度程序,由于采用分布式架構(gòu),一個(gè)服務(wù)往往會(huì)部署多個(gè)冗余實(shí)例來(lái)運(yùn)行我們的業(yè)務(wù),在這種分布式系統(tǒng)環(huán)境下運(yùn)行任務(wù)調(diào)度,我們稱之為分布式任務(wù)調(diào)度,如下圖:

10年積累的網(wǎng)站制作、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有榆林免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

不管是任務(wù)調(diào)度程序集成在應(yīng)用程序中,還是單獨(dú)構(gòu)建的任務(wù)調(diào)度系統(tǒng),如果采用分布式調(diào)度任務(wù)的方式就相當(dāng)于將任務(wù)調(diào)度程序分布式構(gòu)建,這樣就可以具有分布式系統(tǒng)的特點(diǎn),并且提高任務(wù)的調(diào)度處理能力:

1、并行任務(wù)調(diào)度

并行任務(wù)調(diào)度實(shí)現(xiàn)靠多線程,如果有大量任務(wù)需要調(diào)度,此時(shí)光靠多線程就會(huì)有瓶頸了,因?yàn)橐慌_(tái)計(jì)算機(jī)CPU的處理能力是有限的。

如果將任務(wù)調(diào)度程序分布式部署,每個(gè)結(jié)點(diǎn)還可以部署為集群,這樣就可以讓多臺(tái)計(jì)算機(jī)共同去完成任務(wù)調(diào)度,我們可以將任務(wù)分割為若干個(gè)分片,由不同的實(shí)例并行執(zhí)行,來(lái)提高任務(wù)調(diào)度的處理效率。

2、高可用

若某一個(gè)實(shí)例宕機(jī),不影響其他實(shí)例來(lái)執(zhí)行任務(wù)。

3、彈性擴(kuò)容

當(dāng)集群中增加實(shí)例就可以提高并執(zhí)行任務(wù)的處理效率。

4、任務(wù)管理與監(jiān)測(cè)

對(duì)系統(tǒng)中存在的所有定時(shí)任務(wù)進(jìn)行統(tǒng)一的管理及監(jiān)測(cè)。讓開發(fā)人員及運(yùn)維人員能夠時(shí)刻了解任務(wù)執(zhí)行情況,從而做出快速的應(yīng)急處理響應(yīng)。

5、避免任務(wù)重復(fù)執(zhí)行

當(dāng)任務(wù)調(diào)度以集群方式部署,同一個(gè)任務(wù)調(diào)度可能會(huì)執(zhí)行多次,比如在上面提到的電商系統(tǒng)中到點(diǎn)發(fā)優(yōu)惠券的例子,就會(huì)發(fā)放多次優(yōu)惠券,對(duì)公司造成很多損失,所以我們需要控制相同的任務(wù)在多個(gè)運(yùn)行實(shí)例上只執(zhí)行一次。

public static void main(String[] args) {    
    //任務(wù)執(zhí)行間隔時(shí)間
    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();
}

上面的代碼實(shí)現(xiàn)了按一定的間隔時(shí)間執(zhí)行任務(wù)調(diào)度的功能。

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

Timer方式實(shí)現(xiàn):

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

Timer 的優(yōu)點(diǎn)在于簡(jiǎn)單易用,每個(gè)Timer對(duì)應(yīng)一個(gè)線程,因此可以同時(shí)啟動(dòng)多個(gè)Timer并行執(zhí)行多個(gè)任務(wù),同一個(gè)Timer中的任務(wù)是串行執(zhí)行。

ScheduledExecutor方式實(shí)現(xiàn):

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 推出了基于線程池設(shè)計(jì)的 ScheduledExecutor,其設(shè)計(jì)思想是,每一個(gè)被調(diào)度的任務(wù)都會(huì)由線程池中一個(gè)線程去執(zhí)行,因此任務(wù)是并發(fā)執(zhí)行的,相互之間不會(huì)受到干擾。

Timer 和 ScheduledExecutor 都僅能提供基于開始時(shí)間與重復(fù)間隔的任務(wù)調(diào)度,不能勝任更加復(fù)雜的調(diào)度需求。比如,設(shè)置每月第一天凌晨1點(diǎn)執(zhí)行任務(wù)、復(fù)雜調(diào)度任務(wù)的管理、任務(wù)間傳遞數(shù)據(jù)等等。

第三方Quartz方式實(shí)現(xiàn),項(xiàng)目地址:https://github.com/quartz-scheduler/quartz

Quartz 是一個(gè)功能強(qiáng)大的任務(wù)調(diào)度框架,它可以滿足更多更復(fù)雜的調(diào)度需求,Quartz 設(shè)計(jì)的核心類包括 Scheduler, Job 以及 Trigger。其中,Job 負(fù)責(zé)定義需要執(zhí)行的任務(wù),Trigger 負(fù)責(zé)設(shè)置調(diào)度策略,Scheduler 將二者組裝在一起,并觸發(fā)任務(wù)開始執(zhí)行。Quartz支持簡(jiǎn)單的按時(shí)間間隔調(diào)度、還支持按日歷調(diào)度方式,通過(guò)設(shè)置CronTrigger表達(dá)式(包括:秒、分、時(shí)、日、月、周、年)進(jìn)行任務(wù)調(diào)度。

下邊是一個(gè)例子代碼:

public static void main(String [] agrs) throws SchedulerException {
    //創(chuàng)建一個(gè)Scheduler
    SchedulerFactory schedulerFactory = new StdSchedulerFactory();
    Scheduler scheduler = schedulerFactory.getScheduler();
    //創(chuàng)建JobDetail
    JobBuilder jobDetailBuilder = JobBuilder.newJob(MyJob.class);
    jobDetailBuilder.withIdentity("jobName","jobGroupName");
    JobDetail jobDetail = jobDetailBuilder.build();
    //創(chuàng)建觸發(fā)的CronTrigger 支持按日歷調(diào)度
        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");
    }
}

通過(guò)以上內(nèi)容我們學(xué)習(xí)了什么是任務(wù)調(diào)度,任務(wù)調(diào)度所解決的問(wèn)題,以及任務(wù)調(diào)度的多種實(shí)現(xiàn)方式。


文章題目:什么是分布式任務(wù)調(diào)度?怎樣實(shí)現(xiàn)任務(wù)調(diào)度?
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/cogpohg.html