7

我创建了我的第一个 Play 应用程序。哪种部署方法最适合生产?我应该将整个项目复制到生产服务器并运行播放开始吗?还是我应该对我的应用程序进行一场战争并部署在 tomcat / jboss 中?哪个是最推荐的方式?与它的 rails 类型的行为相比,对它感到困惑。请注意,这应该是一个大数据应用程序,并且稍后它可能会服务器加载的请求。所以我们也在考虑可扩展性、可用性和性能方面。决定将此应用程序部署在云中。

谢谢。

4

2 回答 2

20

正如其他人所说,使用dist命令是为一次性应用程序部署 Play 的最简单方法。但是,为了详细说明,我在这里有一些其他选择以及我对它们的经验:

  • 当我有一个我经常更新的应用程序时,我通常会在服务器上安装 Play,并通过 Git 执行更新。这样做,每次更新后,我只是运行play stop(停止正在运行的服务器),有时我运行play clean以清除任何可能损坏的库或二进制文件,然后运行以确保所有先决条件都存在并执行编译,play stage最后play start为更新的应用程序运行服务器。看起来很多,但通过快速 bash 脚本很容易实现自动化。

  • 另一种方法是将 Play 部署在 Apache、Nginx 等前端 Web 服务器后面。如果您想执行某种负载平衡,这非常有用,但不是必需的,因为 Play 与自己的服务器捆绑在一起。文档:http ://www.playframework.com/documentation/2.1.1/HTTPServer

  • 使用 play2war 插件创建 WAR 存档是另一种部署方式,但我不会推荐它,除非您将它提供给已经拥有基于您提到的这些 servlet 容器构建的主要基础设施的人(就像许多大公司所做的那样)。使用 servlet 容器增加了 Play 应该自然消除的复杂性(因此是集成服务器)。据我所知,与前面描述的两种方法相比,使用此方法没有显着的性能提升。

  • 当然,总会有play dist它为您创建包,您将其上传到您的服务器并play start从那里运行。这可能是最简单的选择。文档:http ://www.playframework.com/documentation/2.1.1/ProductionDist

就性能和可扩展性而言,Play 中的 Netty 服务器将运行得非常充分,可以满足您的需求。这是一个信誉良好的链接,显示 Netty 具有所有框架中最快的性能和一个“股票” Play 应用程序,它处于该领域的中间位置,但在性能方面领先于 Rails/Django:http://www.techempower .com/blog/2013/04/05/frameworks-round-2/

不要忘记,如果您需要更多负载平衡等可用性,您可以随时更改您的部署架构以在前端服务器后面运行,如上所述。这是 Play 的一个微不足道的变化。我仍然不会推荐 WAR 部署选项,除非像我说的那样,您已经安装了大量使用的 servlet 容器,有人强迫您使用它来服务您的应用程序。

可扩展性和性能也与其他因素有很大关系,例如您对缓存的使用、数据库配置、并发使用(Play 擅长)以及底层硬件或云平台的质量。例如,Instagram 和 Pinterest 每天在 Python/Django 堆栈上为数百万人提供服务,在所有流行的基准测试中表现平平。他们通过大量缓存和高性能数据库(这通常是大型应用程序的瓶颈)来缓解这种情况。

冒着使这个答案太长的风险,我将添加最后一件事。我也曾经为性能和可扩展性而烦恼,认为我需要最强大的堆栈和配置来运行我的应用程序。除非您像 Google 或 Facebook 那样谈论每个算法都必须微调的规模,否则情况不再如此,因为它每天将被轰炸十亿次。硬件(或云)资源很便宜,但开发人员/系统管理员的时间却不便宜。与原始性能比较相比,您应该考虑部署应用程序的易用性和可维护性,即使在 Play 的情况下,性能最佳的部署配置也可以说是最简单的选择。

于 2013-07-01T23:13:28.403 回答
4

您不需要使用 Play 的控制台来运行应用程序,它会消耗一些资源,并且它的主要目标是在开发阶段快速启动。

最好的选择是使用文档中描述的dist命令。多亏了这一点,您甚至不需要在目标机器上安装 Play,因为dist它创建了可以使用的包含所有必需元素的独立应用程序(也是内置服务器,因此您不需要在 WAR 中部署它)任何容器)。

如果您打算使用云,您还应该检查报价,即。来自 Heroku 或 CloudBees,它允许您通过...通过 git 存储库推送更改来部署应用程序,这是一种非常舒适的方式,检查文档的主页,向下滚动到链接:部署到...了解更多详细信息。

于 2013-07-01T19:27:13.090 回答