我们希望升级基于PHP的AWS SQS队列工作者架构,因为我们每天处理10M +作业并且基础架构变得昂贵。
我们的工作几乎不使用任何内存,但由于HTTP响应缓慢,每个内存可以运行5-10秒。
有人可以推荐支持在同一台机器上同时运行数十名工作人员的语言,方法或工具,还是可以非常有效地同时执行数十个工作?
非常感谢!
答案 0 :(得分:1)
如果瓶颈在HTTP请求中,您应该考虑使用node.js.它使您可以非常轻松地对代码进行编程,使其以异步方式运行。我假设在您当前的实现中,HTTP请求阻塞了CPU线程。这是低效的,因为CPU可以执行其他操作,而等待请求完成,然后它可以解析结果。这在node.js和优秀的async库中几乎是微不足道的。
异步实现可以使程序速度提高10-100倍甚至更高。特别是如果“等待HTTP请求”比实际计算花费更多的时间。使用一组微或纳米实例,node.js(或一般的javascript)是单线程语言,所以通常你不需要多个核心。
另一种方法是将SNS服务附加到SQS并设置分析故障单的Lambda函数。有关AWS Lambda中的简介,请参阅此页面。也许你有高峰日和低日,那么这种方法应该更具成本效益。当负载均匀分布时,AWS Lambda比EC2贵。
答案 1 :(得分:1)
我运行过类似的系统,在许多机器上有30-200多个基于PHP CLI的工作人员。我开始使用Supervisord,那里有一个&nbsprocs' numprocs'配置,说明要启动多少特定程序。您可以拥有多个此类配置组。
在优化成本方面,考虑现场实例'降低每台机器每小时的价格。为了使每个系统尽快运行,您需要确保使用所需的所有已安装软件和配置进行预先设置。