后端开发的一些认识

一、服务器

web服务器:一般指像Nginx、Apache这类的服务器,它们一般只能解析静态资源。

应用服务器:一般指像Tomcat、Jetty、Resin这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好。

一般都是只有web服务器才能被外网访问,应用服务器只能内网访问。

二、工作重心

把精力放在Java基础,设计模式,JVM原理,Spring+SpringMVC原理及源码,Linux,MySQL事务隔离与锁机制,MongoDB,HTTP/TCP,多线程,分布式架构(RPC),弹性计算架构,微服务架构(SpringBoot+Zookeeper+Docker+Jenkins),Java性能优化,以及相关的项目管理等等。

后端追求的是:三高(高并发,高可用,高性能),安全,存储,业务等等。

三、开发流程

1.产品经历/领导/客户提出需求

2.UI做出设计图

3.前后端约定接口&数据&参数

4.前后端并行开发(无强依赖,可前后端并行开发,如果需求变更,只要接口&参数不变,就不用两边都修改代码,开发效率高)

5.前后端集成

6.前端页面调整

7.集成成功

8.交付

四、数据请求方式

1.浏览器发送请求

2.直接到达html页面(前端控制路由与渲染页面,整个项目开发的权重前移)

3.html页面负责调用服务端接口产生数据(通过ajax等,后台返回JSON格式数据,JSON数据格式因为简洁高效而取代XML)

4.填充html,展现动态效果,在页面上进行解析并操作DOM。

请求步骤总结为:大量并发浏览器请求—>web服务器集群(nginx)—>应用服务器集群(tomcat)—>文件/数据库/缓存/消息队列服务器集群

五、前后端分离优势

1.可以实现真正的前后端解耦,前端服务器使用Nginx。

前端/WEB服务器放的是CSS、JS、图片等等一系列静态资源(甚至你还可以CSS、JS、图片等资源放到特定的文件服务器,并使用cdn加速),前端服务器负责控制页面引用、跳转、路由,前端页面异步调用后端的接口,后端/应用服务器使用Tomcat(把Tomcat想象成一个数据提供者),加快整体响应速度。(这里需要使用一些前端工程化的框架比如nodejs,react,router,react,redux,webpack)

2.发现bug,可以快速定位是谁的问题,不会出现互相推诿的现象。

页面逻辑,跳转错误,浏览器兼容性问题,脚本错误,页面样式等问题,全部由前端工程师来负责。

接口数据出错,数据没有提交成功,应答超时等问题,全部由后端工程师来解决。

3.在大并发情况下,可以同时水平扩展前后端服务器,比如淘宝的一个首页就需要2000+台前端服务器做集群来抗住日均多少亿+的日均pv。

4.减少后端服务器的并发/负载压力

除了接口以外的其他所有HTTP请求全部转移到前端Nginx上,接口的请求调用Tomcat,参考Nginx反向代理Tomcat。

且除了第一次页面请求外,浏览器会大量调用本地缓存。

5.即使后端服务暂时超时或者宕机了,前端页面也会正常访问,只不过数据刷不出来而已。

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

7.页面显示的东西再多也不怕,因为是异步加载。

8.nginx支持页面热部署,不用重启服务器,前端升级更无缝。

9.增加代码的维护性、易读性(前后端耦在一起的代码读起来难度增加)。

10.提升开发效率,因为可以前后端并行开发,而不是像以前的强依赖。

11.在Nginx中部署证书,外网使用HTTPS访问,并且只开放443和80端口,其他端口一律关闭(防止黑客端口扫描),内网使用HTTP,性能和安全都有保障。

12.前端大量的组件代码得以复用,组件化,提升开发效率,做成中间件。
六、细节注意

1.在开需求会议的时候,前后端工程师必须全部参加,并且需要制定好接口文档,后端工程师要写好测试用例(2个维度),不要让前端工程师充当你的专职测试,推荐使用Postman或soapui或Jmeter,service层的测试用例拿junit写。

2.上述的接口并不是Java里的interface,说白了调用接口就是调用你controler里的方法。

3.均衡些前端团队的工作量,减轻了后端团队的工作量,提高了性能和可扩展性。

4.我们需要一些前端的框架(vue/react/angular)来解决类似于页面嵌套,分页,页面跳转控制等功能。

5.如果页面上有一些权限等等相关的校验,那么这些相关的数据也可以通过ajax从接口里拿。

6.对于既可以前端做也可以后端做的逻辑,放到前端实现。这样你的逻辑需要计算资源进行计算,如果放到后端去run逻辑,则会消耗带宽、内存、cpu等等计算资源,服务端的计算资源是有限的,而如果放到前端,使用的是客户端的计算资源,这样你的服务端负载就会下降(高并发场景)。而类似于数据校验这种,前后端都需要做。

7.前端需要有机制应对后端请求超时以及后端服务宕机的情况,友好的展示给用户。

8.其实对于JS、CSS、图片这类的静态资源可以考虑放到类似于阿里云的oss这类文件服务器上(如果是普通的服务器&操作系统,存储在到达PB级的文件后,或者单个文件夹内的文件数量达到3-5万,IO会有很严重的性能问题),再在oss上配CDN(全国子节点加速),这样你页面打开的速度极快, 无论你在全国的哪个地方,并且你的Nginx的负载会进一步降低。

9.如果你要玩轻量级微服务架构,要使用nodejs做网关,用nodejs的好处还有利于SEO优化,因为Nginx只是向浏览器返回页面静态资源,而国内的搜索引擎爬虫只会抓取静态数据,不会解析页面中的JS,这使得应用得不到良好的搜索引擎支持。同时因为nginx不会进行页面的组装渲染,需要把静态页面返回到浏览器,然后完成渲染工作,这加重了浏览器的渲染负担。浏览器发起的请求经过Nginx进行分发,URL请求统一分发到nodejs,在nodejs中进行页面组装渲染;API请求则直接发送到后端服务器,完成响应。

10.如果遇到跨域问题,Spring的CORS可以完美解决,但一般使用nginx反向代理都不会有跨域问题,除非你把前端服务和后端服务分成两个域名。

11.如果想玩多端应用,注意要去掉Tomcat原生的session机制,要使用Token机制,使用缓存(因为是分布式系统),做单点,对于Token机制的安全性问题,可以使用JWT。

12.前端项目中可以加入Mock测试(构造虚拟测试对象来模拟后端,可以独立开发和测试),后端需要有详细的测试用例,保证服务的可用性与稳定性。

posted @ 2020-03-10 09:19  codeg  阅读(919)  评论(0编辑  收藏  举报