【问题标题】:PHP queue fail safePHP队列故障安全
【发布时间】:2013-10-24 08:47:17
【问题描述】:

目前有一个使用亚马逊队列服务之类的队列系统设置。现在我正在使用主管来阻止工人辞职。

尝试提供一个可以处理 500-2K 请求/秒并需要通过队列捕获数据的前端点。有时队列服务[基于 https] 出现故障,我目前正在运行 beanstalkd 作为备份队列,它获取相同的数据并发送到单独的一组工作人员并将该数据存储在单独的数据库中,但具有与主数据库相同的表结构分贝。

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

这似乎是解决这个问题的一种实用方法,因为我正在努力确保我们捕获 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

【问题讨论】:

  • PHP 可以工作,但只能在小范围内工作。在很大程度上,我会更倾向于一种带有少量 Web 编程的编程语言。有更好的语言可以将带宽使用和服务器压力保持在更易于管理的状态。 C++、C#、Java、.NET,任君挑选。
  • @bobthyasian 假设我实现了上面的设计但使用了不同的语言......虽然从长远来看 php 可能不是最好的语言,但试图看看我是如何处理队列失败的一种有意义的方式
  • 这些未受教育的意见从何而来? Gerald 和 bobthyasian 都是完全错误的,这不是来自,因为我是 PHP 粉丝。 @BrianPutt - 请忽略这些有 0 个事实来支持这些观点的 cmets,我正在运行一个基于 PHP / ZeroMQ 的大规模队列(它的性能比我们尝试的 Java 解决方案更好)。当涉及到实际问题时——我无法正确回答,因为我不会那样设计消息传递。但是,我想说的是,如果您想使用 PHP,请使用它。
  • @N.B.谢谢,如果 queue1 关闭,您能否说明如何设置具有后备计划的队列系统

标签: php queue


【解决方案1】:

决定采用 N.B 的 cmets 并应用不同的模型。我有一个主要的队列服务和一个辅助。如果第一个发送了 null 或错误的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2015-12-17
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多