部署偶尔需要多处理的 Web 应用程序

Deploy a web application with occasional multiprocessing needs

我正在构建一个我想托管在云服务(EC2 或 Azure)上的 Web 应用程序。该应用程序目前正在为一个演示构建,该演示将收到非常少的流量(< 1000 个请求/天)。

一般来说,该应用程序不会使用太多的计算能力,但有一些例程可以充分利用我使用 Python 的多处理库的 12 核开发环境。我希望在 60 秒或更短时间内返回结果 "online"。我认为我可以通过更多内核获得更好的性能,并且如果可能的话我想测试 100s。我预计在 10 年代或这些类型的请求中,当应用程序每天作为演示可用时。

我对云服务的问题是,如果我提供一个大型实例,比如 16 个内核(一个 azure A9 或 EC2 c4.4xlarge),我每个月将花费数百或数千美元来保持可用。

我如何部署此应用程序,使其始终可用,但仅在用户发出需要它们的请求时才使用很多很多内核?

这是一个相当宽泛的问题,但通常您会希望使用某种自动缩放机制。 (即 AWS 自动缩放或您自己的)。

60 秒对于自动缩放实例来说是一个非常苛刻的要求,但您可以通过从一开始就将所有内容预烘焙到您的 EC2 AMI 中来接近它。这意味着从 EC2 实例完成启动的那一刻起,您的所有应用程序和组件都已准备就绪。您可以使用 Packer or aminator

对于 60 秒的周转时间,您可能需要调出其中的几个,也许还要进行负载平衡,然后一旦您的计算完成,您就可以将它们拆除。

您甚至可以通过使用 EC2 spot 实例节省更多资金。 http://aws.amazon.com/ec2/purchasing-options/spot-instances/ 这里的问题是不能保证 spot 实例是 运行 因此如果 Amazon 决定关闭您的实例,您的应用程序需要能够容忍。此外,如果您出价购买现货实例,则无法保证您会得到它。

希望对您有所帮助。