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