动静分离 与 前后分离的区别
动静分离:动态资源(jsp、ftl、thymeleaf)与静态资源(js、css、img)分开部署。
前后分离:接口与视图分开部署,专业的人做专业的事情。例如:前端使用vue.js ,后端只需要提供接口即可。前端项目与后端项目都是独立部署的。
如果我们静态资源与动态资源存放在同一台服务器上面,当静态资源不断增多的时候,我们的服务器访问是扛不住,因为静态资源消耗过多的带宽,导致静态资源无法访问或者访问非常的慢。
在一个网站中,静态资源(js、css、img)是比较占宽带资源的,动态资源占带宽很小。1M带宽=128k/s
所以网站中的静态资源一般都存放在第三方存储平台上,例如:七牛云、阿里云、腾讯云等。这些第三方存储平台内置CDN,进行内容分发,采用就近访问原则。
CDN内容分发:就是将静态资源服务器部署在全国各个服务器节点上去。
就近原则:用户访问的时候,遵循就近原则,离得越近传输速度越快,离得越远传输的速度相对来说就会慢一些。就像我们访问国外的网站速度比较慢,而 访问国内的网站速度就会快一些。
静态资源在前端页面直接配置的是静态服务器上面的资源地址,直接走第三方服务器,而不在走我们本地的服务器。
动静分离架构模式的缺点:
举栗子:我们服务访问呢地址:http://www.test.coim,静态资源存放地址:http://static.test.com。
这样的话就会产生跨域的问题,因为域名地址不同。所以这个时候我们可以使用Nginx来解决跨越问题。
解决跨域问题:
当访问 www.test.com/static的时候 使用 nginx 拦截 转发到 static.test.com
当访问 static.test.com 的时候转发到真实的ip地址。
分布式Session的问题
产生原因:因为session是存储在服务器端的,当服务集群部署的话默认是被轮询访问的,这时候一台服务器存储的有session,另外一台服务器没有存储session就会产生分布式session的问题。
解决方案:
1、使用Spring-session 框架
2、使用 token 代替 session ,token 存储在redis中。