內(nèi)容來(lái)源:宜信技術(shù)學(xué)院第4期技術(shù)沙龍-線上直播|宜信微服務(wù)任務(wù)調(diào)度平臺(tái)建設(shè)實(shí)踐
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),陽(yáng)江企業(yè)網(wǎng)站建設(shè),陽(yáng)江品牌網(wǎng)站建設(shè),網(wǎng)站定制,陽(yáng)江網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,陽(yáng)江網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。主講人:宜信高級(jí)架構(gòu)師&開(kāi)發(fā)平臺(tái)負(fù)責(zé)人 梁鑫
導(dǎo)讀:如今,無(wú)論是互聯(lián)網(wǎng)應(yīng)用還是企業(yè)級(jí)應(yīng)用,都充斥著大量的批處理任務(wù),常常需要一些任務(wù)調(diào)度系統(tǒng)幫助我們解決問(wèn)題。隨著微服務(wù)化架構(gòu)的逐步演進(jìn),單體架構(gòu)逐漸演變?yōu)榉植际?、微服?wù)架構(gòu)。
在此背景下,很多之前的任務(wù)調(diào)度平臺(tái)已經(jīng)不能滿足業(yè)務(wù)系統(tǒng)的需求,于是出現(xiàn)了一些基于分布式的任務(wù)調(diào)度平臺(tái)。這些平臺(tái)各有其特點(diǎn),但也各有不足之處,比如不支持任務(wù)編排、與業(yè)務(wù)高耦合、不支持跨平臺(tái)等問(wèn)題,不是非常符合公司的需求,因此我們開(kāi)發(fā)了微服務(wù)任務(wù)調(diào)度平臺(tái)(SIA-TASK)。本次分享主要圍繞SIA平臺(tái)展開(kāi),包括研發(fā)背景設(shè)計(jì)思路和技術(shù)架構(gòu),以及如何支持業(yè)務(wù)方。
無(wú)論是互聯(lián)網(wǎng)應(yīng)用還是企業(yè)級(jí)應(yīng)用,都充斥著大量的批處理任務(wù),常常需要一些任務(wù)調(diào)度系統(tǒng)幫助我們解決問(wèn)題。隨著微服務(wù)化架構(gòu)的逐步演進(jìn),單體架構(gòu)逐漸演變?yōu)榉植际健⑽⒎?wù)架構(gòu)。
在這樣的背景下,很多之前的任務(wù)調(diào)度平臺(tái)或組件已經(jīng)不能滿足業(yè)務(wù)系統(tǒng)的需求,于是出現(xiàn)了一些基于分布式的任務(wù)調(diào)度平臺(tái)。這些平臺(tái)各有其特點(diǎn),但也各有不足之處,比如不支持任務(wù)編排、與業(yè)務(wù)高耦合、不支持跨平臺(tái)等問(wèn)題。
按照任務(wù)與時(shí)間的關(guān)系,我們把批處理任務(wù)分成三類,飛機(jī)型、地鐵型、公共汽車型。
在跑批任務(wù)的過(guò)程中會(huì)遇到以下問(wèn)題:
前文提到任務(wù)之間是有關(guān)系的,那到底存在哪些關(guān)系呢?我認(rèn)為主要有以下3種:
基于上述的幾種關(guān)系,我們?cè)诮ㄔO(shè)任務(wù)調(diào)度平臺(tái)的時(shí)候會(huì)思考以下兩個(gè)方面:
除了上述兩個(gè)方面的考慮以外,我們還需要思考以下八個(gè)因素。
基于以上的背景與考慮,我們建設(shè)了微服務(wù)任務(wù)調(diào)度平臺(tái)SIA-Task。
SIA是“Simple is Awesome”的簡(jiǎn)稱。
SIA-TASK(微服務(wù)任務(wù)調(diào)度平臺(tái))是其中的一項(xiàng)重要產(chǎn)品,SIA-Task契合當(dāng)前微服務(wù)架構(gòu)模式,具有跨平臺(tái)、可編排、高可用、無(wú)侵入、一致性、異步并行、動(dòng)態(tài)擴(kuò)展、實(shí)時(shí)監(jiān)控等特點(diǎn)。
SIA-TASK是任務(wù)調(diào)度的一體式解決方案,對(duì)任務(wù)進(jìn)行元數(shù)據(jù)采集,然后進(jìn)行任務(wù)可視化編排,最終進(jìn)行任務(wù)調(diào)度,并且對(duì)任務(wù)采取全流程監(jiān)控,簡(jiǎn)單易用。對(duì)業(yè)務(wù)完全無(wú)侵入,通過(guò)簡(jiǎn)單靈活的配置即可生成符合預(yù)期的任務(wù)調(diào)度模型。
SIA-TASK借鑒微服務(wù)的設(shè)計(jì)思想,獲取分布在每個(gè)任務(wù)執(zhí)行器上的任務(wù)元數(shù)據(jù),上傳到任務(wù)注冊(cè)中心。利用在線方式進(jìn)行任務(wù)編排,可動(dòng)態(tài)修改任務(wù)時(shí)鐘,采用HTTP作為任務(wù)調(diào)度協(xié)議,統(tǒng)一使用JSON數(shù)據(jù)格式,由調(diào)度中心進(jìn)行時(shí)鐘解析,執(zhí)行任務(wù)流程,進(jìn)行任務(wù)通知。
簡(jiǎn)單介紹一下SIA-TASK的術(shù)語(yǔ)。
Task是業(yè)務(wù)執(zhí)行的基本單元,執(zhí)行器對(duì)外暴露的一個(gè)HTTP調(diào)用接口。若干個(gè)Task構(gòu)成一個(gè)Job,而Plan是由若干個(gè)順序執(zhí)行的Job構(gòu)成。
為什么這里需要一個(gè)Plan?有的時(shí)候兩個(gè)任務(wù)不光有順序關(guān)系(就是A任務(wù)執(zhí)行完之后再執(zhí)行B任務(wù)),還需要滿足一定的時(shí)間要求,比如上午10點(diǎn)執(zhí)行任務(wù)A,下午2點(diǎn)執(zhí)行任務(wù)B,而且必須保證上午10點(diǎn)任務(wù)A按時(shí)執(zhí)行完成。
打個(gè)比方,今晚8點(diǎn)有一場(chǎng)足球比賽的直播,如果晚上8點(diǎn)我還不能到家,那我就沒(méi)辦法看直播,而如果今天我下班早,下午6點(diǎn)多就到家,也必須等到8點(diǎn)才能開(kāi)始看球賽,這就是Plan計(jì)劃的來(lái)源。
SIA-TASK任務(wù)調(diào)度平臺(tái)有以下幾個(gè)部分組成:
接下來(lái)詳細(xì)介紹SIA-TASK的運(yùn)行邏輯。
首先,通過(guò)注解抓取任務(wù)執(zhí)行器中的任務(wù)上報(bào)到任務(wù)注冊(cè)中心。任務(wù)執(zhí)行器在啟動(dòng)的時(shí)候,會(huì)有一個(gè)叫online Task的注解,只要把這個(gè)注解放到control代碼的方法上,就會(huì)自動(dòng)把HTTP接口抓取出來(lái),然后上報(bào)到任務(wù)注冊(cè)中心,這里我們用的是ZooKeeper。
任務(wù)編排中心從任務(wù)注冊(cè)中心獲取數(shù)據(jù)進(jìn)行編排保存入持久化存儲(chǔ)。也就是說(shuō),相當(dāng)于在執(zhí)行器里,把業(yè)務(wù)調(diào)用HTTP接口請(qǐng)求的URL地址、端口等實(shí)例抓取出來(lái)上傳到ZooKeeper里,ZooKeeper就拿到了一個(gè)個(gè)的任務(wù),ZooKeeper會(huì)把任務(wù)本身的信息抓取出來(lái)放到MySQL里。
這里要區(qū)別一下什么是任務(wù),什么是任務(wù)實(shí)例。任務(wù)實(shí)例和任務(wù)的關(guān)系,有點(diǎn)像類和對(duì)象的關(guān)系,就是一份業(yè)務(wù)邏輯代碼可能部署在多個(gè)節(jié)點(diǎn)上,也就是說(shuō)這些節(jié)點(diǎn)的業(yè)務(wù)邏輯代碼是一模一樣的,在運(yùn)行階段抓取的時(shí)候會(huì)把每個(gè)節(jié)點(diǎn)上業(yè)務(wù)邏輯代碼都抓取上來(lái),針對(duì)這個(gè)業(yè)務(wù)它就是一個(gè)任務(wù),但是每一個(gè)端口、每個(gè)IP地址對(duì)應(yīng)的可能就是一個(gè)任務(wù)實(shí)例。比如高可用熱備時(shí),我們會(huì)把任務(wù)本身的信息經(jīng)過(guò)處理之后保存到持久存儲(chǔ)里,而實(shí)例本身的信息只會(huì)停留在ZooKeeper里。
任務(wù)配置中心可以根據(jù)ZooKeeper里的信息和MySQL里的信息進(jìn)行配置,就是根據(jù)抓取的任務(wù),給這些Task加時(shí)鐘、策略,然后編排出Job和Plan,并把現(xiàn)在的這些信息保存到MySQL里。
任務(wù)調(diào)度中心從持久化存儲(chǔ)獲取調(diào)度信息,知道編排的Job、Plan、時(shí)鐘、策略等邏輯,任務(wù)調(diào)度中心按照調(diào)度邏輯訪問(wèn)任務(wù)執(zhí)行器,對(duì)這些從執(zhí)行器上抓取來(lái)的Task進(jìn)行調(diào)度。
這就是SIA-TASK的運(yùn)行邏輯,同時(shí)我們會(huì)把調(diào)度日志存到Kafka里。
在暴露成HTTP服務(wù)的方法上加入@OnlineTask注解,@OnlineTask會(huì)自動(dòng)抓取方法所在的IP地址、端口、請(qǐng)求路徑、請(qǐng)求方法、請(qǐng)求參數(shù)格式等信息上傳到任務(wù)注冊(cè)中心(zookeeper),并同步把任務(wù)信息寫(xiě)入持久化存儲(chǔ)中。
單一任務(wù)實(shí)例必須保持單線程運(yùn)行,任務(wù)調(diào)度框架自動(dòng)攔截@OnlineTask注解進(jìn)行單線程運(yùn)行控制,保持在一個(gè)任務(wù)運(yùn)行時(shí)不會(huì)被再次調(diào)度。而且整個(gè)控制過(guò)程對(duì)開(kāi)發(fā)者完全無(wú)感知。
就是在一個(gè)任務(wù)實(shí)例上,要保證任務(wù)在運(yùn)行的時(shí)候是單線程狀態(tài)。其實(shí)這是由用戶自己控制的,如果需要是單線程的,這里可以加以控制;如果需要是多線程的,可以不加控制。這個(gè)控制并不需要另加代碼,只需要在注解上去處理。
SIA-TASK的設(shè)計(jì)思想是以任務(wù)為原子,把多個(gè)任務(wù)按照?qǐng)?zhí)行的關(guān)系組合起來(lái)形成一個(gè)作業(yè)(Job)。同時(shí)運(yùn)行時(shí)分為任務(wù)調(diào)度中心和任務(wù)編排中心,使得作業(yè)的調(diào)度和作業(yè)的編排分隔開(kāi)來(lái),互不影響。在我們需要調(diào)整作業(yè)的流程時(shí),只需要在編排中心進(jìn)行處理即可。同時(shí)編排中心支持任務(wù)按照串行、并行、分支等方式組織關(guān)系。在相同任務(wù)不同任務(wù)實(shí)例時(shí),也支持多種調(diào)度方式進(jìn)行處理,而且整個(gè)的處理編排都是在頁(yè)面上完成的,這個(gè)功能非常好用,這也是SIA-TASK平臺(tái)的一個(gè)亮點(diǎn)。
任務(wù)執(zhí)行過(guò)程中出現(xiàn)失敗、異常時(shí),可以根據(jù)任務(wù)定制的策略進(jìn)行多點(diǎn)重新喚醒任務(wù),保證任務(wù)的不間斷執(zhí)行。我們?cè)O(shè)定了很多策略,比如某個(gè)Task出現(xiàn)問(wèn)題了怎么辦?是再喚醒一次?還是不管了?還是人工干預(yù)發(fā)警報(bào)?我們定制了很多策略去處理這些問(wèn)題。
了解了平臺(tái)特性,我們來(lái)梳理SIA-TASK的技術(shù)關(guān)鍵點(diǎn)。
任務(wù)調(diào)度管理首頁(yè)主要包括三部分:調(diào)度器信息、調(diào)度次數(shù)、對(duì)接項(xiàng)目詳情。
目前SIA-Task平臺(tái)上已經(jīng)接入了51個(gè)項(xiàng)目,上面跑的Job數(shù)有600多個(gè),今年上線的版本,Job已經(jīng)跑了3000多萬(wàn)次。
調(diào)度器上有幾個(gè)值需要了解一下,每臺(tái)調(diào)度器都有三個(gè)指標(biāo)。
關(guān)于調(diào)度器有幾個(gè) 信息需要了解,如圖所示,點(diǎn)擊某個(gè)調(diào)度器(柱狀圖),會(huì)顯示該調(diào)度器所搶占的Job詳情列表:
調(diào)度器包括工作調(diào)度器、下線調(diào)度器、離線調(diào)度器、白名單。
上圖所示是SIA-TASK的調(diào)度監(jiān)控頁(yè)面,分著的一塊一塊區(qū)域?qū)儆诓煌?xiàng)目組。目前SIA-Task接入了51個(gè)項(xiàng)目,準(zhǔn)備中的有500多個(gè),正在運(yùn)行的有25個(gè)。
有的Job執(zhí)行非常快,幾秒鐘就執(zhí)行完了,有的Job執(zhí)行非常慢,需要很長(zhǎng)的時(shí)間,我們?cè)跔顟B(tài)抓取的時(shí)候,只能抓取到時(shí)間長(zhǎng)的Job,這些被抓取的Job顯示為正在運(yùn)行,而時(shí)間短的捕捉不到,但它們都處于執(zhí)行狀態(tài),這些沒(méi)有被抓取到的Job就顯示為準(zhǔn)備中。
可能有的Job這段時(shí)間不需要運(yùn)行,可以手動(dòng)停止,剩下的就是異常停止的Job,需要發(fā)送郵件告警。
我們也提供了檢索的能力,可以接受不同項(xiàng)目組登錄查詢自己的項(xiàng)目運(yùn)行狀態(tài)。
Task管理界面中,Task按項(xiàng)目組分組顯示,主要提供Task的配置、修改與刪除等功能。Task包含兩部分:一部分Task使用了sia-Task-hunter組件,通過(guò)標(biāo)準(zhǔn)注解實(shí)現(xiàn)Task的自動(dòng)抓取,這類Task不允許修改;另外一部分Task是由用戶手動(dòng)添加的,我知道訪問(wèn)的URL和HTTP地址,手動(dòng)添加進(jìn)來(lái),這部分Task支持跨平臺(tái)的抓取,而且可以修改和刪除。
一個(gè)Task管理包含以下幾個(gè)部分內(nèi)容:項(xiàng)目名稱、應(yīng)用名稱、任務(wù)名稱、機(jī)器地址、描述、以及查看/修改/連通性測(cè)試等操作。同一個(gè)Task名稱,不同的機(jī)器地址,代表一個(gè)任務(wù)和不同的任務(wù)實(shí)例。
前面介紹了一個(gè)Job由若干個(gè)Task組成,圖中每一個(gè)不同的列代表項(xiàng)目名稱,點(diǎn)擊下拉列表可以顯示所有的項(xiàng)目,可以進(jìn)行過(guò)濾、添加、狀態(tài)查看等操作。
其中狀態(tài)操作可以手工執(zhí)行,可以停止或激活Job,Job配置好之后屬于未激活的狀態(tài),需要激活一下。還可以修改Job里的信息,配置Job等。
如何添加Job?假如我要添加一個(gè)Cron表達(dá)式類型的Job,需要添加哪些內(nèi)容呢?
因?yàn)镴ob是Cron表達(dá)式類型的,首先我需要輸入六位表達(dá)式內(nèi)容,還要添加一個(gè)預(yù)警郵箱,再描述這個(gè)Job,每個(gè)Job都有一個(gè)key,最后還需要添加Job_key。這樣一個(gè)新的Job就添加好了。
回過(guò)頭來(lái)看,添加Job需要配置Task信息,這是一個(gè)比較復(fù)雜的過(guò)程。一個(gè)Job由若干個(gè)Task組成,我們可以用拖拉拽的方式根據(jù)Task之間的關(guān)系確定形成組成Job的所有Task的順序關(guān)系。還可以以不同顏色代表不同項(xiàng)目進(jìn)行區(qū)分,當(dāng)然只有管理員才有權(quán)限看到所有項(xiàng)目,各個(gè)項(xiàng)目的負(fù)責(zé)人只能看到自己所屬項(xiàng)目的狀態(tài)。
上傳Task的時(shí)候會(huì)帶一些參數(shù),所以還涉及到參數(shù)的處理,比如參數(shù)類型、參數(shù)值、過(guò)期時(shí)間等。重點(diǎn)聊聊過(guò)期時(shí)間。
通過(guò)HTTP方式調(diào)用會(huì)遇到一個(gè)問(wèn)題:到底Task什么時(shí)間會(huì)執(zhí)行完成。為解決這個(gè)問(wèn)題,就需要設(shè)一個(gè)Task的過(guò)期時(shí)間,只要過(guò)期時(shí)間一到,就會(huì)轉(zhuǎn)入其他策略,比如放棄或人工處理等。因?yàn)樽鳛楫惒秸{(diào)用,不可能無(wú)休止地等待客戶端返回結(jié)果。
當(dāng)然也可能存在一種情況:我得到的結(jié)果是超時(shí)了,實(shí)際上任務(wù)是在正確執(zhí)行,而且再過(guò)一段時(shí)間給我返回結(jié)果了。我們?cè)?jīng)設(shè)計(jì)了一種隊(duì)列補(bǔ)償機(jī)制來(lái)處理這個(gè)問(wèn)題,但是好像意義不大。當(dāng)然,這只是一種可能,平臺(tái)上線至今沒(méi)有出現(xiàn)過(guò)。
目前平臺(tái)的Task_選取實(shí)例策略包括兩種:
日志管理提供了Job的運(yùn)行日志相關(guān)信息,按項(xiàng)目組分組顯示,一條Job日志的關(guān)鍵元素包含:
SIA-TASK作為SIA團(tuán)隊(duì)的一個(gè)重要產(chǎn)品,在公司接入了數(shù)十個(gè)項(xiàng)目,運(yùn)行著數(shù)百個(gè)Job,經(jīng)受住了穩(wěn)定性的考驗(yàn)。
SIA-TASK微服務(wù)調(diào)度平臺(tái)于5月已經(jīng)開(kāi)源,開(kāi)源地址:https://github.com/siaorg/sia-Task,感興趣的同學(xué)可以登錄查看詳細(xì)介紹。
分享者:梁鑫
來(lái)源:宜信技術(shù)學(xué)院
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前名稱:宜信微服務(wù)任務(wù)調(diào)度平臺(tái)建設(shè)實(shí)踐|分享實(shí)錄-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://www.rwnh.cn/article10/cehodo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站制作、微信小程序、品牌網(wǎng)站建設(shè)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容