动静分离java html_动静分离-前后端分离部署
#静态态资源文件分离发布
遇到的问题
多节点web服务器部署期间,访问静态资源可能会出现404。
为什么?
如果java进程我们以jar打包的方式打包文件并启动。假设有N多个pod,客户端请求会随机访问某个pod,有的请求访问为重启过的新pod,有的请求可能会访问到老的pod。
如图假设
每次发布与部署都需要重启后端
java进程的重启会导致后端服务的波动。用户使用高峰时,在后端负载较高的情况下重启服务会有出现意外的可能性。 单纯静态资源文件的修改就可以在任意时段单独发布,且风险较低。
#解决思路
基本思路为静态资源文件与api分离。
静态资源文件永远不会变化,客户端请求静态资源时,不从k8s里面对等的pod中获取,而是想个办法能从某个地方统一完整快速的取到所需的文件。
nginx!稳定高效好用。
# 动静分离带来的更多好处
1、 不用java来处理静态资源文件了。
tomcat等web服务虽然对静态资源都能处理,但是效率还是不如nginx。
参考 https://www.cnblogs.com/wskwbog/p/10816345.html
2、cookie free。访问静态资源文件一般都需要cookie信息,相同域名浏览器会主动携带cookie信息,当静态资源文件分离时,可将静态资源文件放到不同的域名下, 节省服务流量。静态资源文件分离能更方便的支持更换域名。
3、静态资源文件分离, 方便cdn的接入。
#前后端分离应用部署方案
通常单页应用只有一张入口页html,入口也引用了相应的静态资源文件。
* 先,部署后端,需要保证后端服务能兼容新老版本。
* 后,部署前端,需要保证新老资源文件都能获取到。
gulp与webpack等前端应用已经将前端的资源文件打包好, 我们只需要把打包好的静态资源文件抽出来,发布到nginx服务器的静态资源文件目录下,当客户端的请求发现是静态资源文件时,直接通过nginx获取。
为什么要分两个目录?每次发布静态文件的不同地方是什么?
前后端分离应用,前端部署对客户端而言,唯一变化的是入口页不同。入口页引的js,css等静态资源文件也可能不同。那我们是不是只要保证每次发布,入口页替换成新版,静态资源文件新老版本都能取到就可以了。
/data/html 首页不需要保留老页面,每次发布直接替换文件
/data/staticjs,css等静态资源需要保留历史内容,每次发布追加内容
客户端如果缓存了入口页html怎么办?
客户端禁止缓存入口页html。
如何区分新版旧版js,css等静态资源文件?
js,css文件假设新老版本文件名字一致,那岂不是也被替换掉了?客户端旧html将会取到名字相同的新js,css。
非入口静态资源文件名字需要加入hash值。
nginx示例
location / {
proxy_passhttp://$mainUpstream;
access_logoff;
}
location ~* \.(?:css|js|ico|gif|jpe?g|png|woff|ttf)$ {
expires 1y;
root"/data/static";
}
location ~* index.html$ {
add_headerCache-Control "no-store";
root "/data/html";
}
注意点:gzip配置, 静态资源文件直接从nginx获取需要配置支持压缩的后缀名。
静态文件追加方式
rsync.
首页发布方式
scp直接复制
#灰度环境链路
在此基础上,如何加入灰度环境?
灰度环境和生产环境的区别是什么,还是入口页html不同。
nginx示例
map $cookie_SERVER $html {
default "/data/html-product";
0 "/data/html-grey";
}
location ~* /(index|index_grey)\.html$ {
add_headerCache-Control "no-store";
root $html;
}
所有其他静态资源往/data/static文件夹里面追加,无论灰度还是正式环境都能正常获取。
发布时注意点
先追加静态文件,后替换首页入口html.
初次发布需要保证发布的静态资源文件与生产环境一致。
# freedmarker部署方案
freemarker项目与普通单页应用的不同点是什么?
单页应用的首页html和静态资源打包好之后不会再可能改变了,freemarker无固定首页,html是后端动态渲染产生的,后端重启直接可能改变html,导致静态资源文件地址改变,或者出现新的请求。
静态文件分离思路一致,也是把css,js提取,nginx提前返回。
先,部署静态资源文件,追加的方式部署,保证新旧js,css都能正常获取
后,重启后端服务
后端请求有没有可能404?
假设ftl存在这样一段代码,
某次调整改成了
。
在发布重启过程中,某次请求访问到了新节点,渲染出了/login2.shtml的模板html, 再次去访问/login2.shtml时访问到了老节点,还是会出现访问不到的情况。
如何解决?
动静分离java html_动静分离-前后端分离部署相关推荐
- 前后端分离架构:Web 实现前后端分离,前后端解耦
你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 blog.csdn.net/fuzhongmin05 推荐:https://ww ...
- java 前端 后端 分离_到底什么是前后端分离?
这里是经常容易被混淆的一些概念. 在说前后端分离之前,要先弄清楚: 1.什么是前端? 2.什么是后端? 3.什么前后端不分离? 4.什么是动态数据? 5.什么是静态文件? 6.什么是动静分离? 然后, ...
- Java前后端分离第三方登录_网站前后端分离情况下如何实现QQ微信等第三方登陆-Fun言...
前言 最近在弄第三方登录,实现起来很简单,就是调几个接口获取个人信息即可,详细了解:maven项目整合QQauth2.0第三方登录详细说明,然后因为本网站是前后端分离的,所以不能再回调接口那里直接跳转 ...
- java短视频开发技术_看Java学员如何用前后端分离技术搭建短视频健身APP
知了堂在教学过程中一直十分注重学员的实践能力,每阶段结束必有项目考核,全面检验分析学员学习效果.为更好的进行下一阶段的课程学习,本周一Java32班学员迎来了第二阶段的项目考核. 让我们来看看此次考核 ...
- 使用layuimini模块快速开发java后台系统模板(前后端分离)
使用layuimini模块快速开发后台系统模板(前后端分离) 下面已仓库管理系统为例(下面源码可自己下载来看) 1.登录界面login.html 下面的验证码使用的是Hutool 来实现的(Hutoo ...
- java图书管理系统(前后端分离前)
项目源码Git地址:https://github.com/liuwen766/MyBookManagement.git 项目源码csdn地址:https://download.csdn.net/dow ...
- python flask 分页前后端分离_flask展示pyecharts图表前后端分离的问题
我按照pyecharts的官网案例学习flask,其中有段flask前后端分离的示例. 官方教程:https://pyecharts.org/#/zh-cn... 我用前后端分离展示柱状图.饼图都没问 ...
- cors 前后端分离跨域问题_前后端分离之CORS跨域访问踩坑总结
前言 前后端分离的开发模式越来越流行,目前绝大多数的公司与项目都采取这种方式来开发,它的好处是前端可以只专注于页面实现,而后端则主要负责接口开发,前后端分工明确,彼此职责分离,不再高度耦合,但是由于这 ...
- .net 开发怎么实现前后端分离_ASP.NET Core模块化前后端分离快速开发框架介绍
源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:http://118.24.75.170:6220/ 账户:admin 密码:ad ...
最新文章
- 理解java和python类变量以及类的成员变量
- IBM服务器以及本地PC机安装suse linux,oracle测试,遇到的问题有:
- C++:运算符重载函数之成员运算符重载函数
- Python教程:函数对象与函数嵌套
- JUC学习笔记及拓展
- [文摘20080919]小软件将网页变为3D世界
- 再现神人!仅仅只花4天半就解开了史上最难密码,这下整个圈子都炸开了.........
- 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)部分题解
- 土城战役_避免使用FOR –反假战役
- 软件工程项目经理必备能力
- Hadoop FS 常用命令详解
- 利用 MATLAB 编程实现 Newton 法与阻尼 Newton 法
- Thrift Oneway是什么?
- android 工具栏透明,Android 系统状态栏沉浸式/透明化完整解决方案
- 除了AI,你不该忽视Python在这4大领域的应用!
- 300万数据导入导出优化方案,从80s优化到8s(实测)
- 计算机中登录音乐在哪,网易云音乐扫一扫在哪里
- java隐藏类_java Class类中隐藏和覆盖的区别
- 2015年中国数据库技术大会(DTCC)PPT合集
- Python 手把手教你爬取淘宝的笔记本电脑数据