2.1.5 并行结合串行模式
我们现实中很多需求不仅需要并行方式加快执行,很多时候还必须遵循串行的先后次序执行。
比如生产PC机,必须要把主板、硬盘、CPU、内存等配件生产齐全后,才能进行组装,如果其中一个配件未生产齐全,无法完成后续组装。但是生产主板、硬盘、CPU、内存每一个配件的过程又都是并行的,现实生活中电子工厂生产线上大量的工人并行作业,同时生产各种配件。
因此,我们需要框架支持“并行+串行”的模式才能满足更多的需求,如图2-6所示。
图2-6 并行结合串行模式
我们可以看到,多个包工头可以衔接在一起,以加工链式的方式向下执行,同时每一个链环节又可以让多个工人并行完成。这样做的好处有很多:
❏ 我们知道分布式并行计算多用于解决数据庞大计算复杂的应用,那么这个计算过程最好能够拆分开来,不光是将计算数据拆分到不同计算机,计算过程也能拆分为多个环节去做,工业界叫做“工艺流程”,如果将一个复杂漫长的计算过程混在一起并不是一个好的做法。
❏ 计算过程混在一起没有环节,首先比较难监控和处理异常,如果把包工头划分为多个环节很容易对计算过程进行监控,出现异常容易锁定环节,我们可以知道一个时间长的计算任务目前运行到什么环节了,问题出在哪个环节,每个环节完成还可以发送消息事件进行相关协作。
❏ 对照环节的切分思想,我们再看看如何满足Map/Reduce计算,那么实际上Map是一个环节,Reduce是第二个环节,如果是更灵活的需求,比如Map/Reduce/Map/Reduce…,或者Map/Reduce/Reduce…。如果我们按照Map/Reduce的方式套就很难设计了,但是转换为一到多个链式环节去处理就很容易。
因此,包工头实现链式的多环节处理,有利于我们将复杂计算进行拆分,并且可以深入控制计算过程,通过能构思整个计算“工艺流程”的设计,能保证业务逻辑的完整性,而不至于将业务分散到框架的各个Map或者Reduce接口中,拆分得支离破碎,难以理解整个计算过程设计。