应用并行处理算法
您可以使用不同的方法,以使用并行处理算法进行批处理。 开发人员在其设计中通常使用三种不同类型的并行处理:
单个任务建模 - 为每个工作项创建单独的批处理任务。 本方法非常适用于少量工作项,并且与其他并行处理相比,它最适合创建工作项之间的依赖关系。 与其他并行处理相比,开发也更简单。 单个任务建模方法并不适用于许多任务,因为额外的开销将影响性能,并导致正在运行的批处理任务之间出现延迟。
批捆绑 - 使用数量有限且具有捆绑大小值(每个批处理任务中的工作项数)的批处理任务。 本方法非常适用于处理时间相似的简单、均匀的工作负荷。 在这种情况下,批处理任务不会过度填充批处理表。 如果捆绑大小合适,可以提高性能。 过大或过小的捆绑大小可能会遇到性能问题。 不均匀的工作负荷可能会降低本方法的性能,因为批处理任务将在不同的时间完成处理。
顶级采摘 - 创建数量有限的批处理任务,其中每个批处理任务领取并处理第一个免费工作项。 此处理需要一个暂存表,以存储要从中处理批处理作业的工作项。 如果工作负荷不均匀且处理时间不同,本方法非常有效。 此外,正在使用本方法的批处理作业没有过度填充批处理表。 如果需要处理多个小型工作项,则跟踪暂存表中的工作项可能会影响性能。
选择方法时的一些关键注意事项包括:
- 工作负荷特征
- 为相互依赖的小型工作负荷选择单个任务建模。
- 针对具有可预测处理时间的统一任务选择批捆绑。
- 对需要灵活性的不均匀工作负荷使用顶层领料。
- 性能优化
- 通过避免创建不必要的批处理任务来最大限度降低开销。
- 在批捆绑中试验捆绑销售大小,以找到最佳平衡。
- 实现复杂性
- 从简单要求的单个任务建模开始。
- 随着工作负荷复杂性的增加,转换到批捆绑或顶层领料。
示例应用场景
考虑一家公司每天处理销售订单的问题。 小订单(低于 1000 美元)需要几秒钟来验证,而大订单(高于 10,000 美元)需要手动审批,这需要几分钟时间。
本问题的解决方案是使用顶层领料。 使用暂存表根据订单大小和优先级动态将任务分配到批处理。