周 盛,鄭 瑋
(航空工業(yè)西安飛機(jī)工業(yè)(集團(tuán))有限責(zé)任公司,陜西 西安 710089)
大型飛機(jī)因其在產(chǎn)品設(shè)計(jì)與制造方面的高度復(fù)雜性,不僅是航空工業(yè)水平的體現(xiàn),而且是反映一個(gè)國家綜合國力的重要標(biāo)志[1]。因此,不斷提高大型飛機(jī)制造的技術(shù)水平、提升大型飛機(jī)生產(chǎn)制造的管理水平成為了重要課題。生產(chǎn)計(jì)劃是飛機(jī)生產(chǎn)制造中的核心環(huán)節(jié),直接用來指導(dǎo)車間對零組件進(jìn)行投產(chǎn)以及交付的時(shí)間節(jié)點(diǎn)。對于保障飛機(jī)裝配進(jìn)度,在整個(gè)生產(chǎn)管理周期中起著重要的作用。尤其是在脈動線成為飛機(jī)裝配模式的主流趨勢條件下[2],如何確保生產(chǎn)計(jì)劃的實(shí)時(shí)性和可靠性,成為保障生產(chǎn)、提升生產(chǎn)效率的核心問題之一[3]。該文通過使用分布式與并行計(jì)算技術(shù),依據(jù)一定的規(guī)則將整個(gè)運(yùn)算任務(wù)劃分為若干個(gè)子任務(wù)同時(shí)展開并行計(jì)算,顯著提高了計(jì)算效率。
物料需求計(jì)劃(Material Requirements Planning,MRP)是飛機(jī)生產(chǎn)計(jì)劃的核心算法,大型飛機(jī)具有BOM結(jié)構(gòu)復(fù)雜、產(chǎn)品構(gòu)型眾多等特點(diǎn),使得MRP運(yùn)算的復(fù)雜度遠(yuǎn)高于其他工業(yè)產(chǎn)品。同時(shí)由于大飛機(jī)生產(chǎn)過程中頻繁出現(xiàn)工程更改問題,頻繁的工程更改是造成生產(chǎn)數(shù)據(jù)不完整、不一致、生產(chǎn)計(jì)劃脫節(jié)等一系列相關(guān)問題的主要原因。目前MRP運(yùn)算中存在的算法實(shí)時(shí)性較低、生產(chǎn)計(jì)劃變更執(zhí)行響應(yīng)不及時(shí)等問題,已成為飛機(jī)生產(chǎn)管控計(jì)劃和執(zhí)行的制約因素[4]。
傳統(tǒng)的MRP運(yùn)算算法是基于單件小批計(jì)劃管理模式,圍繞大批量零部件生產(chǎn)計(jì)劃展開的。而大飛機(jī)生產(chǎn)計(jì)劃具有生產(chǎn)周期長,產(chǎn)品裝配過程復(fù)雜和同時(shí)包含零件生產(chǎn)、部件裝配、整機(jī)裝配等多層次、多階段的面向項(xiàng)目混合生產(chǎn)計(jì)劃的特點(diǎn),因此大飛機(jī)的MRP算法與傳統(tǒng)面向大批量制造的MRP算法具有顯著差異。
大飛機(jī)的MRP算法基于層次分解的思想,結(jié)合飛機(jī)PBOM和MBOM結(jié)構(gòu),將MRP分解為推拉結(jié)合的兩個(gè)層次而降低復(fù)雜問題的解決難度,達(dá)到有效解決復(fù)雜問題的目的。
在MRP運(yùn)算理論中,核心是根據(jù)BOM數(shù)據(jù)逐層展開分解,形成生產(chǎn)計(jì)劃。在飛機(jī)制造過程的典型BOM分為PBOM、MBOM,其中PBOM從飛機(jī)零件設(shè)計(jì)階段開始形成,到生產(chǎn)全部完成最終確定;而MBOM是從飛機(jī)裝配過程中形成,當(dāng)飛機(jī)裝配完成后完全確定。這就與傳統(tǒng)的BOM結(jié)構(gòu)穩(wěn)定后再進(jìn)行MRP運(yùn)算的方式有明顯的區(qū)別[5]。
同時(shí)飛機(jī)生產(chǎn)過程具有并行特性,由于飛機(jī)生產(chǎn)具有長周期特性,飛機(jī)的零組件生產(chǎn)不能等待所有前置條件全部具備才展開。大量工作需要并行協(xié)同進(jìn)行,包括工藝準(zhǔn)備、材料采購、工裝準(zhǔn)備,這是飛機(jī)研制生產(chǎn)規(guī)律的必然要求[6]。
因此,在飛機(jī)的生產(chǎn)計(jì)劃過程中不能直接使用針對大批量生產(chǎn)、結(jié)構(gòu)穩(wěn)定、串行管理模式的傳統(tǒng)MRP算法。需要在沒有單一和穩(wěn)定的BOM作為MRP算法的輸入前提下,將PBOM與MBOM有機(jī)結(jié)合,形成零件生產(chǎn)和裝配拉動結(jié)合的MRP算法。在早期投產(chǎn)階段,尚不具備MBOM的情況下,使用PBOM作為MRP運(yùn)算的輸入,進(jìn)行需要零件投產(chǎn)的生產(chǎn)計(jì)劃運(yùn)算從而保證零件投產(chǎn)的順利進(jìn)行。在進(jìn)入裝配階段時(shí),整機(jī)或部件的裝機(jī)清單與裝配順序均已確定,裝配所需的AO定版完成,此時(shí),可以根據(jù)MBOM中AO包含的零件配套清單確定飛機(jī)最終的零件需求。因此,進(jìn)行裝配拉動運(yùn)算得到裝機(jī)所需的零件需求,并對前序PBOM運(yùn)算結(jié)果進(jìn)行反饋。通過推拉結(jié)合,以PBOM進(jìn)行零件投產(chǎn),以MBOM中AO的零件配套需求對投產(chǎn)階段的投產(chǎn)計(jì)劃進(jìn)行補(bǔ)充和完善,保證生產(chǎn)計(jì)劃運(yùn)算管理的順利進(jìn)行。
大飛機(jī)的MRP運(yùn)算還有如下特性:1)更改頻繁。在飛機(jī)設(shè)計(jì)和生產(chǎn)過程中更改非常頻繁,為了及時(shí)響應(yīng)工程更改,保證生產(chǎn)現(xiàn)場與工藝設(shè)計(jì)數(shù)據(jù)的同步和一致,需要針對同一主計(jì)劃需求每日多次進(jìn)行MRP運(yùn)算。2)運(yùn)算復(fù)雜。由于飛機(jī)結(jié)構(gòu)的復(fù)雜性,飛機(jī)BOM結(jié)構(gòu)的層次數(shù)量和節(jié)點(diǎn)數(shù)量遠(yuǎn)超過一般工業(yè)產(chǎn)品,MRP運(yùn)算的運(yùn)算復(fù)雜度很高。
在大飛機(jī)MRP運(yùn)算中存在運(yùn)算邏輯復(fù)雜、運(yùn)算次數(shù)頻繁、運(yùn)算數(shù)據(jù)規(guī)模大、需要進(jìn)行多輪運(yùn)算等特點(diǎn)。傳統(tǒng)的單機(jī)MRP運(yùn)算在處理大規(guī)模運(yùn)算時(shí),受到單一計(jì)算節(jié)點(diǎn)處理能力的限制,通常會使計(jì)算時(shí)間超出預(yù)期,甚至無法產(chǎn)生計(jì)算結(jié)果。因此,在大飛機(jī)MRP運(yùn)算中需要引入新的計(jì)算理論和計(jì)算技術(shù),突破傳統(tǒng)的單機(jī)MRP運(yùn)算限制。
秦明月再問了一些問題,已經(jīng)沒什么價(jià)值了,他掏出名片給兩個(gè)搬運(yùn)工,告訴他們要是再想起什么可以給他打電話,搬運(yùn)工如釋重負(fù)地走了。
分布式計(jì)算是通過計(jì)算機(jī)網(wǎng)絡(luò)將同一網(wǎng)絡(luò)區(qū)域中的大量計(jì)算機(jī)組合,形成一個(gè)較大的計(jì)算系統(tǒng)。將單一的計(jì)算任務(wù)拆分為若干較小的計(jì)算任務(wù),并在不同的計(jì)算節(jié)點(diǎn)上分別完成這些任務(wù),最終將各個(gè)節(jié)點(diǎn)的運(yùn)算結(jié)果進(jìn)行匯總聚合。通過分布式計(jì)算可以在更有限的時(shí)間內(nèi),完成更大規(guī)模計(jì)算的任務(wù)[7]。
相對于傳統(tǒng)的單機(jī)計(jì)算,分布式計(jì)算具有以下優(yōu)勢:1)通過分布式計(jì)算平臺而非人工的方式進(jìn)行計(jì)算任務(wù)的管理;2)分布式計(jì)算可以充分利用企業(yè)網(wǎng)絡(luò)中的大量計(jì)算資源在支出與性能之間尋找到一個(gè)平衡點(diǎn);3)分布式計(jì)算中,各個(gè)計(jì)算節(jié)點(diǎn)運(yùn)算數(shù)據(jù)及計(jì)算任務(wù)均是相對獨(dú)立的,有利于構(gòu)建高度可用的系統(tǒng)。
對于包括MRP運(yùn)算在內(nèi)的分布式計(jì)算核心需要考慮的是分割后的計(jì)算任務(wù)調(diào)度算法設(shè)計(jì),調(diào)度算法的核心目標(biāo)是將計(jì)算任務(wù)根據(jù)一定的策略分配到盡可能最優(yōu)的執(zhí)行節(jié)點(diǎn)。調(diào)度算法的優(yōu)劣,對于分布式計(jì)算平臺的執(zhí)行效率起著關(guān)鍵性作用[8]。
常見的任務(wù)調(diào)度算法有集中式任務(wù)調(diào)度算法和分布式任務(wù)調(diào)度算法。集中式任務(wù)調(diào)度算法是指由單一的計(jì)算機(jī)調(diào)度任務(wù),使用中心化的方式管理資源和調(diào)度任務(wù)。集中式調(diào)度算法的主要問題在于中心化節(jié)點(diǎn)的存在,導(dǎo)致整體的可容錯(cuò)性與可擴(kuò)展性較差[9]。為了解決這一問題逐漸演變出分布式任務(wù)調(diào)度模式,在分布式任務(wù)調(diào)度模式中沒有中央計(jì)算機(jī)統(tǒng)一調(diào)度任務(wù),任務(wù)調(diào)度及控制由每個(gè)計(jì)算節(jié)點(diǎn)完成,各個(gè)計(jì)算資源的節(jié)點(diǎn)可以提供任務(wù)調(diào)度方法,通過節(jié)點(diǎn)間的協(xié)調(diào)判斷計(jì)算任務(wù)的執(zhí)行隊(duì)列[10]。由于系統(tǒng)中取消了中央處理單元,所有的調(diào)度器之間也不進(jìn)行系統(tǒng)間通信,因此具有以下優(yōu)勢:1)減少調(diào)度延時(shí);2)取消中心化調(diào)度器,使用多個(gè)調(diào)度單元并行執(zhí)行,保證計(jì)算的并行度;3)使用多隨機(jī)的調(diào)度方法,提升計(jì)算任務(wù)的健壯性。
綜上所述,采用去中心化調(diào)度的分布式調(diào)度算法在大規(guī)模MRP運(yùn)算的場景下具有更高的計(jì)算并行度和可靠性,因此該系統(tǒng)的核心算法設(shè)計(jì)采用了分布式調(diào)度算法。
系統(tǒng)架構(gòu)如圖1所示。數(shù)據(jù)預(yù)處理模塊主要對計(jì)算過程中需要頻繁查詢的基礎(chǔ)數(shù)據(jù)進(jìn)行預(yù)處理和預(yù)加載,以提升數(shù)據(jù)讀取和計(jì)算效率;任務(wù)調(diào)度模塊接收需要完成的MRP運(yùn)算任務(wù),并將計(jì)算任務(wù)差分后分發(fā)到合適的計(jì)算節(jié)點(diǎn);計(jì)算執(zhí)行模塊對MRP計(jì)算任務(wù)進(jìn)行分布式執(zhí)行運(yùn)算,執(zhí)行完成后上報(bào)任務(wù)執(zhí)行的結(jié)果和狀態(tài);消息隊(duì)列模塊提供任務(wù)的分發(fā)和傳遞通道,完成運(yùn)算結(jié)果數(shù)據(jù)回傳。運(yùn)算日志模塊提供對任務(wù)調(diào)度執(zhí)行日志的查看和狀態(tài)監(jiān)控功能。
圖1 系統(tǒng)架構(gòu)框圖
在進(jìn)行MRP運(yùn)算前,需要對數(shù)據(jù)進(jìn)行初始化操作,加快數(shù)據(jù)讀取,將物料、工藝路線、BOM實(shí)例等數(shù)據(jù)初始化進(jìn)內(nèi)存緩存Redis中,后續(xù)運(yùn)算可直接根據(jù)Key獲取對應(yīng)數(shù)據(jù),避免頻繁查詢數(shù)據(jù)庫。由于MRP需要預(yù)處理的數(shù)據(jù)文件規(guī)模龐大,該系統(tǒng)采用MapReduce的思想,將數(shù)據(jù)文件分為幾個(gè)小的分區(qū),并通過K-V鍵值對的方法將數(shù)據(jù)散列存儲在分布式內(nèi)存緩存集群中,保證可承載的數(shù)據(jù)量[11]。
任務(wù)調(diào)度模塊是分布式并行MRP系統(tǒng)中的核心模塊,其算法如圖2所示。在MRP計(jì)算過程開始前,首先構(gòu)建出當(dāng)前MRP計(jì)算的執(zhí)行計(jì)劃樹,計(jì)劃樹記錄了并行計(jì)算任務(wù)之間的關(guān)聯(lián)關(guān)系。當(dāng)并行計(jì)算任務(wù)由于異常故障丟失,任務(wù)調(diào)度模塊可以根據(jù)計(jì)劃樹重新恢復(fù)丟失的計(jì)算任務(wù)并再次分發(fā)出去。任務(wù)調(diào)度模塊同時(shí)對外部提供了可視化界面,界面實(shí)時(shí)動態(tài)展示了正在運(yùn)行中的MRP運(yùn)算任務(wù)。任務(wù)的分布式與容錯(cuò)恢復(fù)對用戶是完全透明的,任務(wù)調(diào)度模塊將計(jì)算任務(wù)的調(diào)度控制節(jié)點(diǎn)和任務(wù)執(zhí)行計(jì)算節(jié)點(diǎn)均納入統(tǒng)一的資源管理。系統(tǒng)引入負(fù)載均衡,實(shí)時(shí)監(jiān)控每個(gè)節(jié)點(diǎn)的運(yùn)行情況,并根據(jù)節(jié)點(diǎn)的運(yùn)行狀況下發(fā)計(jì)算任務(wù)。
圖2 任務(wù)調(diào)度算法
為了使系統(tǒng)有效發(fā)揮分布式計(jì)算的優(yōu)勢,將接收到MRP運(yùn)算任務(wù)的調(diào)度數(shù)據(jù)散列到不同的調(diào)度節(jié)點(diǎn)上。當(dāng)任意一個(gè)調(diào)度節(jié)點(diǎn)在收到MRP運(yùn)算任務(wù)后,將運(yùn)算任務(wù)拆解為多個(gè)子任務(wù),然后再將子任務(wù)分發(fā)出去,多個(gè)計(jì)算節(jié)點(diǎn)共同完成計(jì)算。在計(jì)算過程中若發(fā)現(xiàn)任務(wù)運(yùn)算量過高,則不斷拆解成子任務(wù),直到節(jié)點(diǎn)計(jì)算完成后將計(jì)算結(jié)果反饋為發(fā)送計(jì)算完成的消息。通過并行調(diào)度算法的方式實(shí)現(xiàn)任務(wù)并行調(diào)度分發(fā),降低了調(diào)度節(jié)點(diǎn)單機(jī)負(fù)載[12]。為了支持迅速完成的任務(wù)調(diào)度規(guī)則計(jì)算,每次任務(wù)調(diào)度的數(shù)據(jù)均保存在內(nèi)存中而不是磁盤上,這樣可以減少每次調(diào)度對磁盤I/O的占用,降低等待時(shí)間,提高任務(wù)分發(fā)調(diào)度效率[13]。
在計(jì)算執(zhí)行模塊中,需要根據(jù)任務(wù)調(diào)度模塊分發(fā)的計(jì)算任務(wù)讀取運(yùn)算數(shù)據(jù)并完成計(jì)算,其流程如圖3所示。
圖3 計(jì)算執(zhí)行流程圖
MRP運(yùn)算任務(wù)執(zhí)行節(jié)點(diǎn)根據(jù)MRP運(yùn)算的運(yùn)算策略,拉取策略中的物料、架次及對應(yīng)主計(jì)劃的信息,生成MRP運(yùn)算日志。同時(shí)發(fā)起MRP運(yùn)算任務(wù),即將以上信息作為消息體發(fā)送到消息隊(duì)列模塊中。
接收MRP運(yùn)算任務(wù)后,執(zhí)行節(jié)點(diǎn)的MRP運(yùn)算單元實(shí)時(shí)監(jiān)聽消息隊(duì)列模塊中MRP運(yùn)算所對應(yīng)的消息隊(duì)列,同時(shí)接收消息體,開始進(jìn)行MRP運(yùn)算。
MRP運(yùn)算過程中根據(jù)預(yù)處理結(jié)果構(gòu)建出單機(jī)BOM樹,自頂向下逐層遍歷,生成WO,然后保存在對應(yīng)的TEMP臨時(shí)表中。在從上向下遍歷的過程中開始執(zhí)行分片操作,即將每個(gè)子節(jié)點(diǎn)的信息作為消息體發(fā)送到MQ中,形成一個(gè)子任務(wù),其余運(yùn)算單元繼續(xù)監(jiān)聽隊(duì)列。當(dāng)該機(jī)型架次的MRP運(yùn)算完成后,發(fā)送消息到消息隊(duì)列模塊中,通知MRP服務(wù)更改運(yùn)算日志狀態(tài)為成功。
裝配拉動運(yùn)算過程中,由于裝配計(jì)劃開完工日期的計(jì)算是在編制裝配拉動計(jì)劃部分來完成的。然后在構(gòu)建BOM樹的過程中將時(shí)間貫徹到對應(yīng)節(jié)點(diǎn)上,最終由MRP運(yùn)算的過程進(jìn)行最終貫徹,即輸出到WO上。
消息隊(duì)列模塊負(fù)責(zé)完成系統(tǒng)中實(shí)時(shí)通信消息的傳遞,在該系統(tǒng)中有3種類型消息在消息隊(duì)列模塊投遞:1)任務(wù)調(diào)度生產(chǎn)的正向MRP計(jì)算任務(wù)消息,計(jì)算任務(wù)消息為消息隊(duì)列模塊主要投遞的消息類型,同時(shí)數(shù)據(jù)量級是較大的;2)MRP運(yùn)算完成消息通知是計(jì)算執(zhí)行模塊任務(wù)計(jì)算過程中,判斷全部MRP計(jì)算任務(wù)均已處理完后發(fā)出的消息通知,調(diào)度模塊收到該類型消息后記錄MRP運(yùn)算任務(wù)日志;3)計(jì)算異常反饋類型消息,計(jì)算執(zhí)行模塊任務(wù)計(jì)算過程中發(fā)生異常時(shí)會及時(shí)發(fā)出異常消息反饋,調(diào)度模塊收到異常反饋后會做出相應(yīng)的處理[14]。
運(yùn)算日志子模塊主要包括日志視圖查看、任務(wù)日志搜索和任務(wù)監(jiān)控告警。日志視圖主要分為計(jì)算任務(wù)調(diào)度日志視圖與計(jì)算節(jié)點(diǎn)任務(wù)執(zhí)行日志視圖;日志搜索功能根據(jù)關(guān)鍵字等條件搜索任務(wù)日志,并按開始時(shí)間顯示任務(wù)歷史調(diào)度日志;任務(wù)監(jiān)控報(bào)警模塊對調(diào)度或執(zhí)行失敗后的技術(shù)任務(wù)進(jìn)行監(jiān)控,并發(fā)出相應(yīng)的報(bào)警,通知運(yùn)維管理人員介入重試和恢復(fù)操作[15]。
為了驗(yàn)證基于大規(guī)模分布式并行MRP計(jì)算的綜合性能和穩(wěn)定性,該文與傳統(tǒng)的單機(jī)計(jì)算展開了對比實(shí)驗(yàn),驗(yàn)證分布式并行算法的穩(wěn)定性[16]。
為完成上述測試,需要基于參數(shù)相同的軟硬件和計(jì)算任務(wù)規(guī)模,設(shè)計(jì)測試參數(shù)如表1所示。
表1 測試參數(shù)
運(yùn)算效率是該系統(tǒng)的核心優(yōu)化指標(biāo),通過對單位時(shí)間內(nèi)完成計(jì)算任務(wù)的數(shù)量進(jìn)行測試可以表征系統(tǒng)的運(yùn)算效率。
如圖4所示,隨著運(yùn)算時(shí)間的增加,傳統(tǒng)單機(jī)運(yùn)算與文中分布式并行計(jì)算的MRP運(yùn)算完成次數(shù)有所增加;但該系統(tǒng)實(shí)現(xiàn)的分布式并行MRP算法效率始終高于傳統(tǒng)平臺。當(dāng)持續(xù)運(yùn)算10 min時(shí),傳統(tǒng)單機(jī)運(yùn)算完成兩次MRP運(yùn)算,文中的分布式計(jì)算完成9次MRP運(yùn)算;當(dāng)持續(xù)運(yùn)算30 min時(shí),傳統(tǒng)單機(jī)運(yùn)算完成6次MRP運(yùn)算,文中的分布式計(jì)算完成23次MRP運(yùn)算;當(dāng)持續(xù)運(yùn)算60 min時(shí),傳統(tǒng)單機(jī)運(yùn)算完成12次MRP運(yùn)算,文中的分布式計(jì)算完成46次MRP運(yùn)算。分布式并行計(jì)算方式效率相比傳統(tǒng)單機(jī)運(yùn)算效率提高了300%,達(dá)到了系統(tǒng)構(gòu)建目標(biāo)。
圖4 運(yùn)算效率對比
除了運(yùn)算效率外,任務(wù)吞吐量與平穩(wěn)性也是衡量分布式計(jì)算系統(tǒng)的重要指標(biāo),實(shí)驗(yàn)持續(xù)運(yùn)行該系統(tǒng)中分布式并行MRP運(yùn)算60 min,結(jié)果如圖5所示。任務(wù)吞吐量最低為59 900個(gè)/min,最高為60 300個(gè)/min,平均60 136個(gè)/min。驗(yàn)證了分布式并行計(jì)算具有較高的吞吐量,達(dá)到了設(shè)計(jì)要求。吞吐量波動范圍小于0.4%,且在長時(shí)間運(yùn)算后系統(tǒng)仍可以保證充足的吞吐量。
圖5 系統(tǒng)吞吐量運(yùn)行圖
該系統(tǒng)設(shè)計(jì)的分布式并行MRP運(yùn)算系統(tǒng),經(jīng)過實(shí)驗(yàn)驗(yàn)證,運(yùn)算效率提升約300%,可以有效節(jié)約MRP運(yùn)算所需時(shí)間,極大提高M(jìn)RP運(yùn)算的計(jì)算效率,提升MRP運(yùn)算的實(shí)時(shí)性。為大飛機(jī)的生產(chǎn)計(jì)劃提供了一種自主、可控、高效能MRP運(yùn)算方案,為進(jìn)一步推進(jìn)分布式計(jì)算在飛機(jī)制造領(lǐng)域的應(yīng)用提供了理論基礎(chǔ)。