<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    feng

    飄逸~~~~~life

    搶占式任務(wù)調(diào)度的一種實現(xiàn)


    最近有開發(fā)一個任務(wù)調(diào)度里面最典型的應(yīng)用發(fā)短信
    關(guān)于如何實現(xiàn)任務(wù)調(diào)度,有很多方法,可以自己寫線程,也可以用一些開源方案,
    我用了quartz,大家可以去查查資料
    這里主要講講搶占式的好處
    一般我們都會把要做的任務(wù)放一張表里面,有一個字段是狀態(tài)來標(biāo)識是否已經(jīng)執(zhí)行過


    比如我這個短信的,就有一張sendsms表
    主要的字段有
    sendid自增長標(biāo)識符 content短信內(nèi)容  recevies接收號碼 status 狀態(tài)(0標(biāo)識未發(fā)

    送,1發(fā)送過的)
    我們很可能會寫這樣一個SQL
    select sendid,content,recevies from sendsms where status='0'
    然后邏輯處理完成,發(fā)送了之后根據(jù)sendid 去update sendsms set status='1'
    當(dāng)然如果只是一臺服務(wù)器需要掛這種發(fā)送短信的程序,這種方式?jīng)]有任何問題。
    但是有時候我們可能希望有更多的服務(wù)器來做這件事情來提高效率,比如我們
    還是用上面的方式,會出現(xiàn)什么樣的情況呢?
    隨便想一下就知道,很可能會出現(xiàn)一條短信被發(fā)送兩次的情況,用的服務(wù)器越多,這種情況出現(xiàn)的概率就越大,那么我們怎么解決,我講講我使用的一種利用搶占資源來解決的方案
    首先我們要給短信表增加一個字段,比如sid
    我們要做的就是給每個服務(wù)器一個唯一的編號。sid就是用來存放它,比如現(xiàn)在有兩臺服務(wù)器一個標(biāo)識為a,一個標(biāo)識為b
    我們還需要一個短信的中間狀態(tài),待發(fā)送比如2
    當(dāng)任務(wù)調(diào)度執(zhí)行到的時候這樣做
    第一步,檢索這樣的記錄
    select * from sendsms where status='2' and sid='a'
    如果有這樣的記錄我們就執(zhí)行發(fā)送任務(wù)
    如果沒有這樣的記錄,我們就去搶占資源,也就是
    updae sendsms set status='2',sid='a' where status='0'
    這樣當(dāng)下次任務(wù)調(diào)度到的時候,就有了資源,干活

    而不同的服務(wù)器只要sid不同就可以了哦  這樣就算有很多的服務(wù)器都掛這個應(yīng)用也不會出現(xiàn)一條記錄多次執(zhí)行的情況了哦


     

    posted on 2009-06-26 16:32 feng 閱讀(2677) 評論(8)  編輯  收藏

    Feedback

    # re: 搶占式任務(wù)調(diào)度的一種實現(xiàn) 2009-06-26 17:11 bigbigbig

    會不會出現(xiàn)這種情況
    服務(wù)器一搶占資源,在服務(wù)器一準(zhǔn)備發(fā)送過程中,資源被服務(wù)器二搶占,就這樣一直重復(fù)。導(dǎo)致服務(wù)器一直在搶占資源,無法發(fā)送資源呢?  回復(fù)  更多評論   

    # re: 搶占式任務(wù)調(diào)度的一種實現(xiàn)[未登錄] 2009-06-27 01:56 小黑

    master程序調(diào)度所有服務(wù)器進(jìn)行發(fā)送 master的職責(zé)是分配,其它服務(wù)器的職責(zé)是發(fā)送,  回復(fù)  更多評論   

    # re: 搶占式任務(wù)調(diào)度的一種實現(xiàn) 2009-06-27 13:54 feng

    不會出現(xiàn)你說的這種情況,可能你還沒有看明白吧 搶占的時候只是去搶占第一狀態(tài)的記錄,在本應(yīng)用既狀態(tài)為0的記錄,而服務(wù)器發(fā)送的是雙條件,其中狀態(tài)為2的待發(fā)送記錄@bigbigbig
      回復(fù)  更多評論   

    # re: 搶占式任務(wù)調(diào)度的一種實現(xiàn) 2009-06-27 23:31 俊星

    不錯,不知道搶占式會不會影響多服務(wù)器的效率(一個服務(wù)器搶占了過多資源,其他服務(wù)器沒事干了)。  回復(fù)  更多評論   

    # re: 搶占式任務(wù)調(diào)度的一種實現(xiàn) 2009-06-28 00:36 bigbigbig

    嗯,看明白了。@feng

    既然是搶占式嗎,肯定是誰搶到誰干活啊,沒搶到就歇著唄,呵呵。@俊星  回復(fù)  更多評論   

    # re: 搶占式任務(wù)調(diào)度的一種實現(xiàn) 2009-06-29 20:06 java狼

    博主,我們現(xiàn)在的系統(tǒng)的對任務(wù)的調(diào)度方式就是你文中描述的方式。現(xiàn)在很想知道用Quartz的話有什么好處嗎?我粗淺的了解了下,感覺和我們現(xiàn)在cron調(diào)用腳本的方式?jīng)]有太大的區(qū)別啊。其實我最感興趣的是如何在多服務(wù)器的并發(fā)情況下保證不會出現(xiàn)并發(fā)沖突,Quartz解決這個問題很方便嗎?  回復(fù)  更多評論   

    # re: 搶占式任務(wù)調(diào)度的一種實現(xiàn) 2009-06-30 09:13 feng

    我原先是自己寫了單線程去跑的,但是如果遇到了異常,很可是能這個單線程就會終止,任務(wù)就不會做下去,于是后來改成了Quartz,目的就是希望任務(wù)總是能執(zhí)行,效果也確實是這樣的,但是Quartz發(fā)布到WEB應(yīng)用有些奇怪的地方,可能會出現(xiàn)執(zhí)行多次的情況,后來我采用虛擬目錄發(fā)布就解決了@java狼
      回復(fù)  更多評論   

    # re: 搶占式任務(wù)調(diào)度的一種實現(xiàn) 2009-07-01 13:27 找個美女做老婆

    Java高手群:Java樂園,群號:28840096 Java樂園網(wǎng)站:http://www.javaly.cn 歡迎Java高手加入,大家一起交流經(jīng)驗,相互學(xué)習(xí),共同進(jìn)步  回復(fù)  更多評論   



    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV成人影视在线观看| 亚洲天天做日日做天天欢毛片| 亚洲噜噜噜噜噜影院在线播放| 国产精品免费AV片在线观看| 亚洲一区二区三区自拍公司| 男女一边桶一边摸一边脱视频免费| 亚洲精品高清一二区久久| 一区二区视频免费观看| 亚洲综合亚洲综合网成人| 国产97视频人人做人人爱免费| 亚洲男人在线无码视频| 免费无码av片在线观看 | www.999精品视频观看免费| 亚洲不卡中文字幕| 国内一级一级毛片a免费| 国产午夜亚洲精品不卡电影| 亚洲Av无码乱码在线播放| 国产区在线免费观看| 亚洲一区中文字幕久久| 中文字幕乱码免费视频| 亚洲αⅴ无码乱码在线观看性色 | 亚洲中文无码永久免费| 亚洲爆乳大丰满无码专区| 亚洲人成网站色在线入口| 无码人妻一区二区三区免费看 | 欧洲亚洲国产精华液| 亚洲偷自拍拍综合网| 日韩内射激情视频在线播放免费| 亚洲人成综合网站7777香蕉| 亚洲成A∨人片天堂网无码| 久久久久免费看黄a级试看| 亚洲AV无码无限在线观看不卡| 亚洲av无码国产精品色在线看不卡 | 免费看片免费播放| 国产三级在线免费观看| 亚洲精品福利在线观看| 国产男女猛烈无遮档免费视频网站 | 亚洲一区日韩高清中文字幕亚洲| 最近2019免费中文字幕6| 老司机福利在线免费观看| 亚洲视频中文字幕|