当前位置:  开发笔记 > 编程语言 > 正文

PHP中分布式系统的剖析

如何解决《PHP中分布式系统的剖析》经验,为你挑选了1个好方法。

我有一个问题,这让我很难找到理想的解决方案,为了更好地解释它,我将在这里公开我的方案.

我有一台服务器将收到几个客户的订单.每个客户端将提交一组应在某些指定时间间隔执行的重复任务,例如:客户A提交的任务AA应该在2009-12-31和2010-12-31之间每分钟执行一次 ; 因此,如果我的数学是正确的,一年中大约525 600次操作,给定更多的客户端和任务 ,让服务器处理所有这些任务是不可行的,所以我想出了工人机器的想法.服务器将在PHP上开发.

工作机器只是常规廉价 的基于Windows的计算机,我将在我的家中或工作场所托管,每个工作人员将拥有专用的Internet连接(带有动态IP)和UPS以避免断电.每个工作人员还将通过Web服务调用每隔30秒左右查询服务器,获取下一个待处理作业并进行处理.作业完成后,工作人员会将输出提交给服务器,并无限期地请求新作业.如果需要扩展系统,我应该设置一个新的工作者,整个事情应该无缝运行.工作者客户端将使用PHP或Python开发.

在任何给定时间,我的客户端都应该能够登录到服务器并检查他们订购的任务的状态.

现在这里是棘手的部分:

如果由于某种原因服务器出现故障,我必须能够重建已处理的任务.

工作人员不是特定于客户的,一个工人应该为任何给定数量的客户处理工作.

我对一般数据库设计和使用哪些技术有一些疑问.

最初我想过使用几个SQLite数据库并将它们全部加入到服务器上,但我无法弄清楚如何按客户端分组来生成作业报告.

我从来没有真正使用过以下任何技术:memcached,CouchDB,Hadoop等等,但我想知道这些是否适用于我的问题,如果是的话,你推荐给新手使用的是像我这样的"分布式计算"(或者这是平行的吗?).请记住,工人拥有动态IP.

就像我之前说过的那样,我也遇到了一般的数据库设计问题,部分是因为我还没有选择任何特定的R(D)DBMS但是我认为它与我选择的DBMS无关的一个问题是相关的到排队系统 ...我应该预先计算特定作业的所有绝对时间戳并具有大量时间戳,执行并按升序标记它们,或者我应该有一个更聪明的系统,如" 当时间戳模数60 = = 0 - >执行 ".这个"聪明"系统的问题在于,某些工作不会按顺序执行,因为有些工作人员可能在等待其他人过载时无所事事.你有什么建议?

PS:我不确定这个问题的标题和标签是否恰当地反映了我的问题和我想要做的事情; 如果没有请相应编辑.

感谢您的输入!

@timdev:

    输入将是一个非常小的JSON编码字符串,输出也将是一个JSON enconded字符串,但稍大一点(大约1-5 KB).

    输出将使用来自Web的几个可用资源来计算,因此主要瓶颈可能是带宽.数据库写入也可以是一个 - 取决于R(D)DBMS.

Bill Karwin.. 15

看起来你正处于重建Gearman的边缘.这是Gearman的介绍:

Gearman提供了一个通用的应用程序框架,可以将工作分配给更适合工作的其他机器或进程.它允许您并行工作,负载均衡处理以及在语言之间调用函数.它可用于各种应用程序,从高可用性网站到数据库复制事件的传输.换句话说,它是分布式处理如何通信的神经系统.

您可以使用PHP编写客户端和后端工作程序代码.


关于为Windows编译的Gearman Server的问题:我不认为它是在为Windows预先构建的整洁软件包中提供的.Gearman仍然是一个相当年轻的项目,他们可能还没有成熟到为Windows生成可立即运行的发行版.

Sun/MySQL员工Eric Day和Brian Aker 于2009年7月在OSCON为Gearman 提供了一个教程,但他们的幻灯片只提到了Linux软件包.

这是Perl CPAN测试人员项目的链接,表明可以使用Microsoft C编译器(cl.exe)在Win32上构建Gearman-Server ,并通过测试:http: //www.nntp.perl.org/group/perl. cpan.testers/2009/10/msg5521569.html 但我猜你必须下载源代码并自己构建它.



1> Bill Karwin..:

看起来你正处于重建Gearman的边缘.这是Gearman的介绍:

Gearman提供了一个通用的应用程序框架,可以将工作分配给更适合工作的其他机器或进程.它允许您并行工作,负载均衡处理以及在语言之间调用函数.它可用于各种应用程序,从高可用性网站到数据库复制事件的传输.换句话说,它是分布式处理如何通信的神经系统.

您可以使用PHP编写客户端和后端工作程序代码.


关于为Windows编译的Gearman Server的问题:我不认为它是在为Windows预先构建的整洁软件包中提供的.Gearman仍然是一个相当年轻的项目,他们可能还没有成熟到为Windows生成可立即运行的发行版.

Sun/MySQL员工Eric Day和Brian Aker 于2009年7月在OSCON为Gearman 提供了一个教程,但他们的幻灯片只提到了Linux软件包.

这是Perl CPAN测试人员项目的链接,表明可以使用Microsoft C编译器(cl.exe)在Win32上构建Gearman-Server ,并通过测试:http: //www.nntp.perl.org/group/perl. cpan.testers/2009/10/msg5521569.html 但我猜你必须下载源代码并自己构建它.


如果它们是内部的,请使用本地DNS服务器.如果他们是外部的,请使用dyndns.com.
推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有