我正在EC2实例上运行一个Django应用程序,该应用程序使用RabbitMQ + Celery进行任务排队。将我的RabbitMQ节点从与生产应用程序相同的EC2实例上运行是否有任何缺点?
我正在EC2实例上运行一个Django应用程序,该应用程序使用RabbitMQ + Celery进行任务排队。将我的RabbitMQ节点从与生产应用程序相同的EC2实例上运行是否有任何缺点?
如果运行所有任务的EC2实例崩溃了,将会继续运行队列中的剩余任务吗
如果我的RAM已满,所有系统是否仍然能够正常运行
我能否只扩展我的应用程序某一部分,而不必重新设计基础架构。
多个故障点。如果您的rabbit的一个实例失败,您的队列和任务将停止工作。
如果您的应用程序开始产生大量流量,其他系统开始争夺资源。
如果任何组件出现故障,这可能意味着其他服务的停机时间。
系统停机意味着所有组件完全停机。
当您的应用程序需要更多资源时,会带来许多头疼的问题,同时最小化停机时间。
大量的Web流量将减缓任务运行速度
大量的任务运行将减慢Web请求
大量的IO将减慢所有事情
TLDR; 如果您可以在一个EC2上运行,请这样做,但是今天使其易于扩展。
Joshnidhin和Giannis都涵盖了RAM,IO和CPU方面。
我曾经在单个实例中通过容器化运行生产应用程序,并放心地睡觉,如果明天突然有很多人想要我已经构建的东西,我可以通过在不同的实例上部署这些容器来快速扩展,而不是仅仅在单个实例上。
Docker允许您为每个容器设置CPU消耗和内存使用限制,因此您也可以确保它们不会互相干扰。