蒲江
摘要:出于對計(jì)算能力的需求,我們期望無止境地提升計(jì)算能力,現(xiàn)在CPU制造商通過使用多核處理器來繼續(xù)增加計(jì)算性能并維持長期趨勢。我們要充分利用這巨大的能力,就必須學(xué)會讓應(yīng)用程序“同時多干幾件事”。然而,傳統(tǒng)的并行計(jì)算方法既受限制,開發(fā)起來又很困難。該文推薦了一個更加簡單、更具有靈活性的方法——軟件管道,來進(jìn)行并行處理,最大化利用資源實(shí)現(xiàn)事務(wù)處理程序的性能突破。
關(guān)鍵詞:并行計(jì)算;軟件管道;性能
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2017)22-0098-03
1并行計(jì)算與事務(wù)處理
如果你正在從事管理或采用關(guān)鍵業(yè)務(wù)應(yīng)用進(jìn)行工作,那你最有可能應(yīng)對性能問題。應(yīng)用程序無法控制不斷增加的數(shù)據(jù)量,而它又不能進(jìn)行擴(kuò)展?jié)M足新的需求。你要達(dá)到較高或更高的性能水準(zhǔn),想要性能增加一個數(shù)量級,應(yīng)用程序能夠處理的事物數(shù)量也要增大。當(dāng)今計(jì)算環(huán)境中只有一個方法能達(dá)到這個目的:利用并行計(jì)算架構(gòu),在同一時間執(zhí)行多個任務(wù)。
并行架構(gòu)的基本概念是:給定一系列要執(zhí)行的任務(wù),將這些任務(wù)分到離散的各個組,部分組或全部組可以在同一時間、同一計(jì)算資源上進(jìn)行處理。然而,使用現(xiàn)有的業(yè)務(wù)應(yīng)用程序很難做到。無論是面向整體的或是面向?qū)ο蟮?,大部分程序是緊耦合的,很難分解成若干并行的步驟。
目前,重要的并行計(jì)算技術(shù)有三種:操作系統(tǒng)級別的機(jī)械式方案、自動化網(wǎng)絡(luò)路由和網(wǎng)格計(jì)算。
1.1操作系統(tǒng)級別的機(jī)械式方案
1.1.1對稱多處理
SMP在一臺物理計(jì)算機(jī)上自動地分發(fā)應(yīng)用任務(wù)到多個處理器上進(jìn)行處理,該任務(wù)共享內(nèi)存和其他硬件資源。這種方法高效,易于實(shí)現(xiàn),因?yàn)橛脩舨恍枰私釹MP如何劃分工作負(fù)載等詳細(xì)信息。
但是為獲得最大性能,用戶必須編寫多線程邏輯應(yīng)用。另外,SMP對于資源競爭很難調(diào)試。例如,共享軟件組在運(yùn)行時遇到問題,那么發(fā)現(xiàn)問題的原因非常困難并需要耗費(fèi)大量時間。還有,處理器之間的資源共享是緊耦合的,也不能對任何特定應(yīng)用進(jìn)行優(yōu)化。當(dāng)對魔蝎應(yīng)用進(jìn)行擴(kuò)展時,關(guān)鍵點(diǎn)的共享資源將成為系統(tǒng)的瓶頸。所以有可能業(yè)務(wù)應(yīng)用在8個處理器上取得重大成果,但擴(kuò)展到16個處理器時,看不到任何性能增益。
1.1.2集群
集群是另一種被廣泛應(yīng)用的機(jī)械式解決方案。在集群中獨(dú)立的物理計(jì)算機(jī)通過網(wǎng)絡(luò)共享應(yīng)用的工作負(fù)載。集群技術(shù)包含了一些低效的功能如果不使用集中式資源,無論怎樣,系統(tǒng)不得不將關(guān)鍵信息從一個節(jié)點(diǎn)復(fù)制到另一個節(jié)點(diǎn)上,成為系統(tǒng)瓶頸。如同SMP,集群往往在一定程度上會有一些效果,但會嚴(yán)重削弱添加硬件帶來的回報。
1.2自動化網(wǎng)絡(luò)路由
在這種技術(shù)中,可以使用一些預(yù)定邏輯來劃分應(yīng)用請求。一個通用方法是輪詢路由。該系統(tǒng)將請求在一組物理計(jì)算機(jī)中逐個均勻分配,每臺計(jì)算機(jī)提供完全相同的應(yīng)用功能。雖然這種方法對某些應(yīng)用程序有用,但作用有限。此外,事務(wù)處理程序通常要求嚴(yán)格的處理次序,簡單的輪詢邏輯無法提供相應(yīng)的處理能力。
1.3網(wǎng)格計(jì)算
在網(wǎng)格計(jì)算中,系統(tǒng)將分散的任務(wù)分布在網(wǎng)絡(luò)中多臺計(jì)算機(jī)上。典型的網(wǎng)格架構(gòu)包括一個集中式的任務(wù)調(diào)度器,它在網(wǎng)絡(luò)中分布任務(wù)并與其他計(jì)算設(shè)備進(jìn)行協(xié)作。網(wǎng)格計(jì)算可以提供比前兩種方法高得多的吞吐率,但它給開發(fā)者帶來沉重的負(fù)擔(dān)。用戶必須針對任務(wù)分割與部屬寫出明確的代碼,并對處理后的結(jié)構(gòu)進(jìn)行重組。
1.4事務(wù)處理的并行計(jì)算解決方案:軟件管道
軟件管道是處理一種良好的事務(wù)處理的并行計(jì)算解決方案。這個架構(gòu)具有很高的伸縮性與彈性。它執(zhí)行非固定的商業(yè)服務(wù),并在有效地計(jì)算資源上實(shí)現(xiàn)吞吐量最大化,來滿足大量復(fù)雜的事務(wù)處理需求。
軟件管道的基本組成部分是管道本身,其定義是:一種以控制順序的方式對業(yè)務(wù)流程的離散任務(wù)進(jìn)行調(diào)用的執(zhí)行設(shè)備。用戶可以通過優(yōu)先級來控制任務(wù)執(zhí)行順序,或按照輸入消息的順序來控制業(yè)務(wù)流程,或二者皆有。
分配器通過對消息內(nèi)容計(jì)算來路由服務(wù)請求,路由過程基于配置規(guī)則。修改配置規(guī)則不需要改變商業(yè)服務(wù)。用戶可以使用優(yōu)先級路由請求,也可以按照消息到來順序路由請求,或者二者結(jié)合使用。如圖l所示,多個請求到達(dá)第一個分配器后,分配器將請求分配到三個管道中,第二個管道將一個請求分派到第三個管道,第三個管道向其他分配器發(fā)送請求,分配器就將多個請求拆分在五個管道上進(jìn)行處理。
2管道理論
2.1基本規(guī)律
在流體力學(xué)中,首要且最基本的規(guī)則是輸入流等于輸出流。在軟件管道中,將這個首要規(guī)則轉(zhuǎn)換為輸入等于輸出。將計(jì)算系統(tǒng)看作是一個事務(wù)流,輸入事務(wù)的速率是管道中未處理的原料,首要規(guī)則的含義是處理或輸出的事務(wù)不能多于可提供的輸入事務(wù)。
2.1.1流量限制
最重要的是知道管道系統(tǒng)如何對流量進(jìn)行限制。在管道上的任何約束都對系統(tǒng)的整體流量產(chǎn)生限制作用。如果系統(tǒng)中任何一個組件處理事務(wù)不能達(dá)到輸入速度,那么這個系統(tǒng)的處理速度會相應(yīng)的減小。換句話說,系統(tǒng)的處理速度總是受限于最慢的組件。
2.1.2輸出流的約束
如果存在對輸出流的限制,那么它會對系統(tǒng)的總流量產(chǎn)生約束。例如,一個大型系統(tǒng)是處理事務(wù)的最后倉儲,但是它對于多個輸入源來說處理速度太慢了以至于不能接收事務(wù),那么它就會上鎖并拒絕接收所有的事務(wù)。整體系統(tǒng)的處理速度要么減緩甚至完全停止,有時還會造成整個應(yīng)用的崩潰。
2.2軟件管道規(guī)則
2.2.1規(guī)則1
輸入等于輸出。不管處理多少事務(wù),系統(tǒng)不能接受超過它所能處理的事務(wù)量。因此在應(yīng)用程序設(shè)計(jì)中,應(yīng)注意如下幾項(xiàng)。
確定輸入事務(wù)的供應(yīng)是充足的。
識別系統(tǒng)中那個組件或過程處理速率最慢,那么該組件或過程控制了系統(tǒng)的吞吐率,需要對其優(yōu)化。endprint
識別不能承擔(dān)負(fù)載的外部系統(tǒng)或應(yīng)用。這些系統(tǒng)或應(yīng)用會成為瓶頸。
預(yù)測并消除系統(tǒng)中的瓶頸點(diǎn)。
2.2.2規(guī)則2
下游組建或處理過程的能力(處理事務(wù)速率)要等于或超過上有組件或過程的輸入速率。如果不是這樣,就必須優(yōu)化下游組件或過程,或者使用軟件管道分配器來支持并行處理并控制負(fù)載。另一個使用管道分配器的優(yōu)點(diǎn)是可伸縮性??梢再x予每個管道一個指定的硬件資源;分配器分配事務(wù)到每個管道中,每個管道獨(dú)立且并行地執(zhí)行各自的事務(wù)。因?yàn)楣艿乐g完全獨(dú)立,添加更多的硬件資源也給管道帶來了線性或近線性的擴(kuò)展能力。再進(jìn)一步考慮,若管道分配器負(fù)擔(dān)過多的管道,最終分配器自身成為系統(tǒng)瓶頸。
3銀行ATM系統(tǒng)實(shí)例
一家擁有ATM機(jī)分布式網(wǎng)絡(luò)的大型銀行,它通過訪問集中式的資源來處理賬戶交易事務(wù)。交易量變化很大、響應(yīng)時間非常關(guān)鍵、關(guān)鍵交易規(guī)則必須執(zhí)行——所有這些使得銀行的后段應(yīng)用使用并行管道成為一個理想的用例。
在ATM應(yīng)用中每筆交易主要處理流程是1)對用戶授權(quán);2)驗(yàn)證交易;3)執(zhí)行交易過程。
一個典型的ATM應(yīng)用具有如下關(guān)鍵需求:
它必須能在多處處理大量的用戶請求。
它必須阻止每個客戶從他的賬戶透支。
處理事務(wù)過程中維持FIFO順序,防止任何兩個用戶訪問相同的賬戶并防止透支。
使用軟件管道設(shè)計(jì)滿足以上需求的應(yīng)用。每個輸入的消息都包含能夠?qū)⑵溥M(jìn)行路由分組的信息,稱之為輸入關(guān)鍵值信息。分配器使用輸入關(guān)鍵值信息為每個事務(wù)選擇管道。分配器把下面XML格式的輸入信息作為接收事務(wù)的輸入關(guān)鍵值信息。
每當(dāng)消息到達(dá)分配器后,使用文檔對象模型(DOM)或其他的解析機(jī)制對XML文件進(jìn)行解析并機(jī)率下branch_id。然后分配器按照branch_id降序排列分派事務(wù)到管道中去。表1顯示了事務(wù)分組與管道名稱。ATM應(yīng)用軟件管道架構(gòu)如圖2所示。
4小結(jié)
軟件管道架構(gòu)是克服并管理構(gòu)建事務(wù)處理時面對處理性能問題挑戰(zhàn)的解決方案。它是處理這些問題的一種新方法,可以看作一種能夠預(yù)測出產(chǎn)量的技術(shù)。當(dāng)前它在計(jì)算機(jī)科學(xué)與事務(wù)處理開發(fā)中才剛剛興起,還需要進(jìn)一步改善它的結(jié)構(gòu)和增加功能。尤其是以下幾點(diǎn):
健壯的管道框架:文中的管道架構(gòu)只是一個參考架構(gòu),在很多方面需要提高,尤其是架構(gòu)的健壯性方面。
新的路由模式:分配器在分配消息時,采用不同的路由模式會有不同的效果??梢圆捎幂喸兡J?、基于內(nèi)容路由模式,還可以擴(kuò)展到基于事務(wù)類型或帶優(yōu)先級的內(nèi)容路由等等。
動態(tài)的管道:與路由模式相似,一個自動解析引擎動態(tài)地創(chuàng)建管道并管理每個管道的負(fù)載。應(yīng)用程序可以是包含管道化的服務(wù)組合,并根據(jù)運(yùn)行中的工作負(fù)載的變化性能自動地調(diào)整。
為適應(yīng)前所未有的需求,事務(wù)處理必須提升一個數(shù)量級以上的性能。在SOA環(huán)境中改進(jìn)性能更為重要,它比過去的計(jì)算架構(gòu)要求更強(qiáng)的計(jì)算能力。今天多核服務(wù)器可以達(dá)到這種商業(yè)性能的要求,但是只有很少的事務(wù)處理程序從中獲益。本文推薦了一個更加簡單、更具有靈活性的方法來進(jìn)行并行處理,最大化資源利用實(shí)現(xiàn)事務(wù)處理程序的性能突破。