分布式服务器模式

问题描述:

可以说我有每运行一个后台程序100个服务器 - 允许调用它server - 服务器是负责产生线程此特定服务的每一个用户(可以说每个服务器1000个线程)。每N秒每个线程做东西并获取特定用户(这个请求/响应模式不能改变)的信息。我有一个问题有时是一个线程挂起,并停止做东西。我需要一些方法来知道用户数据已过时,需要刷新。分布式服务器模式

我唯一的想法是每个5N秒纷纷跟帖更新与用户(users表中的一个last_scanned列)相关的MySQL的记录,并检查表中的每一15N秒另一个过程中,如果last_scanned列不是最新的,重新启动线程。

+0

当线程停止执行某些操作时,是预期的行为还是由于错误? – Jordan

+0

由于错误 - 我应该指定线程挂起(是的,我也应该修复错误,所以这不会发生在第一位,但让我们忽略) – v0idless

来处理这种情况的一般方法是让线程报告其状态回服务器守护程序。如果你在最近5秒钟内没有看到状态更新,那么你杀死线程并开始另一个线程。

您可以跟踪你已经在列表中纺起来,然后就循环通过他们偶尔来确定状态当前活动的线程。

当然也应该修复你的程序是导致线程过早退出的错误你。

过早退出,杀死一个线程也可能让你的程序在一个意想不到的,非原子状态。您应该也可以让服务器守护进程运行一个清理过程,以确保队列中的任何项目或您用来确定工作负载的任何项目,在一段时间不活动后重置。

+0

这当然是一个更好的模型,但什么会如果服务器守护程序死亡(停电,硬件故障等),会发生?我仍然觉得需要有某种持久性存储,所以如果服务器守护进程死亡,它会知道它所持有的用户或需要扫描的用户。 – v0idless

+0

我认为你已经有某种持久性存储来完成这项工作。一般人们会用这样的排队。你可以看看RabbitMQ。 – Jordan