Amazon web services 运行RabbitMQ+;芹菜与生产环境位于同一服务器中
我正在EC2实例中运行一个Django应用程序,它使用RabbitMQ+Cellery进行任务队列。从与我的生产应用程序相同的EC2实例运行我的RabbitMQ节点是否有任何缺点?如果我们将EC2实例从这个问题中排除,它将变成: 在与我的产品应用程序相同的服务器上运行RabbitMQ节点是否存在任何缺点 我想说,这取决于各种因素,比如工作负载的种类及其组成、工作负载的复杂性、您是否期望使用量的增长等等 如果您的工作负载表现良好,并且服务器足够大(应用程序+任务q),那么为什么不呢,因为只有一台服务器需要管理。确保通过限制这两个进程的系统资源使用来保护它们 如果您的流量表现不好,那么您可能需要多个服务器。在这种情况下,使用专用服务器更好(分离关注点),因为您必须管理多个服务器Amazon web services 运行RabbitMQ+;芹菜与生产环境位于同一服务器中,amazon-web-services,amazon-ec2,rabbitmq,celery,django-celery,Amazon Web Services,Amazon Ec2,Rabbitmq,Celery,Django Celery,我正在EC2实例中运行一个Django应用程序,它使用RabbitMQ+Cellery进行任务队列。从与我的生产应用程序相同的EC2实例运行我的RabbitMQ节点是否有任何缺点?如果我们将EC2实例从这个问题中排除,它将变成: 在与我的产品应用程序相同的服务器上运行RabbitMQ节点是否存在任何缺点 我想说,这取决于各种因素,比如工作负载的种类及其组成、工作负载的复杂性、您是否期望使用量的增长等等 如果您的工作负载表现良好,并且服务器足够大(应用程序+任务q),那么为什么不呢,因为只有一台服
现在回到EC2,以上所有内容仍然适用。EC2使应用程序的水平扩展更容易,所以如果您将它们放在单独的实例上,那么您就可以单独且经济高效地扩展它们。如果不进行扩展,则会浪费资源。此问题的答案实际上取决于应用程序的上下文 当你面对情景时,你应该经常考虑一些事情。 关注点分离 这里,我们要确保其中一个系统不负责其他系统的运行。这包括
- 如果运行所有内容的ec2实例停止运行,队列中剩余的任务是否会继续运行
- 如果我的RAM已满,所有系统是否仍能正常工作
- 我可以只扩展应用程序的一部分,而不必重新设计基础设施
- 多个故障点。如果rabbit的一个实例失败,那么队列和任务将停止工作
- 如果你的应用开始产生巨大的流量,其他系统就会开始争夺资源
- 如果任何组件出现故障,这可能意味着其他服务的其他停机时间
- 系统停机意味着所有组件的完全停机
- 当应用程序需要更多资源,并减少停机时间时,会遇到许多麻烦
- 大量的web流量会降低任务运行速度
- 大量的任务运行会降低web请求的速度
- 大量的IO会减慢所有的速度
- TLDR;如果您可以在一个EC2上运行,那么您现在应该可以轻松地进行扩展
Joshnidhin和Giannis都介绍了RAM、IO和CPU方面的内容
我用容器化在单个实例中运行过生产应用程序,我睡得很安稳,如果明天突然有很多人想要我构建的东西,我可以通过将这些容器部署到不同的实例而不是单个实例上来快速扩展
Docker允许您对每个容器的CPU消耗和内存使用进行限制,因此您还可以确保它们不会相互干涉