周 盛,郑 玮
(航空工业西安飞机工业(集团)有限责任公司,陕西 西安 710089)
大型飞机因其在产品设计与制造方面的高度复杂性,不仅是航空工业水平的体现,而且是反映一个国家综合国力的重要标志[1]。因此,不断提高大型飞机制造的技术水平、提升大型飞机生产制造的管理水平成为了重要课题。生产计划是飞机生产制造中的核心环节,直接用来指导车间对零组件进行投产以及交付的时间节点。对于保障飞机装配进度,在整个生产管理周期中起着重要的作用。尤其是在脉动线成为飞机装配模式的主流趋势条件下[2],如何确保生产计划的实时性和可靠性,成为保障生产、提升生产效率的核心问题之一[3]。该文通过使用分布式与并行计算技术,依据一定的规则将整个运算任务划分为若干个子任务同时展开并行计算,显著提高了计算效率。
物料需求计划(Material Requirements Planning,MRP)是飞机生产计划的核心算法,大型飞机具有BOM结构复杂、产品构型众多等特点,使得MRP运算的复杂度远高于其他工业产品。同时由于大飞机生产过程中频繁出现工程更改问题,频繁的工程更改是造成生产数据不完整、不一致、生产计划脱节等一系列相关问题的主要原因。目前MRP运算中存在的算法实时性较低、生产计划变更执行响应不及时等问题,已成为飞机生产管控计划和执行的制约因素[4]。
传统的MRP运算算法是基于单件小批计划管理模式,围绕大批量零部件生产计划展开的。而大飞机生产计划具有生产周期长,产品装配过程复杂和同时包含零件生产、部件装配、整机装配等多层次、多阶段的面向项目混合生产计划的特点,因此大飞机的MRP算法与传统面向大批量制造的MRP算法具有显著差异。
大飞机的MRP算法基于层次分解的思想,结合飞机PBOM和MBOM结构,将MRP分解为推拉结合的两个层次而降低复杂问题的解决难度,达到有效解决复杂问题的目的。
在MRP运算理论中,核心是根据BOM数据逐层展开分解,形成生产计划。在飞机制造过程的典型BOM分为PBOM、MBOM,其中PBOM从飞机零件设计阶段开始形成,到生产全部完成最终确定;而MBOM是从飞机装配过程中形成,当飞机装配完成后完全确定。这就与传统的BOM结构稳定后再进行MRP运算的方式有明显的区别[5]。
同时飞机生产过程具有并行特性,由于飞机生产具有长周期特性,飞机的零组件生产不能等待所有前置条件全部具备才展开。大量工作需要并行协同进行,包括工艺准备、材料采购、工装准备,这是飞机研制生产规律的必然要求[6]。
因此,在飞机的生产计划过程中不能直接使用针对大批量生产、结构稳定、串行管理模式的传统MRP算法。需要在没有单一和稳定的BOM作为MRP算法的输入前提下,将PBOM与MBOM有机结合,形成零件生产和装配拉动结合的MRP算法。在早期投产阶段,尚不具备MBOM的情况下,使用PBOM作为MRP运算的输入,进行需要零件投产的生产计划运算从而保证零件投产的顺利进行。在进入装配阶段时,整机或部件的装机清单与装配顺序均已确定,装配所需的AO定版完成,此时,可以根据MBOM中AO包含的零件配套清单确定飞机最终的零件需求。因此,进行装配拉动运算得到装机所需的零件需求,并对前序PBOM运算结果进行反馈。通过推拉结合,以PBOM进行零件投产,以MBOM中AO的零件配套需求对投产阶段的投产计划进行补充和完善,保证生产计划运算管理的顺利进行。
大飞机的MRP运算还有如下特性:1)更改频繁。在飞机设计和生产过程中更改非常频繁,为了及时响应工程更改,保证生产现场与工艺设计数据的同步和一致,需要针对同一主计划需求每日多次进行MRP运算。2)运算复杂。由于飞机结构的复杂性,飞机BOM结构的层次数量和节点数量远超过一般工业产品,MRP运算的运算复杂度很高。
在大飞机MRP运算中存在运算逻辑复杂、运算次数频繁、运算数据规模大、需要进行多轮运算等特点。传统的单机MRP运算在处理大规模运算时,受到单一计算节点处理能力的限制,通常会使计算时间超出预期,甚至无法产生计算结果。因此,在大飞机MRP运算中需要引入新的计算理论和计算技术,突破传统的单机MRP运算限制。
秦明月再问了一些问题,已经没什么价值了,他掏出名片给两个搬运工,告诉他们要是再想起什么可以给他打电话,搬运工如释重负地走了。
分布式计算是通过计算机网络将同一网络区域中的大量计算机组合,形成一个较大的计算系统。将单一的计算任务拆分为若干较小的计算任务,并在不同的计算节点上分别完成这些任务,最终将各个节点的运算结果进行汇总聚合。通过分布式计算可以在更有限的时间内,完成更大规模计算的任务[7]。
相对于传统的单机计算,分布式计算具有以下优势:1)通过分布式计算平台而非人工的方式进行计算任务的管理;2)分布式计算可以充分利用企业网络中的大量计算资源在支出与性能之间寻找到一个平衡点;3)分布式计算中,各个计算节点运算数据及计算任务均是相对独立的,有利于构建高度可用的系统。
对于包括MRP运算在内的分布式计算核心需要考虑的是分割后的计算任务调度算法设计,调度算法的核心目标是将计算任务根据一定的策略分配到尽可能最优的执行节点。调度算法的优劣,对于分布式计算平台的执行效率起着关键性作用[8]。
常见的任务调度算法有集中式任务调度算法和分布式任务调度算法。集中式任务调度算法是指由单一的计算机调度任务,使用中心化的方式管理资源和调度任务。集中式调度算法的主要问题在于中心化节点的存在,导致整体的可容错性与可扩展性较差[9]。为了解决这一问题逐渐演变出分布式任务调度模式,在分布式任务调度模式中没有中央计算机统一调度任务,任务调度及控制由每个计算节点完成,各个计算资源的节点可以提供任务调度方法,通过节点间的协调判断计算任务的执行队列[10]。由于系统中取消了中央处理单元,所有的调度器之间也不进行系统间通信,因此具有以下优势:1)减少调度延时;2)取消中心化调度器,使用多个调度单元并行执行,保证计算的并行度;3)使用多随机的调度方法,提升计算任务的健壮性。
综上所述,采用去中心化调度的分布式调度算法在大规模MRP运算的场景下具有更高的计算并行度和可靠性,因此该系统的核心算法设计采用了分布式调度算法。
系统架构如图1所示。数据预处理模块主要对计算过程中需要频繁查询的基础数据进行预处理和预加载,以提升数据读取和计算效率;任务调度模块接收需要完成的MRP运算任务,并将计算任务差分后分发到合适的计算节点;计算执行模块对MRP计算任务进行分布式执行运算,执行完成后上报任务执行的结果和状态;消息队列模块提供任务的分发和传递通道,完成运算结果数据回传。运算日志模块提供对任务调度执行日志的查看和状态监控功能。
图1 系统架构框图
在进行MRP运算前,需要对数据进行初始化操作,加快数据读取,将物料、工艺路线、BOM实例等数据初始化进内存缓存Redis中,后续运算可直接根据Key获取对应数据,避免频繁查询数据库。由于MRP需要预处理的数据文件规模庞大,该系统采用MapReduce的思想,将数据文件分为几个小的分区,并通过K-V键值对的方法将数据散列存储在分布式内存缓存集群中,保证可承载的数据量[11]。
任务调度模块是分布式并行MRP系统中的核心模块,其算法如图2所示。在MRP计算过程开始前,首先构建出当前MRP计算的执行计划树,计划树记录了并行计算任务之间的关联关系。当并行计算任务由于异常故障丢失,任务调度模块可以根据计划树重新恢复丢失的计算任务并再次分发出去。任务调度模块同时对外部提供了可视化界面,界面实时动态展示了正在运行中的MRP运算任务。任务的分布式与容错恢复对用户是完全透明的,任务调度模块将计算任务的调度控制节点和任务执行计算节点均纳入统一的资源管理。系统引入负载均衡,实时监控每个节点的运行情况,并根据节点的运行状况下发计算任务。
图2 任务调度算法
为了使系统有效发挥分布式计算的优势,将接收到MRP运算任务的调度数据散列到不同的调度节点上。当任意一个调度节点在收到MRP运算任务后,将运算任务拆解为多个子任务,然后再将子任务分发出去,多个计算节点共同完成计算。在计算过程中若发现任务运算量过高,则不断拆解成子任务,直到节点计算完成后将计算结果反馈为发送计算完成的消息。通过并行调度算法的方式实现任务并行调度分发,降低了调度节点单机负载[12]。为了支持迅速完成的任务调度规则计算,每次任务调度的数据均保存在内存中而不是磁盘上,这样可以减少每次调度对磁盘I/O的占用,降低等待时间,提高任务分发调度效率[13]。
在计算执行模块中,需要根据任务调度模块分发的计算任务读取运算数据并完成计算,其流程如图3所示。
图3 计算执行流程图
MRP运算任务执行节点根据MRP运算的运算策略,拉取策略中的物料、架次及对应主计划的信息,生成MRP运算日志。同时发起MRP运算任务,即将以上信息作为消息体发送到消息队列模块中。
接收MRP运算任务后,执行节点的MRP运算单元实时监听消息队列模块中MRP运算所对应的消息队列,同时接收消息体,开始进行MRP运算。
MRP运算过程中根据预处理结果构建出单机BOM树,自顶向下逐层遍历,生成WO,然后保存在对应的TEMP临时表中。在从上向下遍历的过程中开始执行分片操作,即将每个子节点的信息作为消息体发送到MQ中,形成一个子任务,其余运算单元继续监听队列。当该机型架次的MRP运算完成后,发送消息到消息队列模块中,通知MRP服务更改运算日志状态为成功。
装配拉动运算过程中,由于装配计划开完工日期的计算是在编制装配拉动计划部分来完成的。然后在构建BOM树的过程中将时间贯彻到对应节点上,最终由MRP运算的过程进行最终贯彻,即输出到WO上。
消息队列模块负责完成系统中实时通信消息的传递,在该系统中有3种类型消息在消息队列模块投递:1)任务调度生产的正向MRP计算任务消息,计算任务消息为消息队列模块主要投递的消息类型,同时数据量级是较大的;2)MRP运算完成消息通知是计算执行模块任务计算过程中,判断全部MRP计算任务均已处理完后发出的消息通知,调度模块收到该类型消息后记录MRP运算任务日志;3)计算异常反馈类型消息,计算执行模块任务计算过程中发生异常时会及时发出异常消息反馈,调度模块收到异常反馈后会做出相应的处理[14]。
运算日志子模块主要包括日志视图查看、任务日志搜索和任务监控告警。日志视图主要分为计算任务调度日志视图与计算节点任务执行日志视图;日志搜索功能根据关键字等条件搜索任务日志,并按开始时间显示任务历史调度日志;任务监控报警模块对调度或执行失败后的技术任务进行监控,并发出相应的报警,通知运维管理人员介入重试和恢复操作[15]。
为了验证基于大规模分布式并行MRP计算的综合性能和稳定性,该文与传统的单机计算展开了对比实验,验证分布式并行算法的稳定性[16]。
为完成上述测试,需要基于参数相同的软硬件和计算任务规模,设计测试参数如表1所示。
表1 测试参数
运算效率是该系统的核心优化指标,通过对单位时间内完成计算任务的数量进行测试可以表征系统的运算效率。
如图4所示,随着运算时间的增加,传统单机运算与文中分布式并行计算的MRP运算完成次数有所增加;但该系统实现的分布式并行MRP算法效率始终高于传统平台。当持续运算10 min时,传统单机运算完成两次MRP运算,文中的分布式计算完成9次MRP运算;当持续运算30 min时,传统单机运算完成6次MRP运算,文中的分布式计算完成23次MRP运算;当持续运算60 min时,传统单机运算完成12次MRP运算,文中的分布式计算完成46次MRP运算。分布式并行计算方式效率相比传统单机运算效率提高了300%,达到了系统构建目标。
图4 运算效率对比
除了运算效率外,任务吞吐量与平稳性也是衡量分布式计算系统的重要指标,实验持续运行该系统中分布式并行MRP运算60 min,结果如图5所示。任务吞吐量最低为59 900个/min,最高为60 300个/min,平均60 136个/min。验证了分布式并行计算具有较高的吞吐量,达到了设计要求。吞吐量波动范围小于0.4%,且在长时间运算后系统仍可以保证充足的吞吐量。
图5 系统吞吐量运行图
该系统设计的分布式并行MRP运算系统,经过实验验证,运算效率提升约300%,可以有效节约MRP运算所需时间,极大提高MRP运算的计算效率,提升MRP运算的实时性。为大飞机的生产计划提供了一种自主、可控、高效能MRP运算方案,为进一步推进分布式计算在飞机制造领域的应用提供了理论基础。