1

目前我们有一个批处理驱动的过程在工作,它每 15 分钟运行一次,每次运行它都会重复这个循环几次:

  1. 调用存储过程并从数据库中取回一些数据
  2. 处理数据
  3. 将结果保存回数据库

它不能一次性加载所有数据,因为数据由多个字段分隔,并且每组数据在处理期间需要不同的行为(可从前端配置)。但是,最近业务的变化导致某些组的数据量(以及所需的处理时间)突然激增,因此现在每当其中一个组超限时,它都会延迟所有其他组。

我们的计划是在多台机器上并行处理这个过程,以便:

  • 有一个中央控制器(主)和几个工作站(从)
  • master 负责调度运行(可从前端配置)
  • master(或单独的组件)负责从数据库加载/保存数据(以避免多个从属之间的死锁/争用)
  • 从站接收工作项,处理它们并将结果返回给主站
  • 有一个主要的从属服务器(我们环境中的主要生产服务器),它通常会接收所有的工作项
  • 仅当主要从属正在处理需要更长处理时间的组时,辅助从属才会接收工作(主从可以根据返回的数据大小识别这一点,或者可以留给配置)
  • 如果 slave 在处理过程中抛出异常,则向支持团队发送警报电子邮件,并在下一个计划周期中提取相同的工作项
  • 不确定如何处理超时

我对分布式环境的主从模式进行了一些研究,但到目前为止还没有找到很多参考资料,这里有人知道这种模式的良好实现吗?任何关于这种架构潜在缺陷的指针也将不胜感激!

谢谢,

4

1 回答 1

0

您上面的主/从设计似乎暗示对数据库的写入无论如何都会被序列化,所以您是否考虑过简单地并行运行当前进程的多个副本(例如,通过为每个作业分叉一个新进程)并通过管理争用共享应用锁?

于 2009-11-19T10:52:16.617 回答