通用批处理的指导原则

下面是一些关键的指导原则,在构建批处理解决方案可以参考:

  • 批处理架构通常会影响在线服务的架构,反之亦然。设计架构和环境时请尽可能使用公共的模块。
  • 尽可能的简化,避免在单个批处理应用中构建复杂的逻辑结构。
  • 尽可能在数据存放的地方处理这些数据,反之亦然(即,各自负责处理自己的数据)。
  • 尽可能少的使用系统资源,尤其是I/O。尽可能多地在内存中执行大部分操作。
  • 审查应用程序I/O(分析SQL语句)以避免不必要的物理I/O。特别是以下四个常见的缺陷(flaws)需要避免:
    • 在每个事务中都将(所有并不需要的)数据读取,并缓存起来;
    • 多次读取/查询同一事务中已经读取过的数据;
    • 引起不必要的表或索引扫描;
    • 在SQL语句的WHERE子句中不指定过滤条件。
  • 在同一个批处理不要做两次一样的事。例如,如果你需要报表的数据汇总,请在处理每一条记录时使用增量来存储,尽可能不要再去遍历一次同样的数据。
  • 在批处理程序开始时就分配足够的内存,以避免运行过程中再执行耗时的内存分配。
  • 总是将数据完整性假定为最坏情况。插入适当的检查和数据校验以保持数据完整性(integrity)。
  • 如有可能,请为内部校验实现checksum。例如,平面文件应该有一条结尾记录,说明文件中的总记录数和关键字段的集合(aggregate)。
  • 尽可能早地在模拟生产环境下使用真实的数据量,进行计划和执行压力测试。
  • 在大型批处理系统中,备份会是一个很大的挑战,特别是 7x24小时不间断的在线服务系统。数据库备份通常在设计时就考虑好了,但是文件备份也应该提升到同养的重要程度。如果系统依赖于文本文件,文件备份程序不仅要正确设置和形成文档,还要定期进行测试。