首页 文章

单页应用程序(SPA)与完整堆栈应用程序 . 制约因素和优势 .

提问于
浏览
2

目前,我正在将我们的Web应用程序从传统的Spring MVC Web应用程序升级到具有REST endpoints 的单页面应用程序 . 我们当前的前端MVC应用程序不使用REST调用与后端通信,而是通过直接调用必要的外观与后端(用JAVA编写)进行通信 . JAR文件和WAR文件都打包在一个ear文件中,并部署在我们的 生产环境 服务器上(目前使用的是JBoss EAP 6) .

由于我们现在转向单页面应用程序,并使用一组新的API升级我们的系统,我怀疑,单页应用程序和JAVA编写的其余后端是否应该托管在同一台服务器上(JBoss) EAP 6)?或者它们应该分成不同的服务器,一个用于提供SPA内容,一个用于运行后端?在后一种情况下,哪个 生产环境 服务器最适合托管单页应用程序(JS,HTML和CSS)的内容? (我们的后端仍将托管在JBoss EAP 6上)

在不同的服务器上分离前端和后端有什么好处?

我尝试搜索使用JAVA REST endpoints 部署单页应用程序的最佳实践,但我没有找到适合我们需求的任何有用的文章 .

非常感谢提前! :)

3 回答

  • 0

    要回答您的第一个查询:

    • 是的,您绝对可以将它们分开,理想情况下,您应该这样部署前端而不依赖于Web服务后端 .

    • 您可以将SPA静态文件部署到Apache,Nginx等任何流行的Web服务器,甚至可以部署在像S3这样的 Cloud 托管上(在 Cloud 端CDN之后) .

    • 假设你的REST endpoints 仍然是Java,那些需要驻留在Java应用服务器中,如jBOSS,tomcat或glass fish .

    Constraints/Gotchas :

    • Cross domain:

    • 您可以将JBOSS置于运行静态文件的相同Apache / Nginx反向代理之后 .

    • 或者,如果您的域名是独立的,则可以在Web服务上启用CORS .

    • 最后,如果您的Web服务是JSON,jsonp始终是一个选项 .

    • Authentication and Security:

    • 通常,当您使用像Spring这样的完整堆栈Web框架时,您可以获得大量安全性和身份验证 . 您可以使用会话和CSRF等保护您的站点 . 但是,使用REST,您通常必须使用基于令牌的身份验证为您的前端提供REST服务 . 这不一定是困难的,而是一种不同的方法,因此列在约束下 .

    Advantages:

    • 更容易分别缩放后端和前端,在亚马逊S3和CloudFront CDN等服务上使用静态SPA,您可以无限扩展该部分 .

    • 现在可以轻松地将后端Web服务置于负载均衡器 - 集群模型之后,因为您的服务是REST .

    • 由于关注点分离,现在更容易处理部署 .

    • 推送前端更改时出现较小的回归问题 . 您不必再替换整个WAR文件 .

    Separate Servers or not

    取决于您的应用程序应该处理什么样的流量 . 让我列出三个场景 .

    • Low traffic :您可以将一台服务器与Java App服务器放在该Web服务器的反向代理之后 . Web服务器还将为SPA提供一些目录 .

    • Moderate traffic :您应该在一台Web服务器上分离前端服务器和Web服务器,并在Separate机器上托管REST服务 . 从技术上讲,此设置与选项1没有太大区别,但您的App Server不会与Web服务器竞争CPU周期以响应请求 .

    • High traffic :与选项2相同,但现在您可以拥有多个App服务器和SPA Web服务器,并在顶部有一个Apache / Nginx进行负载 balancer .

    • Insane traffic over wide geographic region :在这种情况下,您不希望将自己的SAP托管 . 最好使用像Amazon S3这样的服务支持CloudFront CDN,这样您的静态内容就可以在全球范围内进行复制,以实现最佳响应时间 . 这也可以减少服务器上的负载 . 现在关于用于托管REST endpoints 的App服务器 . 您既可以使用托管集群的 Cloud 中自己的服务器,也可以使用Heroku或amazon等PAAS来托管WAR文件并按需扩展 .

    注意:这些扩展方案不考虑数据库,因为您需要有关数据库的更多信息来确定方法在上述场景中进行扩展 .

    希望有所帮助,如果您需要有关上述任何内容的更多细节,请告诉我 .

  • 0

    这是一个品味问题 .

    我自己更喜欢使用像Yeoman这样的生成器创建SPA,然后创建一个服务,其中包含Spring IO自己的webservices设置(例如:spring webservice example)或Jersey here .

    在部署方面有多种设置 .

    Apache | Nginx | S3 . 这是一篇用于部署AngularJS应用程序的精彩文章:deploying angular app

    在Java部分中,您可能仍需要使用Tomcat,Glashfish或JBOSS等 .

    This is not an answer only my taste of choice

  • 3

    现在有一天,前端主要托管在像AWS这样的 Cloud 上的单独服务器和后端服务上 . 在您的场景中,您可以使用FireBase作为前端(Html,CSS,JS,Angular)并确保您可以使用单独的服务器对于后端服务,使用Spring MVC作为您当前的框架作为一个宁静的服务也是可行的 .

    看看这个demo

相关问题