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

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

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

    feng

    飄逸~~~~~life

    搶占式任務調度的一種實現


    最近有開發一個任務調度里面最典型的應用發短信
    關于如何實現任務調度,有很多方法,可以自己寫線程,也可以用一些開源方案,
    我用了quartz,大家可以去查查資料
    這里主要講講搶占式的好處
    一般我們都會把要做的任務放一張表里面,有一個字段是狀態來標識是否已經執行過


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

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

    而不同的服務器只要sid不同就可以了哦  這樣就算有很多的服務器都掛這個應用也不會出現一條記錄多次執行的情況了哦


     

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

    Feedback

    # re: 搶占式任務調度的一種實現 2009-06-26 17:11 bigbigbig

    會不會出現這種情況
    服務器一搶占資源,在服務器一準備發送過程中,資源被服務器二搶占,就這樣一直重復。導致服務器一直在搶占資源,無法發送資源呢?  回復  更多評論   

    # re: 搶占式任務調度的一種實現[未登錄] 2009-06-27 01:56 小黑

    master程序調度所有服務器進行發送 master的職責是分配,其它服務器的職責是發送,  回復  更多評論   

    # re: 搶占式任務調度的一種實現 2009-06-27 13:54 feng

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

    # re: 搶占式任務調度的一種實現 2009-06-27 23:31 俊星

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

    # re: 搶占式任務調度的一種實現 2009-06-28 00:36 bigbigbig

    嗯,看明白了。@feng

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

    # re: 搶占式任務調度的一種實現 2009-06-29 20:06 java狼

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

    # re: 搶占式任務調度的一種實現 2009-06-30 09:13 feng

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

    # re: 搶占式任務調度的一種實現 2009-07-01 13:27 找個美女做老婆

    Java高手群:Java樂園,群號:28840096 Java樂園網站:http://www.javaly.cn 歡迎Java高手加入,大家一起交流經驗,相互學習,共同進步  回復  更多評論   



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


    網站導航:
     
    主站蜘蛛池模板: 亚洲高清中文字幕免费| 亚洲国产av高清无码| 国内自产拍自a免费毛片| 中文字幕乱码系列免费| 日本亚洲高清乱码中文在线观看| 久久青青草原亚洲av无码app| 中文字幕在亚洲第一在线| 永久免费AV无码网站在线观看| 国产男女爽爽爽爽爽免费视频| 免费国产叼嘿视频大全网站| 久青草视频97国内免费影视| 美女被羞羞网站免费下载| 亚洲精品无码久久久久秋霞| 亚洲人成毛片线播放| 久久久亚洲欧洲日产国码是AV| 久久亚洲国产午夜精品理论片| 2048亚洲精品国产| 亚洲免费在线观看| 一本色道久久88亚洲综合| 国产男女猛烈无遮挡免费视频网站 | 亚洲an日韩专区在线| 久久亚洲私人国产精品| 亚洲av无码成h人动漫无遮挡| 亚洲性猛交XXXX| 亚洲色欲久久久综合网东京热| 亚洲精品国精品久久99热| 亚洲成aⅴ人片久青草影院| 国产精品另类激情久久久免费| 永久免费视频v片www| 国产成人无码a区在线观看视频免费| 在线观看视频免费国语| 德国女人一级毛片免费| 成人超污免费网站在线看| 午夜精品在线免费观看| 在线观看91精品国产不卡免费| 国产三级免费电影| 亚洲欧洲日产国码高潮αv| 亚洲精品偷拍视频免费观看 | 亚洲av永久无码嘿嘿嘿| 国产91在线|亚洲| 国产精品亚洲专区无码唯爱网|