1

工作目前我们已经批量驱动的过程,其运行每隔15分钟,每次运行时,它重复这个循环多次:主从模式的分布式环境

  1. 调用一个存储过程,并得到一些数据,从回的DB
  2. 进程中的数据
  3. 保存结果返回给DB

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

我们的计划是parallelise在多台机器这个过程,使得:

  • 有一个中央控制器(主设备)和多个工作站(从站)
  • 主机负责调度运行(从配置前端)
  • 主(或单独的组分)是负责加载/保存数据和从DB(以便避免所述多个从站之间死锁/争用)
  • 从站接收的工作项,处理它们并返回结果掌握
  • 有一个主从服务器(我们环境中的主生产服务器),它通常会接收所有工作项目
  • 只有主从服务器正在处理需要较长处理时间的组时,辅助从服务器才会接收工作(主人可以根据返回的数据大小来识别它,或者可以将其留给配置)
  • 如果在处理过程中从服务器抛出异常,则将警报电子邮件发送给支持团队,并在接下来的过程中拾取相同的工作项目日程安排周期
  • 不确定如何处理暂停

我对分布式环境下的主从模式做了一些研究,但到目前为止还没有找到很多的参考资料,有没有人知道这种模式的好实现?任何关于这种架构潜在缺陷的指针都会非常感谢!

感谢,上述

回答

0

你的主/从设计似乎暗示写入数据库无论如何都会被序列化,所以你有没有考虑简单地并行运行(您的当前进程的多个拷贝,例如通过派生新每个作业的进程)并通过共享应用程序锁来管理争用?

+0

yup,这是我们考虑过的解决方案之一,但是对于我们可以采用这种方法走多远,将会有严重的限制,因为主生产箱也被我们世界中其他关键业务处理密集型应用程序使用。 这里的问题在于,我们的流程在处理的持续时间上最大化了其中一个CPU,因为它需要进行数量处理,如果我们在同一个盒子上进行多线程,那么我们很可能会启动影响其他更重要系统的性能 – theburningmonk 2009-11-19 11:03:03

+0

哦,是的,对数据库的写入将被序列化,但这对我们来说并不是问题,因为大部分时间都用于处理数据,因此序列化的数据库访问不应该证明一个瓶颈 – theburningmonk 2009-11-19 11:04:54

+0

你可以在数据库中有一个工作队列,并且有一堆机器可以完成工作。 – 2009-11-19 12:41:50