如何处理我的 AWS EC2 实例上的多个 Python 请求?

Posted

技术标签:

【中文标题】如何处理我的 AWS EC2 实例上的多个 Python 请求?【英文标题】:How can I handle multiple Python requests on my AWS EC2 instance? 【发布时间】:2019-02-08 00:58:06 【问题描述】:

我在 Elastic Beanstalk 上部署了一个 Flask 应用程序到 AWS 上的一个 EC2 实例上。如果 100 人同时连接到我的服务器,那是不是意味着他们必须在 100 人的队列中等待,因为该应用一次只能处理一个实例?

我怎样才能使我可以处理更多使用相同 IP 地址连接的请求?谢谢!

【问题讨论】:

【参考方案1】:

简短的回答是使用uWSGIgunicorn

更长的答案是你的直觉是正确的——你担心的是“并发”,或者你的应用可以处理的同时请求的数量。是的,没有任何应用程序服务器的单个 Flask 应用程序一次可以处理一个请求。你如何改变它?对于大多数 Python 应用程序,并发单位是一个进程(有一些框架可以改变这一点,但大多数应用程序部署可能是基于进程的)。也就是说,您为您认为需要的每个并发请求运行一个进程。像uWSGI 这样的应用服务器会监听你的应用,然后将请求从池中分派给进程。那么,您需要多少流程?

您需要的第二个概念是“吞吐量” - 在特定时间内可以处理多少个请求,它受“并发”的影响但不同于“并发”,并且您的直觉可能会误导您。假设您有 8 个进程。你可能会想“但我会有 100 个用户,8 个显然不够”。假设您知道每个请求在 1/8 (.125) 秒内完成。这意味着每个进程每秒可以处理 8 个请求。 8个进程;您的吞吐量将(大约)每秒 64 个请求。 8 流程让您与 100 个用户的距离比您预期的要近得多。您的 100 个用户可能不会在这 1 秒的窗口中实际发出请求。可能,但不太可能。问题不在于并发,而在于用户是否在合理的时间内得到响应。

希望这会有所帮助。缩放是一个很棒的话题——既简单又令人沮丧的细微差别。随着您的流量增加,上述指导将发生变化,您将需要越来越多的先进技术。但要开始 - 保持简单并专注于基础知识。

见How many concurrent requests does a single Flask process receive?

【讨论】:

以上是关于如何处理我的 AWS EC2 实例上的多个 Python 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个 AWS EC2 实例上的 Node 中部署多个微服务?

如何将多个传出IP地址分配给AWS上的单个实例?

如何将我的 .war 文件复制到 AWS 上的 EC2 实例?

如何处理我的 JavaScript 作业? [关闭]

AWS 中的 TCP 中继功能(如 ngrok)

我应该如何处理我的 pg_log?