浅析先后台分离

1、传统开发模式(先后台不分离)css

  概念:传统项目都是单节点项目,即全部的模块都是在一个项目中,而后把先后台代码都编译打包部署到一个web容器中,静态资源和数据库访问都是在一个项目中。html

  开发方式:前台人员开发模板页面,而后将开发好的页面交给后台,后台去套模板,而后进行后台开发,先后台高度耦合,出现一些问题就须要重新将也模板页面打回或者后台人员进行修改。前端

  软件运行流程:用户经过url发出请求到服务器,服务器查找数据而且以流的形式生成页面返回到用户。若是页面中有ajax请求,当页面在浏览器总渲染的时候,再次发送ajax请求到服务器请求,当数据彻底到页面则当前请求渲染成功。java

  优势:对于小型项目开发比较快,对于浏览器的渲染压力比较小,服务器将页面大部分数据加载好而后返回给浏览器,对于seo也有较好的支持,对于权限管理比较好。node

  缺点:不适合大型项目的分工,一旦有需求的改变,须要先后台同时作出改变,颇有可能将全部的代码做废,不支持集群开发,不支持负载均衡。nginx

2、先后台分离开发web

  概念:前台和后台部署在不一样的服务器上,开发的时候约定一个接口,而后各自去开发,而且能够单独进行测试用例。在开发的途中先后台能够不相互依赖,而且上线后先后台的耦合度也比较低。ajax

  类别:目前主流的有三种形式,nginx+server、node.js+server和nginx+node.js+server。算法

  一、nginx+serverspring

    工做流程:这是咱们目前使用的方式,nginx最为一个转发的服务器,具备动静分离、负载均衡的做用。浏览器发送url请求,全部的请求都通过nginx,若是是静态的资源(html、css等),直接将页面发送给浏览器,浏览器接收页面后进行渲染,页面中的ajax请求再次发送请求,Nginx判断是动态请求,将请求进行转发到web服务器,web服务器访问数据库将数据进行序列化(目前主流是json格式)返回给浏览器,浏览器完成页面渲染。

    优势:开发的时候前端人员部署一个Nginx服务器,开发过程能够不用彻底依赖后台,能够作到前台后台同时开发。上线后后台服务也是能够部署多个,可以进行横向的扩展,而且能够配置Nginx进行负载均衡或者使用一致性hash算法加强高可用。

              

    缺点:对于浏览器的渲染负担加剧,而且对于seo支持很差。局部响应时间快。

    配置:Nginx配置 略,后台放开跨域权限

      springboot配置(使用java配置方案,也能够用xml形式):其中allowedOrigins表示哪些域名可以来跨域访问(*表示全部)。

@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter  {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*")
                .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
                .allowCredentials(false).maxAge(3600);
    }
}

 

 

 二、node.js+server

    工做流程:目前node.js很是的火,因此使用的也很多,这种架构和第一种Nginx+server很是类似,node.js充当前台和后台的中间层。运行的过程略有不一样,首先用户经过url进行请求,node.js将静态页面以及静态页面须要的数据加载好,而后返回给浏览器,这个和传统有点相同,可是能够经过rpc调用web服务,减小浏览器渲染。至关于多加了一个中间层。

    优势:和第一个大体相同。

  三、node.js+nginx+server   

      先后端分离以后,咱们在原先的架构只上再单独增长了一个Node Server做为中间层,将前端资源部署到Node Server中。Node Server还实现了一层数据代理服务,负责与提供数据的后端服务进行通讯。

    而且还在这个基础上增长并使用了前端机(前端机是对全部的请求进行预处理和负载均衡,而后再转发给后端机。)的Nginx服务,浏览器发起的请求通过前端机的Nginx进行分发,URL请求统一分发到Node Server,在Node Server中根据请求类型从后端

    服务器上经过RPC服务请求页面的模板数据,而后进行页面的组装和渲染;API请求则直接转发到后端服务器,完成响应。

    

 

结语

先后端分离并不是仅仅只是先后端开发的分工,而是在开发期进行代码存放分离、先后 端开发职责分离,先后端可以独立进行开发测试;在运行期进行应用部署分离,先后 端之间经过HTTP请求进行通信。先后端分离的开发模式与传统模式相比,能为咱们 提高开发效率、加强代码可维护性,让咱们有规划地打造一个先后端并重的精益开发 团队,更好地应对愈来愈复杂多变的Web应用开发需求。

相关文章
相关标签/搜索