#静态态资源文件分离发布

遇到的问题

多节点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_动静分离-前后端分离部署相关推荐

  1. 前后端分离架构:Web 实现前后端分离,前后端解耦

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 blog.csdn.net/fuzhongmin05 推荐:https://ww ...

  2. java 前端 后端 分离_到底什么是前后端分离?

    这里是经常容易被混淆的一些概念. 在说前后端分离之前,要先弄清楚: 1.什么是前端? 2.什么是后端? 3.什么前后端不分离? 4.什么是动态数据? 5.什么是静态文件? 6.什么是动静分离? 然后, ...

  3. Java前后端分离第三方登录_网站前后端分离情况下如何实现QQ微信等第三方登陆-Fun言...

    前言 最近在弄第三方登录,实现起来很简单,就是调几个接口获取个人信息即可,详细了解:maven项目整合QQauth2.0第三方登录详细说明,然后因为本网站是前后端分离的,所以不能再回调接口那里直接跳转 ...

  4. java短视频开发技术_看Java学员如何用前后端分离技术搭建短视频健身APP

    知了堂在教学过程中一直十分注重学员的实践能力,每阶段结束必有项目考核,全面检验分析学员学习效果.为更好的进行下一阶段的课程学习,本周一Java32班学员迎来了第二阶段的项目考核. 让我们来看看此次考核 ...

  5. 使用layuimini模块快速开发java后台系统模板(前后端分离)

    使用layuimini模块快速开发后台系统模板(前后端分离) 下面已仓库管理系统为例(下面源码可自己下载来看) 1.登录界面login.html 下面的验证码使用的是Hutool 来实现的(Hutoo ...

  6. java图书管理系统(前后端分离前)

    项目源码Git地址:https://github.com/liuwen766/MyBookManagement.git 项目源码csdn地址:https://download.csdn.net/dow ...

  7. python flask 分页前后端分离_flask展示pyecharts图表前后端分离的问题

    我按照pyecharts的官网案例学习flask,其中有段flask前后端分离的示例. 官方教程:https://pyecharts.org/#/zh-cn... 我用前后端分离展示柱状图.饼图都没问 ...

  8. cors 前后端分离跨域问题_前后端分离之CORS跨域访问踩坑总结

    前言 前后端分离的开发模式越来越流行,目前绝大多数的公司与项目都采取这种方式来开发,它的好处是前端可以只专注于页面实现,而后端则主要负责接口开发,前后端分工明确,彼此职责分离,不再高度耦合,但是由于这 ...

  9. .net 开发怎么实现前后端分离_ASP.NET Core模块化前后端分离快速开发框架介绍

    源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:http://118.24.75.170:6220/ 账户:admin 密码:ad ...

最新文章

  1. 理解java和python类变量以及类的成员变量
  2. IBM服务器以及本地PC机安装suse linux,oracle测试,遇到的问题有:
  3. C++:运算符重载函数之成员运算符重载函数
  4. Python教程:函数对象与函数嵌套
  5. JUC学习笔记及拓展
  6. [文摘20080919]小软件将网页变为3D世界
  7. 再现神人!仅仅只花4天半就解开了史上最难密码,这下整个圈子都炸开了.........
  8. 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)部分题解
  9. 土城战役_避免使用FOR –反假战役
  10. 软件工程项目经理必备能力
  11. Hadoop FS 常用命令详解
  12. 利用 MATLAB 编程实现 Newton 法与阻尼 Newton 法
  13. Thrift Oneway是什么?
  14. android 工具栏透明,Android 系统状态栏沉浸式/透明化完整解决方案
  15. 除了AI,你不该忽视Python在这4大领域的应用!
  16. 300万数据导入导出优化方案,从80s优化到8s(实测)
  17. 计算机中登录音乐在哪,网易云音乐扫一扫在哪里
  18. java隐藏类_java Class类中隐藏和覆盖的区别
  19. 2015年中国数据库技术大会(DTCC)PPT合集
  20. Python 手把手教你爬取淘宝的笔记本电脑数据

热门文章

  1. 网上看奥运享受PPStream直播功能
  2. 警告:编码 EUC_CN 的不可映射字符
  3. 6-5 链式表操作集 (20分)
  4. Inception结构
  5. 九毛九,患了太二依赖症
  6. linux强制杀死某个端口进程命令
  7. Skype营销大师群控版
  8. access如何保存小数点后_收到大闸蟹后如何检查,保存,以及烹饪大闸蟹
  9. java面向对象程序基础实验_20165115 实验二《Java面向对象程序设计》实验报告
  10. 苹果带计算机记录工作和备忘录一样的软件,苹果有哪些好用的备忘录便签软件?能推荐一款吗...