玩框架2.1应用程序部署

时间:2013-07-01 18:34:08

标签: java tomcat deployment playframework-2.0 cloud

我创建了我的第一个Play应用程序。哪种生产最适合的部署方法?我应该将整个项目复制到生产服务器并运行play start吗?或者我应该从我的应用程序中进行战争并部署在tomcat / jboss中?哪种方式最推荐?与其轨道类型的行为相比,与它混淆。请注意,这应该是一个大数据应用程序,也可能在以后服务器加载请求。所以我们也在考虑可扩展性,可用性和性能方面。决定将此应用程序部署在云中。

感谢。

2 个答案:

答案 0 :(得分: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具有所有框架中最快的性能和一个" stock"将应用程序播放到该字段中间的某个位置,但在性能方面优于Rails / Django:http://www.techempower.com/blog/2013/04/05/frameworks-round-2/

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

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

冒着让这个答案太长的风险,我只会添加最后一件事。我也常常担心性能和可扩展性,认为我需要最强大的堆栈和配置来运行我的应用程序。除非你像谷歌或Facebook那样说话,每个算法都必须经过精心调整,因为它每天会被轰炸十亿次,所以情况再也不是这样了。硬件(或云)资源很便宜,但开发人员/系统管理员时间不长。您应该考虑在原始性能比较中部署应用程序的易用性和可维护性,即使在Play的情况下,性能最佳的部署配置也可以说是最简单的选项。

答案 1 :(得分:4)

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

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

如果您打算使用云,您还应该检查优惠,即。来自Heroku或CloudBees,它允许您通过...通过git存储库推送更改,这是非常舒适的方式来部署您的应用程序,检查documentation's home,向下滚动到链接:部署到.. 。了解更多详情。