我们正在研究基于 Kafka 的事件收集管道,它将通过 HTTP GET/POST 请求接受传入的事件。它应该能够通过用户浏览器以及在Nginx + PHP-FPM上运行的Web服务器接收事件。根据需求的本质,此管道必须是弹性的,因此我们将在 AWS 新加坡部署,而我们服务于 Web 服务器的客户端位于印度孟买的物理数据中心。我们不想因此引入任何延迟,因此 PHP 应用程序应该只触发一个请求并忘记它,一开始即使 ~5% 的请求丢失也是可以的。 孟买和新加坡之间的往返行程约为 ~70 毫秒。 我们可以使用哪些选项:-
- 超时为 ~100 毫秒的 curl 或 fsockopen 请求 -- 不可接受
- 使用像 Guzzle 或 curl-easy 这样的库——它们在内部只使用 curl,所以会再次引入延迟
- 将请求本地写入文件并使用像Flume或Kafka这样的总线进行传输 - 本质上我们将复制均匀的收集管道,增加硬件成本。
- 像gearman一样使用工人队列 - 不是这方面的专家,所以不知道利弊。
- 阳光下的任何东西,都提供免费和低维护。
请指教。
我会使用jobqueue系统,即使它引入了另一层复杂性。它是在PHP中异步执行操作的最简单方法之一,并保证几乎不需要同步处理器时间。
你可以使用Gearman或ZeroMQ。它们在 PHP 中都得到了很好的支持。