前言
前后端分离已成为互联网项目开发的业界标准使用方式,通过Nginx+Tomcat的方式(也可以中间加一个Node.js)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。核心思想是前端HTML页面通过Ajax调用后端的restuful api接口并使用json数据进行交互。
在互联网架构中,名词解释:
Web服务器:一般指像Nginx,Apache这类的服务器,他们一般只能解析静态资源。
应用服务器:一般指像Tomcat,Jetty,Resin这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好。
一般都是只有web服务器才能被外网访问,应用服务器只能内网访问。
前后端分离优势:
● 可以实现真正的前后端解耦,前端服务器使用Nginx。前端/WEB服务器放的是CSS,js,图片等等一系列静态资源(甚至你还可以CSS,js,图片等资源放到特定的文件服务器,例如阿里云的oss,并使用CDN加速),前端服务器负责控制页面引用&跳转&路由,前端页面异步调用后端的接口,后端/应用服务器使用Tomcat(把Tomcat想象成一个数据提供者),加快整体响应速度。(这里需要使用一些前端工程化的框架比如Node.js,react,router,react,redux,webpack,发现bug,可以快速定位是谁的问题,不会出现互相踢皮球的现象。)页面逻辑,跳转错误,浏览器兼容性问题,脚本错误,页面样式等问题,全部由前端工程师来负责。接口数据出错,数据没有提交成功,应答超时等问题,全部由后端工程师来解决。双方互不干扰,前端与后端是相亲相爱的一家人。
● 在大并发情况下,我可以同时水平扩展前后端服务器,比如淘宝的一个首页就需要2000+台前端服务器做集群来抗住日均多少亿+的日均pv。(阿里的技术峰会上,听说他们的web容器都是自己写的,就算单实例抗10万HTTP并发,2000台是2亿HTTP并发,并且他们还可以根据预知洪峰来无限拓展,很恐怖,就一个首页。。。)
● 减少后端服务器的并发/负载压力。除了接口以外的其他所有HTTP请求全部转移到前端Nginx上,接口的请求调用Tomcat,参考Nginx反向代理Tomcat。且除了第一次页面请求外,浏览器会大量调用本地缓存。
即使后端服务暂时超时或者宕机了,前端页面也会正常访问,只不过数据刷不出来而已。
● 如果需要有微信相关的轻应用,那样你的接口完全可以共用,如果也有app相关的服务,那么只要通过一些代码重构,也可以大量复用接口,提升效率。
● (多端应用)页面显示的东西再多也不怕,因为是异步加载。
● Nginx支持页面热部署,不用重启服务器,前端升级更无缝。
● 增加代码的维护性&易读性(前后端耦在一起的代码读起来相当费劲)。
● 提升开发效率,因为可以前后端并行开发,而不是像以前的强依赖。
● 在Nginx中部署证书,外网使用HTTPs访问,并且只开放443和80端口,其他端口一律关闭(防止黑客端口扫描),内网使用HTTP,性能和安全都有保障。
● 前端大量的组件代码得以复用,组件化,提升开发效率,抽出来!