如何跨数据中心在php中创建异步http请求

时间:2013-01-26 06:56:27

标签: php curl asynchronous gearman guzzle

我们正在开发基于Kafka的事件收集管道,它将通过HTTP GET / POST请求接受传入事件。它应该能够通过用户浏览器以及在Nginx + PHP-FPM上运行的Web服务器接收事件。根据要求的本质,这条管道必须具有弹性,因此我们将在AWS新加坡部署,而我们服务于Web服务器的客户端则位于印度孟买的物理数据中心。我们不希望因此引入任何延迟,因此PHP应用程序应该只是触发请求并忘记它,即使开始甚至~5%的请求丢失也没问题。孟买和新加坡之间的往返约为70毫秒。我们可以使用哪些选项: -

  • 卷曲或fsockopen请求超时~100毫秒 - 不可接受
  • 使用Guzzlecurl-easy之类的库 - 内部仅使用curl,因此会再次引入延迟
  • 将请求本地写入文件并使用像Flume或Kafka这样的总线进行传输 - 基本上我们将复制均匀收集管道,增加硬件成本。
  • 使用像gearman这样的工作人员队列 - 不是这方面的专家也不知道利弊。
  • 任何阳光下的东西,只要它免费且低维护。

请建议。

1 个答案:

答案 0 :(得分:0)

我会使用一个jobqueue系统,即使它引入了另一层复杂性。它是在PHP中异步处理事务的最简单方法之一,并且保证几乎不需要同步处理器时间。

您可以使用Gearman或ZeroMQ。它们在PHP中都得到了很好的支持。