2013-10-24 30 views
1

目前有一个队列系统设置使用像亚马逊的队列服务。现在我正在使用主管来防止工作人员戒烟。PHP队列失效保护

试图提供一个可以采用500-2K reqs/sec并需要通过队列捕获数据的前端。有时队列服务[https基于]会关闭,我目前正在运行beanstalkd作为备份队列,它接受相同的数据并发送给单独的一组工作人员,并将该数据存储在单独的数据库中,但与主表具有相同的表结构D b。

这个想法是我会从备份中获取数据,并将其与预期的实际数据进行比较并对其进行审核,任何差异都会被报告并可能添加到预期数据集中。

这是否看起来是一个切实可行的办法解决这个问题,因为我想确保我们获取数据的99.99%,在未来的。

小“示范”之下,以帮助给你的照片。

Endpoint A -- collects data(
    Queue1[amazon type queue] 
    Queue2[beanstalkd] 
) 

Queue1 Worker sends data to DB1[used for reports] 
Queue2 Worker sends data to DB2[storage --expect to have all data] 

Audit Process compares data from DB2 to DB1 and reports the differences 
If differences captured, tries to add them to DB1 
+0

@GeraldSchneider之间的差异为什么不是PHP足够的东西,像这样的小图如果我能够很容易地将数据发送到队列和数据库中, –

+0

PHP可以工作,但只能在小范围内工作。在大规模的情况下,我会用一些网络编程更多地倾向于编程语言。有很多更好的语言可以将带宽使用和服务器压力保持在一个更易于管理的状态。 C++,C#,Java,.NET,随你选。 – bobthyasian

+0

@bobthyasian让我们假设我实现了上面的设计,但是使用了不同的语言......虽然从长远来看,php可能不是最好的语言,但试图了解我是如何以有意义的方式处理队列故障 –

回答

0

决定采取N.B的评论和应用不同的模型。我有一个主队列服务和一个辅助队列。如果第一个发送空或者不正确的http响应,我会将该消息发送到备份队列。队列工作人员将从这两个来源拉动并适当地运行它们。

下面是它结束了,所以你可以看到原来的想法,最后一个....

Endpoint A -- collects data(
    Queue1[amazon type queue] 
    Queue2[amazon2 type queue] 
) 

Queue1 Worker sends data to DB1[used for reports] 

If Queue1 fails, it auto sends data to Queue2, 
If Queue2 fails, it stores in database for later retrieval