这道题是面向服务器的。 我有一个托管服务器(一个相当小的服务器,1.6Ghz atom,2Go,200 GO),有几个(4 或 5 个) Play 应用程序和更多应用程序。大多数这些应用程序的使用量都非常小,假设每个应用程序每天有一百个请求。
使用 Play! 的嵌入式服务器部署每个应用程序是否更好?从而为每个应用程序使用 64mb 内存?
或者部署一个 Tomcat,所有的应用程序都在 tomcat 中?所有应用程序共享更大的内存?
编辑:
我将添加一些关于我的情况的更多信息。 服务器还托管:
- 关于 Apache2 上的 10,15 个 PHP 网站
- 通过 Apache mod_dav_svn 的 SVN 服务器
- 用于 Sonar 的 tomcat
- Jenkins 的独立安装(通过 Jetty)
我最初的计划是在 Tomcat 中部署所有这些东西。有了应用程序,Sonar & Jenkins 在 Tomcat 和 Apache2 上运行以获取静态资源。 (图片、脚本)
评论
最后一点,我知道在生产环境中使用 Sonar & Jenkins 持续集成系统并不是真正的最佳选择。但由于这些仅在夜间运行(自动构建),因此它们不会使系统重载。另外,我是一名学生,在经济上,额外的“CI/构建”服务器超出了我的经济能力。
最佳答案
最好的方法是使用包含的 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 平均消耗更少的资源,即使你的应用程序只在晚上运行,服务器仍然在线并囤积内存。越少越好。
SVN 呢?遗憾的是,您将需要 Apache 2 和 Nginx 作为 Apache 2 的反向代理。那为什么不保留 Apache?争论的焦点是用法。从理论上讲,PHP 应用程序的流量将比 SVN 服务器更多,这使得它们的资源消耗更加相关。使用 nginx,分配给 PHP 的 ram 和 cpu 将更少,从而使您的机器响应更快。 Apache 只会在您使用 SVN 时执行,SVN 不会那么频繁。
如果您不想花力气将东西转移到 Nginx(我可以理解),那么只需将 Java 应用程序转移到 Jetty 并使用 Apache 2 作为 Play 的反向代理。但是使用 Play 嵌入式服务器,不要在 Tomcat 中加载应用程序。这样效率会更高。
关于tomcat - PlayFramework 应用程序的最佳部署策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6526735/