Javascript 单页应用程序(SPA)与全堆栈应用程序。限制和优势。

Javascript 单页应用程序(SPA)与全堆栈应用程序。限制和优势。,javascript,java,rest,jboss,single-page-application,Javascript,Java,Rest,Jboss,Single Page Application,目前,我正在将我们的web应用程序从传统的Spring MVC web应用程序升级为带有REST端点的单页应用程序。我们当前的前端MVC应用程序不使用REST调用与后端通信,而是通过直接调用必要的facades与后端通信(用JAVA编写)。JAR文件和WAR文件都打包在一个ear文件中,并部署在我们的生产服务器上(目前使用JBoss EAP 6) 由于我们现在正转向单页应用程序,并用一组新的API升级我们的系统,我在问,单页应用程序和用JAVA编写的其余后端是否应该托管在同一台服务器上(JBos

目前,我正在将我们的web应用程序从传统的Spring MVC web应用程序升级为带有REST端点的单页应用程序。我们当前的前端MVC应用程序不使用REST调用与后端通信,而是通过直接调用必要的facades与后端通信(用JAVA编写)。JAR文件和WAR文件都打包在一个ear文件中,并部署在我们的生产服务器上(目前使用JBoss EAP 6)

由于我们现在正转向单页应用程序,并用一组新的API升级我们的系统,我在问,单页应用程序和用JAVA编写的其余后端是否应该托管在同一台服务器上(JBoss EAP 6)?或者应该将它们拆分到单独的服务器上,一个用于服务SPA内容,另一个用于运行后端?在后一种情况下,哪个生产服务器最适合承载单页应用程序的内容(JS、HTML和CSS)?(我们的后端仍将托管在JBoss EAP 6上)

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

我试图搜索使用JavaREST端点部署单页应用程序的最佳实践,但没有找到任何适合我们需要的有用文章


提前多谢!:)

要回答您的第一个问题:

  • 是的,您完全可以将它们分开,理想情况下您应该这样做,这样您就可以部署前端而不依赖于web服务后端

  • 您可以使用任何流行的web服务器(如Apache、Nginx)部署SPA静态文件,甚至可以在云主机(如S3)上部署(位于云前端CDN后面)

  • 假设您的REST端点仍将使用Java,那么这些端点将需要驻留在Java应用服务器中,如jBOSS、tomcat或glass fish

约束/陷阱:

  • 跨域:

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

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

    • 最后,如果您的web服务是JSON,那么jsonp始终是一个选项

  • 身份验证和安全性:

    • 通常,当您使用像Spring这样的全栈web框架时,您会获得很多现成的安全性和身份验证。您可以使用会话和CSRF等来保护您的站点。但是,对于REST,您通常必须对前端使用基于令牌的身份验证才能使用REST服务。这不一定很难,但却是一种不同的方法,因此列在限制条件下
  • 优势:

  • 后端和前端更容易单独扩展,通过AmazonS3和CloudFrontCDN等服务上的静态SPA,您可以无限扩展该部分

  • 后端web服务现在可以很容易地放在负载平衡器集群模型后面,因为您的服务是REST的

  • 由于关注点分离,现在更容易进行部署

  • 仅推动前端更改时,回归问题较少。您不必再替换整个WAR文件

  • 是否分开服务器

    取决于您的应用程序预期处理的流量类型。让我列出三种情况

  • 低流量:您可以将它与Java App server放在Web服务器的反向代理后面的一台服务器上。web服务器还将为SPA提供一些目录

  • 中等流量:您应该在一台Web服务器上分离前端服务器和Web服务器,并在单独的计算机上托管REST服务。从技术上讲,此设置与选项1没有太大区别,但您的应用程序服务器不会与Web服务器竞争响应请求的CPU周期

  • 高流量:与选项2相同,但现在您可以有多个应用程序服务器和SPA Web服务器,并在顶部有一个Apache/Nginx以实现负载平衡

  • 广阔地理区域内疯狂的流量:在这种情况下,你不想让这些流量侵蚀你自己。最好在CloudFront CDN后面使用类似AmazonS3的服务,这样您的静态内容就可以在全球范围内复制,以获得最佳的响应时间。这也会减少服务器上的负载。现在介绍托管REST端点的应用程序服务器。您可以在云中使用自己的服务器来承载集群,也可以使用像Heroku或amazon这样的PAAS来承载WAR文件并按需扩展

  • 注意:这些扩展场景不考虑数据库,因为您需要更多关于数据库的信息来确定如何在上述场景中扩展数据库


    希望这有帮助,请让我知道,如果你需要更多的细节对任何提到的事情

    这是品味的问题

    我自己更喜欢使用生成器创建SPA,然后使用Spring IO自己的webservices设置(示例:)或Jersey创建服务

    当涉及到部署时,有多个设置

    Apache | Nginx | S3。下面是一篇关于部署AngularJS应用程序的精彩文章:

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


    这不仅仅是我选择的答案

    现在,前端主要托管在单独的服务器上,后端服务在云上,如AWS,在您的场景中,您可以用于前端(Html、CSS、JS、Angular),并且确保您可以使用单独的服务器进行后端服务,使用SpringMVC作为您当前的框架并将其作为restful服务也是可行的

    看看这个