我有一个问题让我很难找到理想的解决方案,为了更好地解释它,我将在这里公开我的场景。
我有一个服务器,它将接收来自多个客户的订单。每个客户端将提交一组应在某些指定时间间隔执行的重复任务,例如:客户端 A 提交应在 2009-12-31 和 2010-12-31 之间每分钟执行一次的任务 AA;所以如果我的数学是正确的,那就是一年大约有 525 600 次操作,考虑到更多的客户端和任务 ,让服务器处理所有这些任务是不可行的,所以我想出了工作机器的想法。服务器将在 PHP 上开发。
工人机器只是 我将在家里或工作场所托管的基于 Windows 的普通计算机,每个工人都将拥有一个专用的 Internet 连接(具有动态 IP)和一个 UPS,以避免停电。每个工作人员还将每 30 秒左右通过 Web 服务调用查询服务器,获取下一个待处理的作业并处理它。作业完成后,工作人员将向服务器提交输出并请求新作业,以此类推。如果需要扩展系统,我应该设置一个新的工人,整个事情应该无缝运行。worker 客户端将使用 PHP 或 Python 开发。
在任何给定时间,我的客户都应该能够登录到服务器并检查他们订购的任务的状态。
现在这里是棘手的部分:
- 如果由于某种原因服务器出现故障,我必须能够重建已经处理的任务。
- 工作人员不是特定于客户的,一名工作人员应该为任何给定数量的客户处理工作。
我对一般数据库设计和使用哪些技术有一些疑问。
最初我想使用几个SQLite数据库并将它们全部连接到服务器上,但我不知道如何按客户端分组以生成作业报告。
我从未真正使用过以下任何技术:memcached、CouchDB、Hadoop等,但我想知道这些技术中的任何一个是否适合我的问题,如果是,你推荐给新手的是像我一样的“分布式计算”(或者这是并行的?)。请记住,工作人员具有动态 IP。
就像我之前说的那样,我在一般数据库设计方面也遇到了麻烦,部分原因是我还没有选择任何特定的 R(D)DBMS,但是我有一个问题,我认为它与我选择的 DBMS 无关到排队系统...我应该预先计算特定作业的所有绝对时间戳并拥有大量时间戳,按升序执行并将它们标记为完整,还是应该有一个更聪明的系统,例如“当时间戳模数 60 = = 0 -> 执行“。这种“聪明”系统的问题在于,一些工作不会按应有的顺序执行,因为一些工作人员可能在等待无所事事,而另一些工作人员则超载。你有什么建议?
PS:我不确定这个问题的标题和标签是否正确反映了我的问题以及我正在尝试做的事情;如果不是,请相应地编辑。
感谢您的输入!
@timdev:
- 输入将是一个非常小的 JSON 编码字符串,输出也将是一个 JSON 编码字符串,但稍大一些(大约 1-5 KB)。
- 输出将使用来自 Web 的几个可用资源进行计算,因此主要瓶颈可能是带宽。数据库写入也可能是一个 - 取决于 R(D)DBMS。