为 10M+/天的工作队列扩展工作人员
Scaling workers for 10M+/day job queue
我们想升级我们基于 PHP 的 AWS SQS 队列工作者架构,因为我们每天要处理超过 1000 万个作业,而且基础设施越来越昂贵。
我们的作业几乎不使用任何内存,但由于 HTTP 响应较慢,每个作业可以 运行 5-10 秒。
任何人都可以推荐支持 运行同时在同一台机器上运行数十个工作人员,或者可以非常高效地同时执行数十个作业的语言、方法或工具吗?
非常感谢!
如果瓶颈在 HTTP 请求中,您应该考虑使用 node.js。它使编写代码使其异步运行变得非常容易。我假设在您当前的实现中,HTTP 请求阻塞了 CPU 线程。这是低效的,因为 CPU 可以做其他事情 而 它正在等待请求完成,然后它可以解析结果。这在 node.js 和优秀的 async 库中几乎是微不足道的。
异步实现可以使您的程序加速 10-100 倍甚至更多。特别是如果 "waiting for HTTP request" 比实际计算花费更多的时间。使用一组微型或纳米实例,node.js(或通常的 javascript)是一种单线程语言,因此通常不需要多核。
另一种方法是将 SNS 服务附加到 SQS 并设置解析票证的 Lambda 函数。请参阅此页面以了解 AWS Lambda 中的介绍。也许你有高峰天和低谷天,那么这种方法应该更划算。当负载均匀分布时,AWS Lambda 比 EC2 更昂贵。
我有 运行 类似的系统,在许多机器上有 30-200 多个 PHP 基于 CLI 的工作人员副本。我用 Supervisord 启动它们,其中有一个 'numprocs' 配置说明要启动多少个特定程序。您可以有多个这样的配置组。
就成本优化而言,考虑 'spot instances' 降低每台机器每小时的价格。为了尽快让每个系统 运行 宁,您需要确保它们已预先安装了它们需要的所有已安装软件和配置。
我们想升级我们基于 PHP 的 AWS SQS 队列工作者架构,因为我们每天要处理超过 1000 万个作业,而且基础设施越来越昂贵。
我们的作业几乎不使用任何内存,但由于 HTTP 响应较慢,每个作业可以 运行 5-10 秒。
任何人都可以推荐支持 运行同时在同一台机器上运行数十个工作人员,或者可以非常高效地同时执行数十个作业的语言、方法或工具吗?
非常感谢!
如果瓶颈在 HTTP 请求中,您应该考虑使用 node.js。它使编写代码使其异步运行变得非常容易。我假设在您当前的实现中,HTTP 请求阻塞了 CPU 线程。这是低效的,因为 CPU 可以做其他事情 而 它正在等待请求完成,然后它可以解析结果。这在 node.js 和优秀的 async 库中几乎是微不足道的。
异步实现可以使您的程序加速 10-100 倍甚至更多。特别是如果 "waiting for HTTP request" 比实际计算花费更多的时间。使用一组微型或纳米实例,node.js(或通常的 javascript)是一种单线程语言,因此通常不需要多核。
另一种方法是将 SNS 服务附加到 SQS 并设置解析票证的 Lambda 函数。请参阅此页面以了解 AWS Lambda 中的介绍。也许你有高峰天和低谷天,那么这种方法应该更划算。当负载均匀分布时,AWS Lambda 比 EC2 更昂贵。
我有 运行 类似的系统,在许多机器上有 30-200 多个 PHP 基于 CLI 的工作人员副本。我用 Supervisord 启动它们,其中有一个 'numprocs' 配置说明要启动多少个特定程序。您可以有多个这样的配置组。
就成本优化而言,考虑 'spot instances' 降低每台机器每小时的价格。为了尽快让每个系统 运行 宁,您需要确保它们已预先安装了它们需要的所有已安装软件和配置。