前端 + Nginx + 后端架构的无感升级方案

news2024/10/9 13:20:59
一、前端无感升级
  1. 构建新的前端包

    • 使用 Webpack、Vite 等工具进行打包,生成带有版本号或哈希值的静态文件名。
    • 确保 index.html 引用最新的静态资源文件(例如 app.js?version=abc123)。
  2. 上传静态资源到服务器

    • 将打包后的前端静态资源上传到 Nginx 的指定目录,可以采用        覆盖      或新建版本目录方式。建议每次更新在 Nginx 的静态资源目录中创建一个新的文件夹,如 /static/v1.0//static/v2.0/
  3. Nginx 配置前端静态资源的缓存策略

    • 在 Nginx 中启用长时间缓存,同时依赖文件名的变化来避免缓存旧文件。
    • 配置示例:
      location /static/ {
          root /path/to/static/files;
          expires 1y;
          add_header Cache-Control "public, must-revalidate";
      }
      
  4. 灰度发布

    • 如果有灰度发布需求,可以通过 Nginx 设置流量分配给部分用户访问新版本,剩余用户继续使用旧版本。
      map $cookie_version $static_version {
          default v1.0;
          ~v2.0 v2.0;
      }
      
      location /static/ {
          alias /path/to/static/$static_version/;
      }
      

二、后端无感升级
  1. 准备新版本的后端包

    • 新的 libmain.jarconfig 准备完毕后,放置在临时目录,等待上线。
  2. 部署方式

    • 使用蓝绿部署滚动发布来进行后端升级。
    • 蓝绿部署:准备一套完全独立的环境(如 Green 环境),部署新版本的后端服务。切换 Nginx 的代理指向新的 Green 环境,用户可以无感知地切换到新版本。
    • 滚动发布:如果使用集群或多实例服务,逐个更新节点的后端服务,同时保持部分节点对外提供服务,避免整体停机。
  3. 后端的 Nginx 代理配置

    • 配置 Nginx 为后端服务做负载均衡,并支持多个版本的服务实例。
    • 配置示例:
      upstream backend {
          server backend_v1:8080;
          server backend_v2:8080;
      }
      
      location /api/ {
          proxy_pass http://backend;
      }
      
  4. 数据库迁移策略

    • 后端升级时,如果涉及数据库变更,应该先进行向下兼容的数据库迁移(即保留旧数据结构),确保新旧版本的后端都能兼容数据库操作。
    • 待新版本稳定后,清理旧的数据库结构。
三、Nginx 配置调整
  1. 前端与后端路径管理

    • 确保 Nginx 的配置文件能够正确代理前端和后端请求。例如:
      # 前端静态资源
      location / {
          root /path/to/frontend;
          try_files $uri $uri/ /index.html;
      }
      
      # 后端 API 请求
      location /api/ {
          proxy_pass http://backend_server;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
      
  2. 热加载 Nginx 配置

    • 更新 Nginx 配置后,不需要重启服务,直接使用 nginx -s reload 进行热加载,以避免服务中断。
  3. 负载均衡与健康检查

    • 配置 Nginx 的健康检查机制,确保在后端节点不可用时自动切换流量到健康的服务。
    • Nginx 配置示例:
      upstream backend {
          server backend_v1:8080 max_fails=3 fail_timeout=30s;
          server backend_v2:8080 max_fails=3 fail_timeout=30s;
      }
      
      location /api/ {
          proxy_pass http://backend;
          proxy_next_upstream error timeout invalid_header http_500 http_502;
      }
      
四、升级流程总结
  1. 前端升级:确保前端静态文件版本控制、缓存策略合理,避免用户加载旧资源。
  2. 后端升级:采用蓝绿部署或滚动发布方式,结合 Nginx 负载均衡,避免后端更新时影响整体服务。
  3. Nginx 热加载:在更新前端包或后端服务时,Nginx 只需热加载配置,不需要重启,避免中断现有请求。
  4. 数据库迁移:确保数据库变更具备向下兼容性,避免在升级过程中导致数据库异常。

通过这种升级方案,可以确保无感知地更新前端、Nginx 和后端架构,让用户的使用体验不受到影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2199112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

迪士尼数据泄露事件:全面审视数据安全策略与未来防护方向

迪士尼数据泄露事件概述 一、 事件背景以及影响 在全球数字化转型加速的浪潮中,数据安全已成为企业运营不可忽视的基石。 华特迪士尼公司,作为全球知名的娱乐传媒巨头,其数据泄露事件无疑为业界敲响了警钟。此次事件不仅揭示了数据保护的严…

从0开始下载安装并使用unity

首先我们要在浏览器上找到unity的官网 这一个就是了,我们点进去后是这个界面: 然后我们点击上面这张图的左下角的“下载Unity Hub”,推荐后续安装都装在D盘: 这里他会让我们注册一个账号,如果之前有的话登录就行了&am…

2024年第二届龙信杯 WP

2024年龙信杯 author:mumuzi date:2024/9/30 取证的一手更新都在自己的博客上,分区为Forensic,https://mumuzi7179.github.io/或https://mumuzi.blog/ DK盾云服务器:DK盾 镜像下载地址: https://pan.ba…

i18n多语言项目批量翻译工具(支持84种语言)

这里写自定义目录标题 打开‘i18n翻译助手’小程序快捷访问 打开‘i18n翻译助手’小程序 1.将需要翻译的json文件复制到输入框(建议一次不要翻译过多,测试1000条以内没什么问题) 2.等待翻译 3.翻译完成,复制结果 快捷访问

极狐GitLab 发布安全补丁版本 17.4.1、17.3.4、17.2.8

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…

SpringBoot框架:服装生产管理的智能助手

4 系统设计 4.1 系统结构设计 在结构设计过程中,首先对系统进行需求分析,然后进行系统初步设计,将系统功能模块细化,具体分析每一个功能模块具体应该首先哪些功能,最后将各个模块进行整合,实现系统结构的…

室内人行与导航系统有哪些多样化的功能?

在现代化建筑的迷宫中,室内人行与导航系统如同一位无形的向导,引领我们穿梭于复杂的空间之中,极大地提升了人们在室内环境中的便捷性和安全性。这一技术领域的飞速发展,不仅体现在定位精度的提升上,更在于其多样化的功…

如何自己动手实现一个图片解答小助手

有一张图片如下所示: Kimi上有一个功能,就是解析图片内容,给出回答: 这样可以用于拍照向AI提问的场景,我自己也有这方面的需求,因此动手实践了一下。 自己动手实现的效果如下所示: 那么自己如何…

websocket连接异常报错1006

目录: 1、问题现象2、问题原因3、解决方案 1、问题现象 WebSocket状态码的作用: 在WebSocket协议中,状态码用于表示连接状态和错误信息。通过状态码,我们可以快速判断连接是否成功,以及出现错误时的原因。常见的WebSo…

makefile常见问题记录

1 Makefile:8 *** missing separator. Stop. 可能原因1:makefile的命令行开头必须使用Tab键 如图1所示,红框内为一个命令行,图2的缩进由敲空格实现,会标红,报错,图3的缩进为按Tab键,语法正确&…

golang接口详解

interface(接口) 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节 在Go语言中接口(interface)是一种类型,一种抽象的类型。相较于之前章节中讲到的那…

揭秘破解密码的常见方法和手段

前言 今天小编就帮粉丝朋友科普一下,破解密码的常见方法和手段,希望看到本文的粉丝朋友,给小编点赞支持支持一波 键盘监听木马 键盘监听病毒在网吧中非常流行,它在启动后会监听用户的键盘输入事件,如果有人使用账号密…

AD画完原理图,进行编译可就是不弹出错误窗口,明明原理图有错误(AD中Error Reporting设置)

AD“工程选项”对话框用于设置大量绘图和组件配置检查,共有12个选项卡,“Error Reporting(错误报告)”是第一个选项卡。 “Error Reporting(错误报告)”选项卡包含8页错误,“Violations Associ…

千寻位置大气增强服务为高效农耕作业保驾护航

2024年9月14日广东湛江,千耘QYX农机导航用户为了抢农时,夜晚使用导航作业,但导航界面一直显示浮点解,无法进行作业,非常着急,联系当地经销商寻求解决办法,经过查看,是因为当时电离层…

AI改革的双刃剑:从生成式AI到推理式AI的未来之路

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

一文彻底搞懂大模型 - Dify(Agent + RAG)

**Dify 是一个用于构建 AI 应用程序的开源平台。****Dify融合了后端即服务(Backend as Service)和LLMOps理念。它支持多种大型语言模型,如Claude3、OpenAI等,并与多个模型供应商合作,确保开发者能根据需求选择最适合的…

python中计算分布的分位数及累积概率

本文讨论python中怎样计算分布的分位数及累积概率 ⭐️ 根据累计概率获取分位数 在 Python 中,你可以使用 scipy.stats 中的 ppf(percent point function)来根据累积概率获取分位数。ppf 是逆累积分布函数,也就是根据给定的累积…

【前端安全】逆向webpack加密算法

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 0x01 webpack 简介 webpack一个静态模块打包器,有入口、出口、loader和插件,通过…

LLM RAG面试问题大全!

01 引言 RAG在通用人工智能、数据科学和人工智能的发展领域中起到了变革性的作用。RAG模型让机器能够基于事实产生更准确、连贯和一致的语言,它改变了人类与技术的互动方式。RAG让能够撰写独特内容、引人入胜的产品描述和新闻文章的机器人概念成为现实。尽管RAG的重…

c++primer第十四章代码重用

包含对象成员的类 包含&#xff1a;私有部分有一个类。 使用模板类&#xff0c;声明对象时必须指定具体的数据类型。 范例&#xff1a; #ifndef STUDENTC_H_ #define STUDENTC_H_ #include <iostream> #include <string> #include <valarray> class Stude…