一波反向操作, 我把几十个生产库给合了

SAP生产订单(创建-下达-发料-报工-入库)全流程及反向流程 SAP创建下达报工入库发料以及取消发料取消入库,批量下达删除关闭,生产订单出入库查询和状态更改查询记录 阅读详情

在这里插入图片描述

前言

近三个月没更新文章, 可不是我偷懒, 而是工作太忙,实在没有时间.

时间回到三个月前, 领导突然找到我, 说要准备搞个“大工程”,一起讨论讨论.

什么大工程呢? 简而言之, 合库!

将几十个数据库合并成一个数据库!

image.png

我想很多技术人和我一样, 第一反应就是: 啥, 合库?

分库分表大多技术人或多或少都知道一些, 但是对于合库可能就没那么熟悉了.

不过, 仔细一想, 这样的需求还是存在的, 比如游戏常见的“合区服”, 其实技术层面可能就是通过合库合表实现的.

合库背景简介

和相关项目组的人员聊了一轮后, 得到了以下信息:

  • 共35个城市库, 表结构一致, 表的主键为Mysql自增ID

  • 共2个公共库,用来存放共有信息以及来自各个城市库产生的业务信息,以city_id区分.

  • 城市库和公共库均有触发器/存储过程

  • 各个城市发展业务进度不同, 所以城市库间的大小有了分化, 小城市的库特别小, 甚至部分表记录为空; 大城市的的库单表可达千万级别.

  • 无论城市库还是公共库中的表, 均存在json或字符串的形式来记录ID的字段: json里面有ID值, 字符串字段有以空格,逗号分隔的ID值.

  • 数据合并后, 应用程序也得调整数据库层面的代码.

看到这里, 你可能也和咸鱼会有一样的困惑:

大城市单表都上千万数据了, 单独一个库不是很正常的设计么?
为啥要冒着风险合并这么多库呢?
而且就算合并成功了, 接踵而至的性能问题等等, 最终不还是得通过分库分表来解决???

关于这些问题, 咸鱼当时也是想到了, 不过和项目人员以及业务人员沟通后, 方知“项目早期被过度设计的痛点”.

飞速发展的业务, 项目迭代速度很快, 而这种多个城市库的设计让迭代跟不上业务发展的脚步;

另外, 这种设计也对业务人员统计全国数据造成了一些困扰……

image.png

总之, 再三沟通确认后, 最终决定对项目城市库进行合并, 让设计回归最原始的样子.

合库方案设计

不难看出, 妨碍数据合并的问题如下:

  • 虽然各个城市库表结构一致, 但是表的主键ID自增, 合并势必冲突
  • 城市库进行分布式唯一改造后, 两个公共库也得对应进行调整
  • 城市库及公共库使用了触发器/存储过程, 需要考虑影响
  • 城市库和公共库中表均存在json和字符串类型的主/外键, 需要解析出来进行全局唯一性处理
  • 35个城市库及2个公共库, 不用想, 一晚上肯定搞不完, 毕竟业务也得继续跑, 为了合并停服几天不现实!
  • 涉及合库项目的所有应用程序也得相应调整数据层面的代码
  • 最重要的一点, 出现问题如何回滚?

经过了几轮讨论, 初步形成了以下实施大纲:

  • ID改造: 进行ID全局唯一性改造, 涉及城市库和公共库的所有主/外键字段(包含json及字符串)

  • 合库: 进行合库操作, 保留原库.

  • 切库: 将涉及到的应用程序调整, 读写新库.

大致方案敲定, 接下来就是进行实施细节的一些商讨, 力求能最大程度的降低风险.
比如:

  • 如何进行ID改造才能在保证全局唯一的基础上,最小的改动?
  • json、字符类型的存储的ID如何处理?
  • 触发器、存储过程如何处理?
  • ID改造期间出现问题如何回滚数据?
  • 合库操作如何进行? 保留原库的前提下, 如何原库的数据变动能持续同步至新库?
  • 这么多城市, 需要分批进行么?
  • 停服更新还是热更新?
  • …………

经历了将近半个月的脑暴, 最终在以上大纲的基础上完善了细节规则的制定:

考虑到城市较多,数据量大, 为了减少风险, 对35个城市按业务发展进行了批次划分, 大致如下:

试点城市(选中了两个数据小的城市): A、B
第一批次: 华东区域城市
第二批次: 华北区域城市
第三批次: 中西区域城市
第四批次: 华南区域城市

PS: 分批的精髓就在于, 让一部分小城市试水, 发现问题可以及时“止损”.

合库方案实施步骤

几轮探讨下来, 要完成最终的合库, 大致有以下几个步骤, 每个步骤均按照以上的城市规划, 分批进行, 尤其是试点的两个城市, 需要尽可能的保证试点时间, 排查各种错误,方便后续几批城市的复制.

分批停服更新

避开业务使用时间, 屏蔽当次试点城市的所有应用服务的访问.

PS: 只屏蔽当次试点城市的流量进入, 不影响其他城市的访问!

实施步骤:

  • 提前部署可以屏蔽相关城市访问的代码逻辑
  • 提前给受影响城市的一线发停服通知
  • 屏蔽相关应用服务 (防止ID改造时, 导致有流量进来)
  • 关闭相关定时任务 (防止ID改造时, 定时任务导致的数据变动)
分批数据备份

每批次城市处理时, 均需要备份数据, 用于紧急回退.

实施步骤:

  • 备份城市库: 全库备份本次受影响的城市库
  • 备份公共库: 备份公共库中本次城市的所有记录

这里采用的是备份城市记录的方式, 通过新建一张表, 然后复制相应的记录进新表即可.
意外恢复时, 只需根据ID更新恢复即可.

分批ID改造:

ID改造, 最重要的就是新ID的规则, 既要保证全局唯一, 又要保证最小影响.
最终我们商讨后采用了以下方式生成

image.png

新ID = 城市库独立基数 + 原ID

新ID生成的规则说明

其实, 就ID的生成规则采用哪种形式, 我们内部也讨论了一波.
最后基于“对当前应用影响最小”的思想下, 团队摒弃了类似雪花算法这类的规则.
而最终采用了新ID = 城市库独立基数 + 原ID这种规则

PS: 要是采用雪花算法规则生成新ID, 那么应用代码上就得调整有关新增的逻辑,同时还得修数据.

城市库独立基数的生成规则

基数的规则需要基于生产数据的分析, 比如35个城市库中最大的库是A, 最小的是B库:

A中最大的表数据已达100 00000
B中最大表数据只有10 0000

此时, 基数应该在100 0000之上考虑, 考虑到我们分批进行ID改造工作, 还得考虑城市的增量以及分批合库、切库的影响, 所以在此基础上预留足够大的增量空间.

为什么要考虑城市的增量?

若如下设计:
A库ID规则 = 1000 0000 + 原ID
B库新ID = 101 0000 + 原ID

因为我们是分批合库的, 是有时差的, 那么按照A库的增长速度, 很快就会出现101 0000以后的ID, 这必将导致合库时数据冲突.

为什么要考虑切库的增量?

若我们为每个城市预留100w的城市数据增量, 那么基数设置如下:
A库新ID = 1000 0000 + 原ID
B库新ID = 1100 0000 + 原ID
C库新ID = 1200 0000 + 原ID
K库为新库,用来合并所有城市库的数据.

如果仅仅是ID的处理, 显然什么问题, 毕竟最大的A库最多的数据也才100W, 业务再这么发展, 也无法短时间内翻倍.

可一旦考虑到合库和切库, 那么预留的100W数据增量可能就不够用了.
A,B库分批先合进K,然后应用程序把来自A、B城市的数据切到K库, 那么来自A、B城市的数据都将再B的基数上继续增加.

举例:
A: 1000 0010
B: 1100 0010
合进K库的某表后,对应表记录为
1000 0010
1100 0010
再进行切库, 把A,B城市的数据接入K库,若此时A有新数据进来,那么数据为1100 0011, 而不是1000 0011;

这就表示, A、B城市共享了100W的数据增量, 那么就有可能数据迅速增加至1200 0000 , 那么就与C库冲突.

所以, 我们必须考虑切库的时间影响, 设计好数据增量来防止这种情况.

新ID的生成规则制定完后,下一步就是具体的实施了.
通过对生成库数据的排查, 我们大致对需要改造的ID字段做了如下区分:

普通数值ID字段: int型字段, 存储单个ID

特殊型ID字段: varchar或text类型字段, 存储多个以符号分隔的ID或直接存储json字符串

不难看出,普通数值ID字段最好处理, 可能一个update语句即可
update table set uid = uid + 基数

特殊型ID字段就不行了, 必须要程序去解析然后处理.

最后我们决定针对ID改造这件事专门写个服务来进行处理.

那么, 首先需要做的事就是必须要有一个明确的处理规则.

我们细致的排查城市库和公共库的表结构, 列出每张表包含主外键的字段, 区分数字类型 和 特殊类型(字符串和json), 同时特殊类型需要注明解析规则.

数字类型: 某个字段就用来存放某个主外键ID
特殊类型: 某个字段存放的是逗号分隔的ID串, 或包含一堆ID的JSON串

表格大致如下:

表名字段名字段类型(1主键/2外键/3/json对象/4json数组/5字符串)字段包含的外键特殊类型解析说明库类型(1城市库/2公库一/3公库二)
studentid11
studentclass_id21
studentschoolObject3school_idschoolObject.school_id需要改造1
studentschoolObject3city_idschoolObject.city_id需要改造1
studentteacherIds5逗号分隔的id外键1

有了规则, 接下来无非是按部就班的coding工作.

image.png

实施步骤:

  • 对城市库所有表加上city_id字段并赋值, 后续合库用来数据隔离
  • 修改原表中存放ID的类型

确认原表的ID字段类型足够放下新ID! (重要)

关于这点, 我们就踩了坑, 因为前期忽略了这个事.

原ID字段为数字型(int)
原库的表所有存放ID主外键的字段均采用了“int”型, 而我们生成的新ID是放不下的, 所以, 得先将表的字段类型调整置“bigint”.

原ID字段为特殊型(varchar、text)
text可能无需处理, 不过varchar这类的字段就需要加长了! 在我们处理的表中有varchar(500)的字段存放逗号分隔的ID串, ID改造后, 直接放不下了.

  • 屏蔽受影响的触发器

排查生产库时发现了城市库和公共库均有insert和update触发器, 会影响我们的ID改造工作.
针对城市库和公共库的触发器,我们必须要分开处理,要是一刀切的全部删除, 那么就会对非试点城市造成影响.

ID改造前删除城市库触发器, 改造完成后恢复.
ID改造前修改公共库的触发器(增加除法条件,屏蔽当次试点城市), 改造完成后恢复.

  • 城市库ID改造
  • 公共库ID改造
  • 恢复受影响的触发器
踩过的一些坑
  • 所有表存放ID的字段是int型, 放不下新ID,需改为bigint
  • 部分表存放ID的字段是varchar类型, ID修改后, 因长度不够放不下, 需要进行加长
  • 部分表编码类型为utf8, 但是json串数据中居然有emoj表情包数据,
    导致解析出来后无法更新回去, 需要修改表的编码模式为utf8mb4
  • 当对表的主键ID进行ID改造时, AUTO_INCREMENT值居然失效了.

举例:
test表, 主键为id, int型, 自增值已经到10了.
首先修改类型:
alter table test CHANGE id id BIGINT (20) auto_increment;
然后修改ID
update test set id = id+1000
如果此时你新增记录, 你会发现, auto_increment并没有在1010后继续新增, 而是在10的基础上新增, 也就是新纪录的id为11;

所以我们对auto_increment需要特殊处理下:
首先修改类型:
alter table test CHANGE id id BIGINT (20);
然后修改ID
update test set id = id+1000
组后加上auto_increment
alter table test CHANGE id id BIGINT (20) auto_increment;

  • 空表的处理

虽说所有城市库的表结构都一致, 不过每个城市因业务发展程度不一样, 导致部分城市库的部分表记录为空. 这种空表如果不处理也将对后续的合库造成影响,所以必须将这些空表的AUTO_INCREMENT改造为城市基数.

步骤3. 合库: 进行合库操作, 保留原库

关于合库, 同样也是基于我们的大前提: 分批进行.

这里我们使用了阿里的DTS同步工具,关于这个工具简单说明下它的作用

  1. 将多个库实时同步到一个库, 前提是库中的表结构必须完全一样,且ID不能冲突

所以合库的前提便是城市库表结构一致,且ID全局唯一

  1. 多对一实时同步时, 只能单向同步,不能反向

DTS多对一同步时, 只支持单向的同步, 也就是只能是A、B、C的数据同步到SUM, 而不能反向.
这一点比较重要.
当你对几个试点城市切库时, 数据读写全在新库中, 这些数据不支持反向同步到老的城市库中的, 万一发现重大问题需要回滚时, 则需单独制定一个靠谱的数据回退方案.

  1. 多对一实时同步时, 新库中AUTO_INCREMENT最终以最大的自动设置

起初我们调研时对此有疑惑:
A的AUTO_INCREMENT = 1000;
B的AUTO_INCREMENT = 2000;
C的AUTO_INCREMENT = 3000;
那么, DTS同步A、B、C到SUM时, 最终SUM的AUTO_INCREMENT和同步顺序是否有关系???

通过询问以及实验, 最终发现, 并无关系,
通过DTS多对一同步, SUM库总是以AUTO_INCREMENT最大的C为准.

  1. 同步是一种关联关系, 可以手动断开

使用DTS进行同步时, 建立这种同步关系也就是点个按钮的事.
在我们合库时, 期间经历了好几次业务迭代, 其中有涉及到表的修改变动,起先我们以为涉及表结构的调整需要停止DTS, 之后发现, DTS同步只受新库表结构的影响.
也就是A、B、C的表结构变动可以同步到SUM, 无需停止DTS; 若直接对SUM调整表结构, 那么DTS会报错.

注意点:
这里注意, 虽然城市库业务表结构是一致的, 不过因为一些原因, 各个城市库中均有一些备份表存在, 这导致了数量上差异, 我们在处理时, 评估了这批差异表, 发现没什么用后直接删除来保证城市库间的一致性.

步骤4. 切库: 将涉及到的应用程序调整, 读写新库.

关于切库, 这块, 一样是按批次试点切, 到一步时其实没什么大的风险了,无非是代码上的调整, 读写全在新库中.

唯一的风险点也就是前面提过的发现了重大问题, 需要回退增量数据到城市库.

小结

从合库计划的讨论,到实施, 再到完成, 经历了三个多月忙碌的时光, 不过直到最后, 还是感觉挺充实的, 毕竟, 这算一份难得的经历.

回顾下整个合库的经历, 其实最刺激的点还是在ID改造那一块, 熬个夜, 脚本一点, 然后就是紧张的等待上几个小时…

关于ID改造的脚本, 后续有时间再整理分享.

Nginx正向代理在开发环境中的应用及反向代理在生产环境中的使用 阅读详情

相关推荐

Vue项目proxyTable反向代理,开发环境与生产环境下服务接口地址的自动匹配(1)

小编的一位同事在校期间连续三年参加ACM-ICPC竞赛。从参赛开始,原计划每天刷一道算法题,实际上每天有时候不止一题,一年最终完成了 600+:凭借三年刷题经验,他在校招中很快拿到了各大公司的offer。入职前,他把他的刷题经验总结成1121页PDF书籍,作为礼物赠送给他的学弟学妹,希望同学们都能在最短时间内掌握校招常见的算法及解题思路。整本书,我仔细看了一遍,作者非常细心地将常见核心算法题和汇总题拆分为4个章节。

2401_84003839的博客 1237

Vue3 本地环境 Vite 与生产环境 Nginx 反向代理配置方法汇总【反向代理篇】

本文详细介绍了在前后端分离架构中,如何配置开发环境和生产环境下的反向代理,以解决前端访问后端静态资源(如图片、文件)时可能遇到的问题。开发环境下使用 Vite 的代理配置,生产环境下则通过 Nginx 实现。文章重点分析了 Nginx 配置中的常见错误,并提供了正确的配置方案,包括路径匹配、请求头传递、路径重写、负载均衡和静态资源缓存等高级功能。此外,文章还总结了开发环境与生产环境的配置对比,并提供了常见问题的排查方法。通过本文的指导,开发者可以确保前后端分离项目在不同环境下都能正常访问静态资源。

李赛赛的专栏 6102

Node.js生产部署必须用Nginx反向代理的底层原因

反向代理是现代Web架构中连接客户端与后端服务的关键中间层,其核心原理在于协议终止、请求重写与流量分发。通过在边缘节点卸载SSL/TLS、压缩、缓存和安全过滤等高开销任务,反向代理显著提升系统性能与安全性。技术价值体现在降低后端负载、统一入口管控、支持HTTP/2与WebSocket等高级协议,并为灰度发布、熔断限流提供基础设施支撑。典型应用场景包括Node.js、Python Flask/Django、Java Spring Boot等轻量级应用的生产化封装。本文聚焦Nginx作为反向代理如何解决Node

weixin_34221654的博客 280

Vue 生产的反向代理

关于反向代理(跨域请求),简单说,访问一个地址 http://www.a.com 传送至 http://www.b.com。常见的就是nigix去做了。但今天我想说说VUE的反向代理的玩法。 重点:只有在开发VUE项目时,你才可以用到反向代理(跨域请求)。什么意思? 在 config/index.js中,找到dev中的proxyTable,此项就是设置你的跨域的设置,也就是你要代理的设置...

tdjqqq的博客 836

反向传播详解

这是一场以误差(Error)为主导的反向传播(Back Propagation)运动,旨在得到最优的全局参数矩阵,进而将多层神经网络应用到分类或者回归任务中去 文章目录一、为什么引入反向传播二、反向传播的重要性三、反向传播的推导过程四、反向传播与梯度下降的关系 一、为什么引入反向传播 神经网络的过程就是正向传播得到Loss值,再把Loss值反向传播,并对神经网络的参数进行更新,其中反向传播正是神经...

南淮北安的博客 1718

STK与Matlab连接报错?手把手教你解决mexConnect函数执行问题(附完整避坑指南)

本文针对STK与Matlab连接时常见的“mexConnect函数执行”报错,提供了完整的诊断与解决方案。文章深入剖析了错误根源在于路径冲突或文件损坏,并手把手指导用户通过定位STK连接器文件、正确配置Matlab路径(包括使用addpath命令)以及执行初始化测试三步走策略,彻底解决问题。同时附上版本兼容性检查、安装避坑指南及构建稳健工作流的建议,帮助用户建立可靠的STK-Matlab联合仿真环境。

yolo5detector的博客 472

iis反向代理(生产环境)

本文记录iis生产环境下实际操作和注意事项 在IIS反向代理的生产实践中,若IIS管理器中的ARR代理模块未提供“preserveHostHeader”配置选项,将导致反向代理无法正确传递请求中的原始域名(Host)。此时,所有请求的Host信息会丢失,进而被路由至IIS中主机名为空的默认站点,无法按预期指向基于域名的相应站点,从而影响多站点代理配置的正常运作。

weixin_38808271的博客 1379

手把手教你用TJA1145A实现CAN节点智能唤醒(含数据帧过滤技巧)

本文详细介绍了如何使用TJA1145A收发器实现CAN节点的智能唤醒功能,包括数据帧过滤技巧和超低功耗设计。通过硬件级帧过滤和双条件唤醒机制,TJA1145A在保持微安级休眠电流的同时,能对特定报文做出毫秒级响应,显著提升电池供电设备的续航能力。

weixin_28721917的博客 249

InterpolatedParser:字符串插值的反向操作

InterpolatedParser:字符串插值的反向操作 项目介绍 InterpolatedParser 是一个开源的 .NET 库,它允许开发者在字符串插值中实现反向操作。通常,字符串插值是用于将变量值嵌入到字符串中,而 InterpolatedParser 则可以解析包含数字或其他类型数据的字符串,将其转换为实际的变量值。这种独特的功能使得 InterpolatedParser 在某些特定场...

gitblog_00822的博客 1237

(ZOS-API)Matlab控制ZEMAX软件调整光学系统某镜面位姿

所用软件的版本:MatlabR2022a, Zemax OpticStudio2024R1交互扩展功能,Zemax和可以同时打开,操作会比较方便在ZEMAX软件中,调整次镜位置通常有两种方法:1.在次镜前后各添加一个坐标间断面,并修改其“偏心X”“偏心Y”等参数来调整次镜的位姿;2.或者直接在次镜属性选项中设置相关数值。这两种方法对Zernike系数的采集结果无显著影响。

ecilifurt的博客 911

激光光束质量评估与光斑尺寸计算:从理论到MATLAB实践

本文详细解析激光光束质量评估与光斑尺寸计算的理论基础及MATLAB实践方法,重点介绍M²因子的测量与应用。通过高斯光束模型、CCD成像法和MATLAB算法实现,帮助读者掌握从理论到实践的完整流程,提升激光系统调试与评估能力。

weixin_29083373的博客 444

Vue项目proxyTable反向代理,开发环境与生产环境下服务接口地址的自动匹配

Vue项目proxyTable反向代理,开发环境与生产环境下服务接口地址的自动匹配 应用场景: vue项目中,如果采用了proxyTable反向代理,解决开发环境下的后台服务跨页问题的话,在生产环境下时候服务的URL地址就会报错。 原因解析: 1、配置了反向代理 2、使用时候路径自带了apis,但是这只看开发环境下的,生产环境下识别不了这个apis 解决办法 (一)简单但每个使用...

happy81997的博客 2404

从零到一:Silvaco中跨导曲线的自动化脚本实现

本文详细介绍了如何使用Python脚本在Silvaco中实现跨导曲线(gm曲线)的自动化分析,包括数据加载、跨导计算和结果可视化。通过自动化处理Id-Vg曲线,显著提升半导体器件工程师的工作效率,特别适用于工艺优化和DOE分析。文章还提供了批量处理和关键参数提取的高级技巧,帮助工程师快速掌握Silvaco脚本开发。

nn3456的博客 565

[译] 为何要对生产环境的 Node.js 使用反向代理?

原文:https://medium.com/intrinsic/why-should-i-use-a-reverse-proxy-if-node-js-is-production-rea...

tonylua的博客 401

由JavaScript版迷宫游戏引出Java版迷宫地图生成器

Java案例:迷宫地图生成器 一、引入问题 本期18软件1班网页脚本实训项目是完成一个JavaScript版迷宫游戏。 迷宫地图是如何生成的呢?很简单,将一个正方形区域等分为若干行与若干列,比如25行25列,这样就有625个单元格,用一个二维数组map[25][25]就可以保存625个单元格信息,map[i][j] = 1表示该单元格要绘制砖,而map[i][j] = 0表示该单元格不绘制砖。 ...

howard2005的专栏 1472

【UML】第12篇 序列图(1/2)——基本概念和构成

序列图(Sequence Diagram)是一种用于显示对象之间交互的图形化表示。它描述了在特定场景下,对象之间按照时间顺序进行的消息传递和协作过程。在序列图中,对象被表示为带有垂直虚线的矩形,虚线表示对象的生命周期。对象之间的交互通过箭头表示的消息来表示,箭头从一个对象的生命线指向另一个对象的生命线,表示消息的发送和接收。

AI人人懂 3044

如何使用Nginx反向代理部署WebSSH:生产环境完整配置指南

WebSSH是一款功能强大的基于Web的SSH客户端,它允许用户通过浏览器安全地访问远程服务器。本文将详细介绍如何使用Nginx反向代理配置WebSSH,实现生产环境的安全部署与高效访问。 ## WebSSH简介:浏览器中的SSH终端解决方案 WebSSH通过浏览器提供SSH终端功能,无需安装额外客户端,极大简化了远程服务器管理流程。其核心优势包括: - 跨平台访问:任何设备只要有浏览器就能

gitblog_01183的博客 1031

SAP物料主数据归档详解(物理删除)

顾问们的回答肯定的统一的不能,只能打上删除标记。物料设置好需要删除的物料号这里我们需要删除的物料是AG88,其中,若不选“考虑无删除标记的物料”,需要将需要归档的物料MM06打删除标记。平时在操作系统过程中经常会不小心创建出很多无用的物料主数据,但是系统只能通过MM06打上删除标记,但是物料最终在系统中还是可以查询到的。6、执行已设置变式的归档程序,执行完毕,点下图中的“Job”,每次执行完归档程序会产生两条作业。然后设置好开始的参数和假脱机的参数,三个都是绿灯就可以执行归档的操作,物理上删除物料主数据。

我小时候很黑的博客 5523

Vue 3中的反向代理 和如何在服务器配置反向代理

简单来说,反向代理就像是前端和后端之间的婚姻介绍所。这时候,反向代理就站出来,帮助前端与后端建立联系,让请求顺利进行。当您准备将项目部署到生产环境时,您需要在服务器上进行一些额外的配置。还有个小插曲,Vite为我们提供了更简单的方式,就像找对象一样直接。现在,您可以通过在服务器上配置Nginx来将前端和后端相结合,让您的应用在生产环境中顺利运行。现在,让我们看看如何在Vue 3中配置反向代理,为前端和后端之间的关系添砖加瓦吧!我们已经成功配置了反向代理,现在您可以放心地与后端进行通信,享受顺畅的开发体验。

(ง •̀_•́)ง 2283

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Vue Nginx反向代理配置 解决生产环境跨域

Vue本地代理编辑好后,能实现跨域获取接口数据,但是打包后在生产环境接口报错404,要怎样才能解决生产环境跨域问题呢? 在开发环境配置好本地代理后,使用Nginx反向代理解决生产环境跨域问题,Nginx反向代理配置非常简单,大概三步就能实现; 一、下载 Nginx   下载地址:http://nginx.org/en/download.html   打开如图所示:      一般第一个是最新版,第二个是稳定版,点击最新版或者稳定版下载都可以; 二、修改配置文件   下载好nginx后就可以.

Mark Sheng的博客 627

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ubuntu编译安装nginx反向代理-负载均衡(建议收藏)

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

duoba_an的博客 1475

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Nginx 反向代理解析:从原理到生产级配置实战

反向代理(Reverse Proxy)是位于客户端与后端服务器之间的中间层,代表后端服务器接收客户端请求,并将响应返回给客户端。与正向代理(如 VPN)不同,反向代理对客户端透明,客户端并不知道自己访问的是代理。Nginx 的反向代理功能,是现代 Web 架构的基石能力。无论是简单的本地开发代理,还是高并发的生产网关,它都能以极低的资源开销提供稳定、安全、高性能的服务。掌握 proxy_pass及其配套指令,就掌握了构建弹性系统的第一把钥匙。📌最佳实践口诀。

软件行业技术文化交流。 1247

ngnix 反向代理 实现生产环境跨域

ngnix 反向代理 实现生产环境跨域 1.下载 nginx 网址 nginx.org/ 2.zip 文件解压 配置 conf/nginx.conf location /apis { rewrite ^.+apis/?(.*)$ /$1 break; include uwsgi_params; proxy_pass https://XXX; } 4.运行 star...

weixin_34341229的博客 150

生产级部署Yacy:Docker与反向代理分步实操教程

Yacy 是一款开源、自托管的 **P2P 分布式搜索引擎**,可以部署在自己的服务器上构建全网索引。本教程带你用 **Docker** 容器化实现 Yacy 生产级部署,再配合 **Nginx 反向代理** 完成域名接入、HTTPS 与生产加固,全程分步实操,新手也能一次跑通 🚀 ## 一、为什么用 Docker 部署 Yacy | 对比项 | 直接装 JDK 运行 | Docker 容器

gitblog_01009的博客 955

FreeGPT WebUI生产环境部署:Nginx反向代理与SSL配置终极指南

FreeGPT WebUI是一个完全免费的AI对话 Web界面,支持多种大语言模型,无需API密钥即可使用。本文将详细介绍如何在生产环境中部署FreeGPT WebUI,包括使用Nginx反向代理和配置SSL证书,确保您的AI聊天应用安全可靠地运行。 ## 🚀 为什么要进行生产环境部署? 在开发环境中,我们通常直接运行`python run.py`来启动应用,但这并不适合生产环境。生产环境部

gitblog_00950的博客 764
上一篇: 43. 从零开始学springboot整合feign跨服务调用
下一篇: 44. 从零开始学springboot撸一个Xss过滤器-Filter实现
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值