首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单页应用程序(SPA)与完整堆栈应用程序。限制和优势。

单页应用程序(SPA)与完整堆栈应用程序。限制和优势。
EN

Stack Overflow用户
提问于 2016-08-05 14:13:03
回答 3查看 2.8K关注 0票数 4

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

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

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

我试图搜索使用JAVA端点部署单个Page应用程序的最佳实践,但我没有发现任何适合我们需要的有用文章。

提前谢谢!)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-05 14:22:34

要回答您的第一个查询:

  • 是的,您完全可以将它们分开,而且理想情况下,您应该能够部署前端,而不依赖于web服务后端。
  • 您可以使用任何流行的web服务器部署SPA静态文件,比如Apache、Nginx,甚至可以部署在云托管(如S3 )(云前端CDN后面)上。
  • 假设您的REST端点仍然在Java中,那么这些端点需要驻留在jBOSS、tomcat或glass之类的Java应用服务器中。

约束/Gotchas :

  1. 交叉域:
代码语言:javascript
复制
- You can either put your JBOSS behind same Apache/Nginx reverse proxy that runs your static files.  
- Or you can enable CORS on web services if your domains are separate. 
- Lastly, jsonp is always an option if your web-services are JSON.

  1. 身份验证与安全:
代码语言:javascript
复制
- Typically when you go with a full stack web framework like Spring you get a lot of security and authentication out of box. You can protect your site using sessions and CSRF etc. However with REST you typically have to use Token based authentication for your front end to speak with REST services. This is not necessarily difficult, but a different approach, and is hence listed under constraints. 

优势:

  1. 更容易分别扩展后端和前端,在像amazon和CloudFront CDN这样的服务上使用静态SPA,您可以无限地扩展该部分。
  2. 后端web服务现在可以轻松地放在负载均衡器-集群模型后面,因为您的服务是REST。
  3. 由于关注点的分离,现在更容易处理部署问题。
  4. 较小的回归问题时,推动只是前端的变化。你不用再替换整个战争文件了。

单独的服务器或不分离

取决于您的应用程序需要处理的流量类型。让我说出三种情况。

  1. 低流量:您可以在该服务器的反向代理后面放置一个Java的服务器。web服务器还将为SPA某些目录提供服务。
  2. 中度流量:您应该将前端服务器和Web分离到一个web服务器上,并将REST服务托管在不同的机器上。从技术上讲,这个设置与选项1没有太大的不同,但是您的App不会与Web服务器竞争CPU周期来响应请求。
  3. 高流量:与选项2相同,但现在可以有多个App服务器和Same服务器,并且有一个Apache/Nginx来负载顶部的平衡。
  4. 在广阔地理区域的疯狂流量,:在这种情况下,您不想托管这些SAP。最好使用像Amazon这样的S3支持CloudFront CDN的服务,这样就可以将静态内容复制到世界各地,以获得最佳的响应时间。这也将减少服务器上的负载。现在介绍应用程序服务器,用于托管其他端点。您可以使用您自己的服务器在云中承载您的集群,也可以使用PAAS (如Heroku或amazon )来托管WAR文件并根据需要进行缩放。

注意:这些缩放场景不考虑数据库,因为您需要更多关于数据库的信息,以了解如何在上述场景中扩展数据库。

希望这有帮助,请告诉我,如果你需要更多的细节,在任何提到的事情。

票数 3
EN

Stack Overflow用户

发布于 2016-08-05 14:26:48

这是品味的问题。

我自己更喜欢使用像约曼这样的生成器创建SPA,然后使用Spring自己为webservices设置的设置(例如:示例)或泽西岛这里创建一个服务。

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

阿帕奇·尼克斯·S3。下面是一篇用于部署AngularJS应用程序的优秀文章:部署角app

当涉及到Java部分时,您可能仍然需要使用Tomcat、Glashfish或JBOSS等。

,这不是一个答案,只有我的选择,

票数 0
EN

Stack Overflow用户

发布于 2017-06-08 23:55:03

现在,前端主要托管在独立的服务器上,而后端服务主要托管在云上,比如AWS,在您的场景中,您可以使用FireBase作为前端(Html、CSS、JS、ar角),并且可以使用单独的服务器进行后端服务,同时也可以使用Spring作为您当前的框架,并将它作为restful服务。

看看这个演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38791391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档