在实际环境中,由于负载均衡,cdn加速的等原因,服务器都需要耗费内存在创建socket来进行tcp链接,导致服务器的压力很大,当多人并发访问之后,会导致负载过大的情况发生,所以,我们需要在应用服务器的前端再加一个web服务器来提高访问效率,提高性能。
首先我们前后端技术人员会用各种框架以及开发技术写出前后端的代码,接着,把前端的代码放到web服务器(Nginx)上,而把后端的代码放到应用服务器(Tomcat)上。接着根据主机获取到的ip地址就可以远程访问应用了。
前后端代码的分离可以实现低耦合的特点。
动静分离的优点:
1.可以实现真正的前后端解耦,前端服务器使用nginx
2.发现bug,可以快速定位是谁的问题,不会出现互相踢皮球的现象。
3. 在大并发情况下,可以同时水平扩展前后端服务器,比如淘宝的一个首页就需要2000+台前端服务器做集群来抗住日均多少亿+的日均pv
4. 减少后端服务器的并发/负载压力
5. 即使后端服务暂时超时或者宕机了,前端页面也会正常访问,只不过数据刷不出来而已
6. 也许你也需要有微信相关的轻应用,那样你的接口完全可以共用,如果也有app相关的服务
7. 页面显示的东西再多也不怕,因为是异步加载
8. nginx支持页面热部署,不用重启服务器,前端升级更无缝
9. 增加代码的维护性&易读性(前后端耦在一起的代码读起来相当费劲)
10. 升开发效率,因为可以前后端并行开发,而不是像以前的强依赖
11. 在nginx中部署证书,外网使用https访问,并且只开放443和80端口,其他端口一律关闭(防止黑客端口扫描),内网使用http,性能和安全都有保障
12. 前端大量的组件代码得以复用,组件化,提升开发效率,抽出来
所谓web服务器就是负责处理HTTP协议,只能发送静态页面的内容,常用的是Nginx。
应用服务器是处理类似于JSP,PHP,ASP等动态内容,常用的是Tomcat。
Tomcat和Nginx服务器的区别:
nginx是Http服务器,专为处理Http请求而诞生,处理Http请求能力强,适合用于处理静态资源(通过Http请求如实地返回内容,并且每个请求处理时间不会很长),底层采用单线程异步非阻塞方式,当读取静态资源发生IO时,可以先处理其他请求。据说nginx单机能抗5W并发。
tomcat是servlet/JSP容器,就是servlet/JSP运行的环境,tomcat把接收到的http请求交给servlet处理,然后servlet处理那些不讲逻辑的业务逻辑,适合处理动态资源。tomcat一般采用线程池的方式处理请求,当请求数量多,线程处理时间长,线程处理不过来,线程间会频繁切换,消耗大量cpu资源和内存。当请求超过一定的数量,会拒绝连接。因此JSP并不适合用于高并发的场景。
静态资源全部部署到nginx中,动态资源放在tomcat中,也就是动静分离的思想。一个请求过来,先请求nginx的静态资源,浏览器加载静态资源后,通过nginx的反向代理请求后端服务器,这里还可以使用nginx的负载均衡,添加多台后端服务器:
大量并发浏览器请求--->web服务器集群(nginx)--->应用服务器集群(tomcat)--->文件/数据库/缓存/消息队列服务器集群
服务器架构集群:多台服务器组成的响应高并发,高数据量访问的架构集群。
负载均衡:分发请求到不同的服务器,使流量平均分配
静态资源服务器:存储静态资源,如css html
js等。
反向代理:a想访问c,但a不能直接访问c,而b能访问c,所以a访问b,b访问c,c返回数据给a
在计算机网络中,反向代理是代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器簇的存在
高可用服务器,用来监控负载均衡服务器,一旦负载均衡服务器宕机,会接替负载均衡服务
器的工作,继续进行网路的分发工具。如heartbit
cdn内容分发网络:其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置反向代理节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。