如何解決生物信息大規(guī)模計(jì)算的問題

前言

生物信息的一個(gè)重點(diǎn)就是數(shù)據(jù)的處理與分析,隨著基因行業(yè)在臨床和科研方面的應(yīng)用逐漸加深與擴(kuò)大,樣本數(shù)量的越來越多,加之分析過程本身也是高并發(fā)的過程,如何快速、高效、準(zhǔn)確的獲得分析結(jié)果變成了一個(gè)問題。為了應(yīng)對(duì)這個(gè)問題,我們需要大量的機(jī)器去處理這些作業(yè)。當(dāng)你有一臺(tái)機(jī)器,你可以隨時(shí)看著這臺(tái)機(jī)器是不是可以繼續(xù)投遞任務(wù),但是擁有一千臺(tái)甚至是一萬(wàn)臺(tái)機(jī)器的時(shí)候,那就已經(jīng)超出了你的能力程度了。

針對(duì)生物信息的計(jì)算需求,GeneDock開發(fā)了Flash分布式調(diào)度平臺(tái)(簡(jiǎn)稱Flash),它承擔(dān)了平臺(tái)的基因分析任務(wù)的管理,調(diào)度和監(jiān)控。

特點(diǎn)

Flash針對(duì)生物信息高并發(fā)、多框架的特點(diǎn),具有以下特點(diǎn)。

-?多框架:為了更加靈活的接入多種計(jì)算框架,F(xiàn)lash采用了雙層調(diào)度:第一層,由作業(yè)調(diào)度中心(Dispatch Center)統(tǒng)一資源調(diào)配,通過篩選后選擇合適的計(jì)算框架(Slave)給作業(yè);第二層,框架通過自身的調(diào)度器將資源分配給作業(yè)。
-?高擴(kuò)展性:大多分布式計(jì)算框架都具有其高可擴(kuò)展性。在雙層調(diào)度的特性下,作業(yè)調(diào)度中心的統(tǒng)一資源調(diào)配不會(huì)影響到各框架自身的擴(kuò)展性。
-?容錯(cuò)性:大規(guī)模的計(jì)算環(huán)境下,容錯(cuò)是保證系統(tǒng)高可用的一個(gè)保障。在各框架自身的容錯(cuò)性能下,作業(yè)調(diào)度中心會(huì)通過檢測(cè)各框架的心跳及時(shí)掌握框架的實(shí)時(shí)狀態(tài),同時(shí)各框架的服務(wù)也通過主備模式保證服務(wù)的高可用性。
-?安全與隔離:Flash各框架之間是完全隔離互不影響,各服務(wù)之間使用grpc通信并使用docker化部署。各框架執(zhí)行器使用docker執(zhí)行用戶任務(wù),保證資源的隔離與互不干擾。

總體架構(gòu)

圖1 Flash架構(gòu)圖

用戶通過Client/API向任務(wù)解析層提交一個(gè)完整的任務(wù)描述,通過任務(wù)解析層的DAG解析與資源預(yù)估,進(jìn)入作業(yè)調(diào)度中心進(jìn)行框架的選擇,獲得可運(yùn)行框架的信息并向框架提交作業(yè)??蚣芙邮盏阶鳂I(yè)后通過自身的資源管理器和調(diào)度器將作業(yè)分發(fā)給框架的執(zhí)行器。

雙層調(diào)度策略

圖2 雙層調(diào)度策略示意圖

作業(yè)調(diào)度中心

作業(yè)調(diào)度中心管理所有框架的使用和生命周期,對(duì)所有框架的資源進(jìn)行統(tǒng)一的調(diào)配。

作業(yè)進(jìn)入調(diào)度中心后,通過指定的框架名稱(Framework Name)、依賴作業(yè)的運(yùn)行框架(Dependency Filter)、cpu、memory、磁盤類型(disk type)、是否需要網(wǎng)絡(luò)(network)等篩選出可選運(yùn)行的框架。其中依賴作業(yè)的運(yùn)行框架的篩選可以保證數(shù)據(jù)的Locality,減少跨框架使用數(shù)據(jù)資源的發(fā)生,提高運(yùn)行效率。

框架自身調(diào)度模塊

每一個(gè)框架接入時(shí)會(huì)根據(jù)自身的特性實(shí)現(xiàn)或接入一個(gè)調(diào)度模塊,解析作業(yè)描述、管理和調(diào)控框架自身的計(jì)算資源。

框架接收到作業(yè)后,通過自身的調(diào)度模塊,通過對(duì)cpu、mem等(各框架有所差別)申請(qǐng)計(jì)算資源,選擇合適的機(jī)器執(zhí)行作業(yè)。

計(jì)算節(jié)點(diǎn)的執(zhí)行器接收到作業(yè)后,一般會(huì)進(jìn)行以下動(dòng)作:

-?作業(yè)初始化: 主要包括 Docker Image 的下載,運(yùn)行數(shù)據(jù)的下載
-?用戶作業(yè)命令執(zhí)行: 啟動(dòng)容器并執(zhí)行用戶提供的命令
-?作業(yè)資源回收: 主要包括上傳作業(yè)產(chǎn)出數(shù)據(jù),作業(yè)運(yùn)行日志,執(zhí)行器日志,資源監(jiān)控?cái)?shù)據(jù),作業(yè)報(bào)告數(shù)據(jù)等

高擴(kuò)展性

框架擴(kuò)展

雙層調(diào)度使得我們可以接入不同的計(jì)算框架,實(shí)現(xiàn)框架層的擴(kuò)展。目前我們已經(jīng)實(shí)現(xiàn)ECS框架和DIKU ON ECS框架。

計(jì)算資源的擴(kuò)展

計(jì)算資源的擴(kuò)展取決于框架自身的擴(kuò)展性能。好的擴(kuò)展性能,計(jì)算框架的資源增加對(duì)系統(tǒng)行為產(chǎn)生極小的變化。例如我們ECS框架借助高效的隊(duì)列服務(wù),降低了服務(wù)的通信開銷,增加了任務(wù)的處理速率,使得資源的水平擴(kuò)展獲得了極大的提升。

容錯(cuò)性

系統(tǒng)發(fā)生錯(cuò)誤時(shí),系統(tǒng)有對(duì)錯(cuò)誤進(jìn)行規(guī)避和恢復(fù)的能力。大規(guī)模的計(jì)算環(huán)境下,機(jī)器的故障會(huì)是一個(gè)常見的問題,這些故障包括機(jī)器的硬件與軟件等多個(gè)方面。

框架層的容錯(cuò)

由于機(jī)器故障,經(jīng)常會(huì)導(dǎo)致框架服務(wù)的不可用,我們通過以下兩點(diǎn)解決這種問題:

1. 作業(yè)調(diào)度中心通過ZooKeeper Watcher機(jī)制及時(shí)掌握各機(jī)器的健康狀況,當(dāng)出現(xiàn)服務(wù)不可用時(shí),會(huì)及時(shí)保存作業(yè)信息,等待服務(wù)的恢復(fù)。
2. 我們通過服務(wù)的主備模式,實(shí)現(xiàn)服務(wù)的自動(dòng)恢復(fù):

圖3 主備模式主動(dòng)恢復(fù)服務(wù)示意圖

1. 無(wú)故障情況下,框架有一個(gè)主服務(wù)和多個(gè)備服務(wù),主服務(wù)負(fù)責(zé)正常的rpc通信和處理,備服務(wù)只用來監(jiān)控主服務(wù)的狀態(tài)。
2. 當(dāng)主服務(wù)出現(xiàn)故障不可用時(shí),框架短暫出現(xiàn)為不可用狀態(tài),各備服務(wù)也發(fā)現(xiàn)主服務(wù)的不可用。
3. 備服務(wù)通過選主,產(chǎn)生新的主服務(wù),新的主服務(wù)恢復(fù)相關(guān)數(shù)據(jù)并開始正常的rpc通信和任務(wù)處理。

框架內(nèi)容錯(cuò)

各框架實(shí)現(xiàn)自身的容錯(cuò)機(jī)制:

1. 當(dāng)執(zhí)行器節(jié)點(diǎn)出現(xiàn)故障時(shí),可以批量重試改節(jié)點(diǎn)的所有作業(yè)
2. 當(dāng)執(zhí)行結(jié)束后,通過退出碼可以判斷某些作業(yè)的失敗原因,并且判斷是否該作業(yè)需要重試

安全與隔離

Flash平臺(tái)運(yùn)行的作業(yè),來自不同的用戶的臨床數(shù)據(jù),所以作業(yè)運(yùn)行的安全與隔離就尤為重要。

通信安全

Flash所有服務(wù)的通信通過grpc,保證通信的安全、快速。

框架的隔離

框架與框架之間相互獨(dú)立,框架只通過grpc與作業(yè)調(diào)度中心進(jìn)行通信,各框架可以是一套單獨(dú)的通信、運(yùn)行、存儲(chǔ)系統(tǒng),互不影響。

執(zhí)行環(huán)境的隔離

作業(yè)的最終執(zhí)行都在容器中,通常我們使用docker容器執(zhí)行作業(yè),docker在資源隔離、快速遷移、秒級(jí)啟動(dòng)等多方面的性能完全滿足我們對(duì)執(zhí)行環(huán)境的隔離需求。

docker registry的安全性

GeneDock將自身的鑒權(quán)系統(tǒng)接入到registry當(dāng)中,用戶可以安全的操作自身的docker鏡像。

展望

Flash平臺(tái)的基本功能都已經(jīng)實(shí)現(xiàn),但是后續(xù)在各方面性能都還有很大的提升價(jià)值

-?跨框架的重試:當(dāng)作業(yè)在框架內(nèi)重試失敗時(shí),根據(jù)失敗原因,可以進(jìn)行跨框架的作業(yè)重試
-?接入更多的框架:根據(jù)生物信息的計(jì)算需求,可以接入常用的sge、torque、Hadoop等計(jì)算框架
-?更大規(guī)模的計(jì)算資源:不斷延伸框架的擴(kuò)展性,實(shí)現(xiàn)更大規(guī)模的計(jì)算資源調(diào)度
-?作業(yè)資源估計(jì):隨著作業(yè)數(shù)的越來越多,通過機(jī)器學(xué)習(xí)實(shí)現(xiàn)更加精確的作業(yè)資源估計(jì)
-?更加豐富的可視化功能:滿足用戶對(duì)作業(yè)運(yùn)行時(shí)或運(yùn)行后的可視化需求

閱讀原文:https://www.genedock.com/blog/2017/03/25/20170325-flash/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容