国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

考拉定時任務(wù)框架kSchedule

AlexTuan / 1329人閱讀

摘要:考拉訂單流推送申報單推送物流信息等供應(yīng)鏈相關(guān)業(yè)務(wù)已接入分片任務(wù),極大提高了業(yè)務(wù)吞吐量降低壓力,提升了通關(guān)效率。支撐雙十一黑五雙十二等大促,高峰期統(tǒng)一暫停非關(guān)鍵定時任務(wù),讓出系統(tǒng)資源,提高業(yè)務(wù)系統(tǒng)穩(wěn)定性。

此文已由作者楊凱明授權(quán)網(wǎng)易云社區(qū)發(fā)布。

歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗。

1.背景

目前項目中使用的定時任務(wù)框架存在下面這些問題

沒有統(tǒng)一的定時任務(wù)管理平臺

目前項目中使用定時任務(wù)的方式比較混亂,有部分系統(tǒng)使用了cron插件,有部分系統(tǒng)直接使用的spring task注解配置,沒有一個統(tǒng)一的管理平臺。使用cron插件的定時任務(wù)的配置集成在ms后臺,管理頁面比較簡陋,需要一個更加友好、功能更加完善的管理系統(tǒng),專門負責定時任務(wù)的管理,包括定時任務(wù)的創(chuàng)建、修改、刪除、觸發(fā)、查看歷史等

對每個定時任務(wù)沒有完善的監(jiān)控

目前項目中沒有對定時任務(wù)的監(jiān)控,無法知道定時任務(wù)的執(zhí)行情況和執(zhí)行時間;當定時任務(wù)沒有觸發(fā)時沒有告警;沒法查看定時任務(wù)的執(zhí)行歷史情況

單點問題

目前使用spring task或quartz來做定時任務(wù)的系統(tǒng),都需要手動指定運行定時任務(wù)的機器,這樣會導(dǎo)致某臺機器負載很高,并且如果這臺機器宕機了則定時任務(wù)都不會執(zhí)行

重復(fù)執(zhí)行問題

有些定時任務(wù)本身不是冪等的,如果重復(fù)執(zhí)行的話會有很多問題,比如短信的定時發(fā)送等;目前cron出現(xiàn)過zk斷開后,導(dǎo)致定時任務(wù)被重復(fù)執(zhí)行的情況

針對這些問題,需要設(shè)計一種能解決上述問題的新框架

2.設(shè)計

設(shè)計目標:

定時任務(wù)統(tǒng)一配置、統(tǒng)一管理

支持動態(tài)修改任務(wù)狀態(tài),動態(tài)暫停/恢復(fù)任務(wù),即時生效

減少使用方的限制依賴

定時任務(wù)不遺漏、不重復(fù)的被執(zhí)行

支持任務(wù)分片并發(fā)執(zhí)行

完善的監(jiān)控、統(tǒng)計功能

整個框架分為四部分:

調(diào)度服務(wù)器管理平臺:負責定時任務(wù)的配置和管理,并定時進行任務(wù)的分配;獲取每次任務(wù)執(zhí)行的結(jié)果進行統(tǒng)計

任務(wù)執(zhí)行器:通過心跳更新服務(wù)器信息;獲取配置的任務(wù)信息定時執(zhí)行任務(wù),并根據(jù)任務(wù)執(zhí)行情況上報執(zhí)行結(jié)果

zk集群:存儲任務(wù)配置信息和服務(wù)器節(jié)點信息;提供分布式協(xié)調(diào)服務(wù)

數(shù)據(jù)庫:記錄任務(wù)的每次執(zhí)行情況,用于監(jiān)控和統(tǒng)計

架構(gòu)部署圖如下:

ZK節(jié)點圖:

觸發(fā)類型:

定時觸發(fā):通過定時任務(wù)框架與cron表達式定時觸發(fā)

手動觸發(fā):通過kschedule平臺觸發(fā)(1.按分配信息觸發(fā);2.指定一臺機器執(zhí)行)

啟動觸發(fā):應(yīng)用啟動時觸發(fā)(如加載初始化本地緩存)

RPC觸發(fā):通過dubbo接口觸發(fā)

任務(wù)類型:

都不執(zhí)行(只需人為去觸發(fā),使用場景較少)

所有的機器上只有一臺執(zhí)行:該產(chǎn)品下所有注冊上來的機器只會選擇一臺來執(zhí)行

所有機器都執(zhí)行:該產(chǎn)品下所有注冊上來的機器都會執(zhí)行該任務(wù)

在指定的機器上全部執(zhí)行:被選擇的機器都會執(zhí)行該任務(wù)

指定的機器上只有一臺執(zhí)行:被選擇的機器中只會有一臺會執(zhí)行該任務(wù)

任務(wù)分片執(zhí)行(下面解釋)

不重復(fù)執(zhí)行策略及異常整理

任務(wù)狀態(tài)變?yōu)镈OING狀態(tài)后,備用機器不再監(jiān)聽任務(wù),認為任務(wù)已經(jīng)有機器執(zhí)行,如執(zhí)行的機器在任務(wù)執(zhí)行時掛掉,則造成任務(wù)遺漏執(zhí)行。

如主機器500ms內(nèi)沒有將任務(wù)變?yōu)镈OING狀態(tài),則備用機器恢復(fù)搶鎖進行任務(wù)執(zhí)行,沒搶到鎖的機器繼續(xù)監(jiān)聽任務(wù)狀態(tài)。

kschedule服務(wù)端掛了:不影響任務(wù)執(zhí)行

執(zhí)行前服務(wù)器網(wǎng)絡(luò)斷開:由備機執(zhí)行

執(zhí)行前服務(wù)器掛掉:由備機執(zhí)行

執(zhí)行中服務(wù)器網(wǎng)絡(luò)斷開:任務(wù)正常執(zhí)行,可能會報警遺漏執(zhí)行

執(zhí)行中服務(wù)器掛掉:任務(wù)不能正常執(zhí)行,會報警

zk掛掉:任務(wù)不能正常(zk進程監(jiān)控)

執(zhí)行分配的機器全掛掉:任務(wù)不能正常執(zhí)行,會報警

不遺漏執(zhí)行策略及異常整理

任務(wù)狀態(tài)變?yōu)镈OING狀態(tài)后,備用機器繼續(xù)監(jiān)聽任務(wù),直到任務(wù)狀態(tài)變更為DONE時,監(jiān)聽取消。

如主機器在DOING狀態(tài)后掛掉或者失去與ZK的連接,則備用機器恢復(fù)搶鎖進行任務(wù)執(zhí)行,沒搶到鎖的機器繼續(xù)監(jiān)聽任務(wù)狀態(tài),可能會造成任務(wù)重復(fù)執(zhí)行。

kschedule服務(wù)端掛了:不影響任務(wù)執(zhí)行

執(zhí)行前服務(wù)器網(wǎng)絡(luò)斷開:由備機執(zhí)行

執(zhí)行前服務(wù)器掛掉:由備機執(zhí)行

執(zhí)行中服務(wù)器網(wǎng)絡(luò)斷開:由備機執(zhí)行,可能重復(fù)執(zhí)行

執(zhí)行中服務(wù)器掛掉:由備機執(zhí)行

執(zhí)行中任務(wù)執(zhí)行超時:由備機執(zhí)行,可能重復(fù)執(zhí)行

zk掛掉:任務(wù)不能正常( zk進程監(jiān)控)

執(zhí)行分配的機器全掛掉:任務(wù)不能正常執(zhí)行,會報警

分片任務(wù):

分片任務(wù)即將一個任務(wù)按一定規(guī)則拆成多個子任務(wù)在多臺機器上的多個線程中并行執(zhí)行。

需要實現(xiàn)IScheduleShardingTask接口,

例子1:服務(wù)器有5臺

分片信息:0,1,2,3,4,5,6,7,8,9

分片最大線程數(shù):10

分片獲取數(shù)據(jù)的數(shù)量:100

則kschedule會將任務(wù)進行分片,每臺機器分配到2個執(zhí)行線程,每個線程執(zhí)行1個分片,每個分片拉取100條數(shù)據(jù)。

每個線程回調(diào)到selectItems方法上的參數(shù)為selectItems(null,10,[0],100);

selectItems:應(yīng)用系統(tǒng)在接口實現(xiàn)中根據(jù)分片傳入的參數(shù)去DB拉取待處理的數(shù)據(jù)。

execute:應(yīng)用系統(tǒng)在接口實現(xiàn)中根據(jù)selectItems方法拉取的數(shù)據(jù)進行數(shù)據(jù)處理。

例子2: 服務(wù)器有5臺

分片信息:a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z

分片最大線程數(shù):10

分片獲取數(shù)據(jù)的數(shù)量:1000

則kschedule會將任務(wù)進行分片,每臺機器分配到2個執(zhí)行線程,每個線程執(zhí)行3個分片(部分是2個分片),每個分片拉取1000條數(shù)據(jù)。

每個線程回調(diào)到selectItems方法上的參數(shù)為selectItems(null,26,[a,b,c],1000);

selectItems:應(yīng)用系統(tǒng)在接口實現(xiàn)中根據(jù)分片傳入的參數(shù)去DB拉取待處理的數(shù)據(jù)。

execute:應(yīng)用系統(tǒng)在接口實現(xiàn)中根據(jù)selectItems方法拉取的數(shù)據(jù)進行數(shù)據(jù)處理。

/**

分片任務(wù)定義接口,業(yè)務(wù)方需實現(xiàn)該接口才能使用分片功能

@author hzyangkaiming

*
/public interface IScheduleShardingTask { /*

 * 拉取業(yè)務(wù)數(shù)據(jù)的方法
 * @param parameter 自定義參數(shù)
 * @param shardingCount 任務(wù)分片總數(shù)
 * @param shardingIndexs 分配到的任務(wù)分片
 * @param limit 每次獲取數(shù)據(jù)的數(shù)量
 * @return 待處理的數(shù)據(jù)
 * @author yangkaiming
 * @since 2016年5月16日
 */
public List selectItems(String parameter,int shardingCount,List shardingIndexs,int limit);    /**
 * 執(zhí)行指定的任務(wù)
 *
 * @param items 處理的數(shù)據(jù)
 * @return 成功/失敗
 * @author yangkaiming
 * @since 2016年5月16日
 */
public boolean execute(T[] items);

執(zhí)行日志:

執(zhí)行日志會在框架調(diào)度業(yè)務(wù)方法時進行記錄,寫到ZK,kschedule平臺會收集并清理zk。

用戶可以在kschedule平臺查詢?nèi)蝿?wù)執(zhí)行情況,包括執(zhí)行時間情況,任務(wù)每次觸發(fā)執(zhí)行的服務(wù)器等信息

3.監(jiān)控

1.根據(jù)cron表達式及任務(wù)執(zhí)行日志,對任務(wù)漏執(zhí)行、重復(fù)執(zhí)行、超時執(zhí)行等進行準實時報警。

2.任務(wù)執(zhí)行失敗(業(yè)務(wù)方法未捕獲的Exeption)報警,并推送錯誤堆棧,幫助定位解決問題。

2.支持非常規(guī)節(jié)假日短信報警,平日上班時間popo、stone報警,下班時間popo、stone、短信報警。

4.實踐

經(jīng)過一年的推廣及優(yōu)化,考拉目前各系統(tǒng)定時任務(wù)已經(jīng)基本完成切換,并穩(wěn)定運行于kschedule平臺,當然也有不少坑:

坑1:業(yè)務(wù)方法卡住

背景:定時任務(wù)運行時會占有該任務(wù)的分布式鎖,如果任務(wù)掛住會造成后面每次觸發(fā)任務(wù)都會忽略執(zhí)行,防止重復(fù)執(zhí)行。

問題: http,ftp等外部調(diào)用相關(guān)業(yè)務(wù)定時任務(wù)出現(xiàn)任務(wù)掛住的問題

實時處理:任務(wù)出現(xiàn)超時并長期運行中,則優(yōu)先打印堆棧信息,保留現(xiàn)場,并根據(jù)業(yè)務(wù)方評估是否人工去zk釋放鎖,讓任務(wù)先跑起來。

后期處理:業(yè)務(wù)放根據(jù)堆棧等信息定位卡主原因進行優(yōu)化(主要以超時時間為主),平臺增加實時zk鎖查詢,判斷任務(wù)是否占用鎖,并增加管理員刪鎖按鈕,提升運維能力。

坑2:新上線分片任務(wù)重復(fù)執(zhí)行并執(zhí)行紊亂

背景:分片任務(wù)會根據(jù)分配信息異步起線程(有默認線程池)進行處理,并且單個分片沒有加分片的分布式鎖。業(yè)務(wù)放上線10個分片任務(wù),每個分片任務(wù)10個線程,總共4臺機器,觸發(fā)時間都是每分鐘的0秒,默認線程池5個初始線程,1000的隊列,隊列滿擴到20個線程

問題:業(yè)務(wù)系統(tǒng)上線,業(yè)務(wù)系統(tǒng)ftp調(diào)用超時問題也比較多,造成分片任務(wù)執(zhí)行完全紊亂,執(zhí)行日志無參考性,業(yè)務(wù)方法出現(xiàn)重復(fù)執(zhí)行

實時處理:經(jīng)過初步判斷,根據(jù)業(yè)務(wù)方分片任務(wù)數(shù)量及線程量,優(yōu)先加大線程池提高處理能力,緊急上線,但不能完全解決問題。

后期處理:修改默認線程池策略,去掉緩沖隊列,線程不夠直接擴,最大200個,超過150個報警;因為業(yè)務(wù)方需要高頻率調(diào)度這些分片任務(wù),加上與ftp調(diào)用等執(zhí)行時間不可控因素,因此增加單個分片的分布式鎖,防止重復(fù)執(zhí)行,并且極大降低線程占用量。

那么現(xiàn)在:

kschedule平臺目前每日的任務(wù)執(zhí)行次數(shù)平均在20+w次。

網(wǎng)易金融也已搭建自己的kschedule環(huán)境,并在線上使用中。

考拉訂單流推送、申報單推送、物流信息等供應(yīng)鏈相關(guān)業(yè)務(wù)已接入分片任務(wù),極大提高了業(yè)務(wù)吞吐量、降低DB壓力,提升了通關(guān)效率。

支撐雙十一、黑五、雙十二等大促,高峰期統(tǒng)一暫停非關(guān)鍵定時任務(wù),讓出系統(tǒng)資源,提高業(yè)務(wù)系統(tǒng)穩(wěn)定性。

5.計劃

近:任務(wù)執(zhí)行時間TOP統(tǒng)計,方便業(yè)務(wù)系統(tǒng)優(yōu)化定時任務(wù)性能等;

遠:可以根據(jù)考拉的業(yè)務(wù)需要,增加非java方法調(diào)度功能等;

歡迎考拉的兄弟姐妹貢獻需求及改進點

網(wǎng)易云免費體驗館,0成本體驗20+款云產(chǎn)品!

更多網(wǎng)易技術(shù)、產(chǎn)品、運營經(jīng)驗分享請點擊。

文章來源: 網(wǎng)易云社區(qū)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/25273.html

相關(guān)文章

  • Spring-Boot自定義Starter實踐

    摘要:此文已由作者王慎為授權(quán)網(wǎng)易云社區(qū)發(fā)布。歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗。網(wǎng)易云免費體驗館,成本體驗款云產(chǎn)品更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗分享請點擊。文章來源網(wǎng)易云社區(qū) 此文已由作者王慎為授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗。 disconf-spring-boot-starter使用方法:引入maven依賴: com.netease.hai...

    goji 評論0 收藏0
  • 基于開源,強于開源,輕舟微服務(wù)解決方案深度解讀

    摘要:德邦快遞創(chuàng)始于年,從專于傳統(tǒng)零擔業(yè)務(wù)到現(xiàn)在全面發(fā)力大件快遞,業(yè)務(wù)量正處于高速增長中。網(wǎng)易云輕舟微服務(wù)是圍繞應(yīng)用和微服務(wù)打造的一站式平臺,幫助用戶快速實現(xiàn)易接入易運維的微服務(wù)解決方案。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗。 2018年7月31日,由杭州市政府、賽迪以及網(wǎng)易主辦的2018中國杭州云創(chuàng)大會于杭州國際博覽中心如期舉辦,大會以開放·生態(tài)·賦能為主題,匯聚行業(yè)領(lǐng)袖、技...

    weknow619 評論0 收藏0
  • 校招社招必備核心前端面試問題與詳細解答

    摘要:本文總結(jié)了前端老司機經(jīng)常問題的一些問題并結(jié)合個人總結(jié)給出了比較詳盡的答案。網(wǎng)易阿里騰訊校招社招必備知識點。此外還有網(wǎng)絡(luò)線程,定時器任務(wù)線程,文件系統(tǒng)處理線程等等。線程核心是引擎。主線程和工作線程之間的通知機制叫做事件循環(huán)。 showImg(https://segmentfault.com/img/bVbu4aB?w=300&h=208); 本文總結(jié)了前端老司機經(jīng)常問題的一些問題并結(jié)合個...

    jonh_felix 評論0 收藏0
  • 校招社招必備核心前端面試問題與詳細解答

    摘要:本文總結(jié)了前端老司機經(jīng)常問題的一些問題并結(jié)合個人總結(jié)給出了比較詳盡的答案。網(wǎng)易阿里騰訊校招社招必備知識點。此外還有網(wǎng)絡(luò)線程,定時器任務(wù)線程,文件系統(tǒng)處理線程等等。線程核心是引擎。主線程和工作線程之間的通知機制叫做事件循環(huán)。 showImg(https://segmentfault.com/img/bVbu4aB?w=300&h=208); 本文總結(jié)了前端老司機經(jīng)常問題的一些問題并結(jié)合個...

    Rango 評論0 收藏0
  • 百度阿里網(wǎng)易大疆等大小廠前端校招面筋

    摘要:面過的公司,大疆,阿里,網(wǎng)易,百度,電信研發(fā)中心,深信服,華為,小米,搜狗,騰訊。拿了的公司目前是大疆電信深信服華為。一面二面因為時間太久,就直接放在一起了,問的都是基礎(chǔ)吧,講真,大疆前端面試不難,都是很基礎(chǔ)的,就是時間長,等的捉急。 自我介紹下:某985碩士,程序媛,接觸前端一年時間。從八月份開始校招面試筆試,前前后后大廠小廠也都面了挺多,不過大廠基本都被我掛完了,哭暈我,還是太菜啊...

    劉厚水 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<