为了节省成本,我们正在尝试找出最佳设置来处理在 3 个 EC2 实例之间运行的所有工作进程。
与其使用三个 4xlarge EC2 运行数千个队列工作程序,不如将它们拆分成许多较小的实例,每个实例处理 100 个左右的作业,这样是否更具成本效益,还是最好继续使用最大容量的较大实例?
通常,我们迄今为止创建的每个服务器消耗的 CPU 和内存量大致相同。如果我们预计使用 50% 的可用 CPU 能力,我们通常可以预期使用 50% 的可用 RAM。对于网络 IO,我们最大的成本是与 RDS 通信、读取 SQS 队列有效负载以及将数据移入/移出 S3。
工作可以是批量处理数百万个小通知、解析大型 XML/CSV 文件、执行复杂的财务计算和数据建模,或运行 ML 算法。
答案1
最好的方法是创建一个自动扩展组,该组与现货实例竞价相关联,并以少量资金启动一个可以完成工作的任意大小的新实例,并且您不介意它随时被终止,因为它是一个工作节点。ASG / Lambda 作业可以根据需要启动一个新实例
我使用 kubernetes 做了类似的事情并节省了大量工作量。
答案2
您可以使用具有小型 SPOT 实例的自动缩放组,我强烈建议您使用https://spotinst.com/因为它允许您始终支付最低金额,从而极大地帮助您最大限度地降低 EC2 实例的成本。