公有云的出現(xiàn)將大規(guī)模的HPC資源帶到了普通公司的身邊。在很多情況下,尤其是對(duì)于臨時(shí)性HPC項(xiàng)目來說,和內(nèi)部購買必要的計(jì)算資源相比,云解決方案在成本上更加行之有效。在公有云出現(xiàn)之前,只有少數(shù)公司,比如大型金融服務(wù)公司才有經(jīng)費(fèi)購買進(jìn)行高性能計(jì)算所必需的資源。
在去年,可以看到在市場(chǎng)上有相當(dāng)多的顧客需求,很多行業(yè)的許多公司針對(duì)大規(guī)模的HPC集群對(duì)軟件平臺(tái)進(jìn)行測(cè)試。當(dāng)我們首先向傳統(tǒng)的HPC供應(yīng)商描述需求時(shí),經(jīng)常被問到是哪個(gè)行業(yè)財(cái)團(tuán)或是政府機(jī)關(guān)在謀求進(jìn)行此項(xiàng)工作,因?yàn)檫@關(guān)系到HPC環(huán)境的規(guī)模。當(dāng)我們告訴他們這是針對(duì)個(gè)體公司而非大型組織機(jī)構(gòu)時(shí),我們?cè)獾搅藢?duì)方善意的質(zhì)疑。最后,我們決定親自構(gòu)建集群軟件,目標(biāo)是能夠在公有云和私有云上運(yùn)行該集群軟件。
當(dāng)開發(fā)軟件面對(duì)眾多的商業(yè)和開源選擇時(shí),我們發(fā)現(xiàn)多數(shù)選項(xiàng)都針對(duì)同時(shí)運(yùn)行在集群上不同的通用應(yīng)用進(jìn)行了優(yōu)化。為了適應(yīng)這類需求,集群依據(jù)安裝在單個(gè)計(jì)算節(jié)點(diǎn)上不同的操作系統(tǒng)進(jìn)行了硬分區(qū),而且不管應(yīng)用實(shí)際上需要多少計(jì)算資源,每臺(tái)機(jī)器都提前預(yù)留給了特定的應(yīng)用。這導(dǎo)致了計(jì)算資源的利用率相當(dāng)?shù)停骄寐手挥?0%左右。對(duì)于想創(chuàng)建HPC集群并作為一般資源然后將其租用給公眾使用的人來說,這綽綽有余。然而,這卻不是滿足典型的商業(yè)用戶需求的最佳策略。
HPC 解決方案
我們決定基于不同的原則構(gòu)建HPC軟件。最初由對(duì)該解決方案極為感興趣的某些用戶從事該項(xiàng)目。這類用戶尋求降低成本并縮短時(shí)間。完成這項(xiàng)工作他們不想花費(fèi)超過一百萬美元,而且如果花費(fèi)數(shù)周才能得到結(jié)果,那么他們也會(huì)認(rèn)為該解決方案將不會(huì)在對(duì)應(yīng)的市場(chǎng)上具有競(jìng)爭(zhēng)力。
當(dāng)和使用HPC資源的用戶進(jìn)行交流時(shí),我們注意到公司通常圍繞一個(gè)通用的計(jì)算平臺(tái)構(gòu)建單一的HPC應(yīng)用,或者是相關(guān)應(yīng)用的集合,而且這些用戶都希望能夠擁有一個(gè)能夠?qū)⒂?jì)算時(shí)間最小化并將可用資源的使用率最大化的軟件平臺(tái)。
HPC集群設(shè)計(jì)的不同之處在于圍繞一個(gè)原則,那就是能夠動(dòng)態(tài)編排單個(gè)核以確保最大化資源的利用率。集群運(yùn)行單個(gè)計(jì)算平臺(tái)并處理來自單個(gè)供應(yīng)商的相關(guān)需求。這考慮到了寬松的安全模型,而且來自不同計(jì)算任務(wù)的代碼能夠共享操作系統(tǒng),允許我們近乎實(shí)時(shí)地在工作任務(wù)之間切換核心。
該集群設(shè)計(jì)用來解決HPC領(lǐng)域相關(guān)問題的一個(gè)子集,而不是試圖構(gòu)建一個(gè)通用的,無所不包的計(jì)算解決方案。我們選擇處理的問題的子集從本質(zhì)上說是高度并行。單個(gè)計(jì)算需求的計(jì)算時(shí)間至少要比分發(fā)時(shí)間高一個(gè)數(shù)量級(jí),而且問題集合和解決方案結(jié)果足夠小能夠在網(wǎng)絡(luò)拓?fù)渲杏行У貍鬏敹曳职l(fā)時(shí)間要比整個(gè)任務(wù)的運(yùn)行時(shí)間低上幾個(gè)數(shù)量級(jí)。集群軟件被設(shè)計(jì)為在代碼級(jí)別整合進(jìn)計(jì)算密集型應(yīng)用中,而不是提供一系列通用的遠(yuǎn)程接口。
集群架構(gòu)
該集群設(shè)計(jì)用來將工作任務(wù)劃分為多個(gè)計(jì)算任務(wù),在可用的硬件資源上高效率地執(zhí)行計(jì)算任務(wù),并將計(jì)算結(jié)果返回給客戶端應(yīng)用。該集群對(duì)裸機(jī),運(yùn)行在OpenStack的私有云以及公有云有效。不同的部署場(chǎng)景被設(shè)計(jì)用來解決一系列的可用資源問題。當(dāng)用戶能夠支付為單個(gè)應(yīng)用分配固定計(jì)算資源的費(fèi)用時(shí),裸機(jī)是最有效的。私有云能夠很好地應(yīng)用于在應(yīng)用程序之間分配公司內(nèi)部硬件資源的場(chǎng)景,而且很容易部署一個(gè)不同的計(jì)算節(jié)點(diǎn)或者將HPC集群可用的計(jì)算資源轉(zhuǎn)移給其他需要計(jì)算資源的請(qǐng)求。當(dāng)突發(fā)的負(fù)載級(jí)別以及臨時(shí)的需求使購買硬件變得不切實(shí)際時(shí),公有云就是一個(gè)很好的部署場(chǎng)景。
HPC軟件使用Apache Libcloud在多個(gè)硬件平臺(tái)之間進(jìn)行部署。我們已經(jīng)成為L(zhǎng)ibcloud項(xiàng)目的主要貢獻(xiàn)者,而且已經(jīng)在很多軟件項(xiàng)目中使用了Libcloud項(xiàng)目。HPC軟件的頂層是HPC集群組件:調(diào)度程序,工作任務(wù)接口節(jié)點(diǎn),通信交換架構(gòu)以及計(jì)算節(jié)點(diǎn),用于高效率地控制工作任務(wù)的執(zhí)行。
組件
通信交換架構(gòu)由一組RabbitMQ節(jié)點(diǎn)構(gòu)成。為方便重新配置以及狀態(tài)信息,單個(gè)實(shí)例被分配給控制面板或者是數(shù)據(jù)面板,數(shù)據(jù)面板用來將任務(wù)傳送給計(jì)算節(jié)點(diǎn)并接收結(jié)果。沒有聚合RabbitMQ實(shí)例因?yàn)槲覀儼l(fā)現(xiàn)這會(huì)嚴(yán)重降低客戶端重新連接的速度。相反,客戶通信庫用于在相關(guān)的RabbitMQ實(shí)例之間分配請(qǐng)求,這提供了有效的可擴(kuò)展機(jī)制。通常情況下問題以及結(jié)果有效負(fù)載在帶內(nèi)發(fā)送。然而,為了增強(qiáng)RabbitMQ針對(duì)大型有效負(fù)載的可擴(kuò)展性,已經(jīng)預(yù)先部署了分布式緩存集群。分布式緩存配置的優(yōu)勢(shì)在于問題集合大于幾十KB,單個(gè)任務(wù)解決方案集合大于數(shù)百KB。
調(diào)度程序用來給單個(gè)計(jì)算任務(wù)分配計(jì)算資源。調(diào)度程序由一系列消息隊(duì)列和不同RabbitMQ實(shí)例的結(jié)果交付構(gòu)成,它通過控制面板通知計(jì)算節(jié)點(diǎn)的一個(gè)子集加入到隊(duì)列中。調(diào)度程序是一個(gè)復(fù)雜策略的集合,允許客戶為不同的用戶預(yù)留計(jì)算資源,并說明資源失敗的原因,而且還處理需要特定硬件比如GPU(GPU可能會(huì)出現(xiàn)在節(jié)點(diǎn)的子集當(dāng)中)的工作任務(wù)。當(dāng)集群地理位置相對(duì)接近,考慮到低延遲通信,調(diào)度決策的速率是100-200毫秒。
工作任務(wù)接口節(jié)點(diǎn)通過REST和WSDL接口提供了在集群中提交任務(wù)并檢索結(jié)果的方法。通過重新提交失敗的任務(wù),工作任務(wù)接口節(jié)點(diǎn)提供了冗余性。工作任務(wù)通過數(shù)據(jù)面板通信交換架構(gòu)提交給計(jì)算節(jié)點(diǎn)。在計(jì)算節(jié)點(diǎn)上客戶端應(yīng)用代碼能夠?qū)⒐ぷ魅蝿?wù)劃分為計(jì)算任務(wù)并提交給由調(diào)度程序所構(gòu)建的工作任務(wù)隊(duì)列,或者通過一系列的步驟繼續(xù)劃分為子任務(wù)。使用HPC資源進(jìn)行工作任務(wù)分解為計(jì)算成本昂貴的工作步驟在很短的時(shí)間內(nèi)完成提供了可能。最終用戶提供的客戶端代碼經(jīng)過優(yōu)化以最有效的方式被分解為各種任務(wù)類型,經(jīng)由類庫集合和經(jīng)過良好定義的API通過HPC軟件的接口。分解鏈條和結(jié)果積累是相反的,直到最終的結(jié)果集合被分發(fā)給接口主機(jī)供客戶獲取。工作任務(wù)鏈中的組件控制了任務(wù)并行程度而且可以告知資源需求的時(shí)間表,如果策略允許的話,調(diào)度程序可以轉(zhuǎn)移預(yù)先保留但未被充分使用的資源給其他的任務(wù)。
計(jì)算節(jié)點(diǎn)從指定的消息隊(duì)列取出單個(gè)任務(wù),獲取任務(wù)執(zhí)行所必須的帶外數(shù)據(jù),而且可以進(jìn)行最終的計(jì)算或者將任務(wù)分解為其他任務(wù),重新提交回隊(duì)列中。實(shí)際的計(jì)算軟件由客戶端應(yīng)用提供并通過編排層分發(fā)給單個(gè)節(jié)點(diǎn)。計(jì)算節(jié)點(diǎn)監(jiān)控分配給單個(gè)工作任務(wù)隊(duì)列的核心的使用率,如果分配的隊(duì)列空閑比較久或策略控制超時(shí),計(jì)算節(jié)點(diǎn)將從其他的隊(duì)列抓取任務(wù)。累積的計(jì)算結(jié)果將返回給結(jié)果隊(duì)列或者上載至分布式緩存集群并通過數(shù)據(jù)面板進(jìn)行通知。
性能
總體設(shè)計(jì)的結(jié)果就是從單個(gè)任務(wù)到數(shù)百個(gè)并行任務(wù),硬件資源的使用率都大大提高了。只要工作任務(wù)分解導(dǎo)致大量的并發(fā)任務(wù)多于總的可用計(jì)算核心,硬件資源的使用率達(dá)到95%是有可能的。
安全性
對(duì)公有云的安全性考慮是通過對(duì)連接到通信互聯(lián)架構(gòu)的類庫中的可選的有效負(fù)載加密以及限制節(jié)點(diǎn)通過分布式防火墻訪問實(shí)現(xiàn)的。
結(jié)論
在開始安裝時(shí),我們發(fā)現(xiàn)該解決方案顯著減少了常規(guī)時(shí)間,非常重要的工作在任務(wù)時(shí)間表上消除了數(shù)個(gè)星期。正式由于我們所做的工作,該集群令人注目,很多公司已經(jīng)準(zhǔn)備部署了。通過將之前在本地硬件上花費(fèi)一個(gè)月完成的工作整合到云中后只需要運(yùn)行三個(gè)小時(shí),公司不僅降低了成本而且建立了新的競(jìng)爭(zhēng)優(yōu)勢(shì),而且?guī)椭麄兏谩⒏斓胤?wù)客戶。
最后的內(nèi)容和公有云vs.私有云有關(guān)。很多廠商都提供了高密度,低成本的計(jì)算刀片,按照每個(gè)核心集群的成本是1萬美元,那么總的費(fèi)用是400萬美元,粗略計(jì)算使用亞馬遜的成本是6萬美元/月,盡管通過預(yù)訂或者按需購買成本可能更低。然而,通常來講,如果你需要持續(xù)使用計(jì)算資源,那么和購買硬件的成本相比,在一年之內(nèi)你可能要給亞馬遜支付更多的費(fèi)用。
然而,對(duì)于突發(fā)的、高度可擴(kuò)展計(jì)算問題,對(duì)許多公司來說,在云中運(yùn)行計(jì)算密集型任務(wù)是一個(gè)相當(dāng)棒的而且能夠支付得起的替代選擇。
英文原文出處:http://www.hpcinthecloud.com/hpccloud/2011-10-25/running_compute_intensive_tasks_in_the_cloud.html
原文鏈接:http://cloud.it168.com/a2011/1109/1270/000001270844.shtml