为什么要做前后端解耦?为什么要做动静分离

前言

现在很多规范的互联网公司都采用”前后端分离”,前后端分离既是一种开发模式,也是一种分布式架构。从开发模式角度讲:”前端只专注于自己的技术领域和工作职责:js、cs、ajax 、html、jquert,页面访问是否流畅,适屏问题,页面是否美观。而后端关注的技术领域和工作职责则侧重于java \spring\jvm\分布式架构\微服务,功能实现,接口问题,mysql锁”。从架构上讲则是:”将图片以及静态资源放到具有处理高并发特点的nginx服务器上,将java的动态资源放到tomcat上”。

举个小例子(未作前后端分离的情况)

产品/客户提需求 ->UI做图 ->前端将图做成html ->后端jsp ->测试 ->运维部署

当我们代码通过maven或者eclipse打成war包后,由于未做动静分离,我们的war包里包含jsp、css、js还有页面需要的图片,假设我们都扔到tomcat里然后访问,由于第一次浏览器还没有缓存,抛开集群就拿单机来说,首先要建立tcp连接,假设一个页面有100个图片,那么就需要建立100次连接。如果此时并发10000.建立连接需要消耗大量的socket资源,以及内存。服务器的io ,内存肯定撑不住。所以越是大型的服务,我们越要将架构进行解耦。静态服务器nginx处理前端的东西,动态的资源交给tomcat解析。

JSP的痛点

1.jsp上动态资源和静态资源耦合在一起了,服务器压力大,除非使用nginx. 另外耦合在一起,如果java(动态)出现bug,静态页面直接500错误,用户体验不好

2.前端工程师编写好html页面后交给后端讲html转化成jsp页面,包括各种文件的路径,页面中耦合了标签,java表达式,js代码,html代码,特别乱,修改问题时需要双方协同开发,效率低下。

3.jsp必须要在支持java的web服务器里运行(例如tomcat/resin/jboss/weblogic等),性能提不上来。

4.第一次请求jsp页面,必须要在web服务器编译成servlet。第一次运行会比较慢

5.每次请求jsp都是先访问servelt,再用输出流输出html,效率没有直接使用html高(记住是每次哟~~~内存哟,IO哟

6.如果jsp内容很多,页面加载会很慢,因为是同步加载

7.后端改代码前端也要重新发布

新旧方式请求的权重问题

旧的方式(从架构上讲没有采用nginx动静分离,代码角度也没有做分离)

1.客户端请求

2.tomcat的connector或者servlet接受请求,路由规则由后端制定,权重倾向在后端

3.调用service,dao代码实现业务luoj

4.返货jsp

5.jsp展现动态页面(包含静态)

新的方式(nginx+tomcat)

1.客户端发起请求

2.nginx服务器放html静态资源,所以能够直接返回html静态页面。路由规由前端制定(nginx的反向代理规则),此时权重在前端

3.html页面负责调用服务端接口产生数据(通过ajax调用接口,后台返回json格式化数据)

4.填充前端html,呈现动态效果。在页面上解析并操作DOM

前后端分离的优点

1.问题好定位,静态页面的问题那就是前端负责,功能上的问题由后端处理。防止踢皮球

2.解耦,java代码如果由Bug,数据刷不出来,但是静态页面依然可以访问。

3.版本更新,前端更新发前端,后端更新法后端,再也不会出现,后端更新,前端也需要重新发版。

4.大并发条件下,前后端水平扩展更容易

5.减少后端压力,除了接口以外的其他http请求都由nginx去处理

6.页面内容过多也不用害怕,因为是异步加载,无需等待

7.也许你也需要有微信相关的轻应用,那样你的接口完全可以共用,如果也有app相关的服务,那么只要通过一些代码重构,也可以大量复用接口,提升效率。

 

 

 

 

点赞
    1. 王权富贵 王权富贵说道:
      Google Chrome 71.0.3578.80 Windows 10

      开发模式上的升级,效率提高,专人专用。架构上的升级 ,任务分布式处理,提高单机处理性能,接触单机瓶颈

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Loading...