Play Framework应用程序的最佳部署策略?

时间:2011-06-29 20:19:15

标签: tomcat deployment playframework

这个问题是面向服务器的。 我有一个托管服务器(相当小的一个,1,6Ghz原子,2Go,200 GO),有几个(4或5)播放应用程序和更多。这些应用程序中的大多数都有一个非常小的用途,比方说每天一百个请求。

  1. 使用Play的嵌入式服务器部署每个应用程序是否更好!因此每个应用程序使用64mb的内存?

  2. 或者在Tomcat中部署Tomcat以及所有应用程序?所有应用程序共享更大的内存?

  3. 编辑:

    我将添加一些关于我的情况的进一步信息。 服务器还托管:

    • Apache2
    • 上约10,15个 PHP 网站
    • SVN服务器通过Apache mod_dav_svn
    • 用于声纳
    • 的tomcat
    • Jenkins (通过Jetty)的独立安装

    我最初的计划是在Tomcat中部署所有这些东西。拥有应用程序,Sonar& Jenkins在Tomcat和Apache2上运行静态资源。 (图片,剧本)

    COMMENT

    最后一点,我知道有Sonar& Jenkins,生产环境中的持续集成系统并不是最佳选择。但由于它们仅在夜间运行(自动构建),因此它们不会使系统过载。另外,我是一名学生,在经济上,额外的“CI /构建”服务器是我的财务能力之外的。

3 个答案:

答案 0 :(得分:13)

最好的方法是使用附带的Play服务器,将NGinx作为反向代理放在它前面,以解决所有重定向/请求管理问题。

为什么这个而不是Tomcat?您可以从比较性能的this article开始。另一个参数是Tomcat加载Play不需要也不使用的所有Java EE环境,消耗你想要的应用程序的内存和资源(特别是如果你使用内存缓存)。

在Nginx上作为反向代理,this应该提示为什么要使用它而不是Apache。

编辑(问题编辑):

在您的情况下,您可以优化资源。

首先用Nginx替换Apache 2。 Nginx可以很好地为PHP服务(如果你使用Ubuntu,请参阅this)。它将非常有效地提供Play服务,并可用作Java服务器的代理。

然后,您可以将所有Java应用程序移动到Jetty,并摆脱Tomcat。 Jetty平均消耗较少的资源,即使你的应用程序只在晚上运行,服务器仍然在线并囤积ram。越少越好。

SVN怎么样?遗憾的是,你需要Apache 2和Nginx作为Apache 2的反向代理。为什么不保留Apache呢?争论将是用法。从理论上讲,PHP应用程序将拥有比SVN服务器更多的流量,这使得他们拥有的资源消耗更加相关。使用nginx,分配用于PHP的ram和cpu将减少使您的计算机更具响应性。 Apache只会在你使用SVN时才会起作用,而这种情况并不常见。

如果你不想把努力转移到Nginx(我能理解),那么只需将Java应用程序移动到Jetty并使用Apache 2作为Play的反向代理。但是使用Play嵌入式服务器,请不要在Tomcat中加载应用程序。这样会更有效率。

答案 1 :(得分:6)

我正在运行的生产部署正在使用Play嵌入式服务器。它使生活方式比Tomcat更简单,特别是重新部署 - 我在屏幕下运行服务器,升级包括“Ctrl-C”,“向上箭头”,“输入”,执行:

% git stash; git pull; git stash apply; play run

使用2G的内存,我不会过分担心每个进程的开销。为摆脱Tomcat的复杂性,这当然是值得付出的代价。

(git stashing允许我在制作时有一些非git-committed配置 - 比需要的更懒惰,但是: - )

答案 2 :(得分:2)

我会为每个应用程序启动播放服务器。它更容易配置,更容易拥有单独的日志文件。 此外,您可以单独重新启动每个应用程序。在tomcat上重新部署通常是导致错误的结果。

缺点:你必须配置像lighttp这样的反向代理来获得像mydomain.org/app1和mydomain.org/app2这样的好网址