服务平滑发布与线上验证

发布策略可分为:

  • 蓝绿发布:将新版本服务器全部发好后,将旧版本服务器的流量统一切换到新版本上
  • 灰度发布(金丝雀发布):是一种滚动发布方式,首先部署部分新版本服务器,将部分流量切到新版本上进行灰度验证,后逐步增大灰度范围至全量

在业务服务的部署过程中,通常通过预发机器来验证新版本代码,验证完成后滚动发布线上机器。

但是发布过程中通常涉及多方服务的依赖,包括前后端、后端服务间、服务与数据库间。

前后端平滑发布

常见的场景是后端接口返回新增字段,此时需要后端先发布,前端再发布。

但若后端接口做了非前向兼容的变更呢?此时在原有接口基础上在进行改动线上不能达到平滑切换的目的,
因此需要新增“v2”接口,前端新版本均替换为调用后端的“v2”接口,因此再后端发布过程中,“v1”接口仍然能正常提供服务,
当前端发布完新版本后,流量会全走到“v2”接口,示意图如下:

请添加图片描述

二方包打包策略

二方包即公司内部服务之间RPC调用所需的依赖,通常为接口定义,具体实现包括Open Feign、Dubbo等。

在上线前需要将测试环境的SNAPSHOT版本的包替换为正式版本,需要注意的是SNAPSHOT版本通常是可覆盖的,
而正式版本只能追加不能变更包中代码的,所以SNAPSHOT版本应严禁上线。

当两个服务之间是单向依赖时,如A服务依赖B服务的二方包,只需B服务先上线并提供正式版本,A服务修改依赖B的二方包为
正式版本后上线。

而B的正式包什么时候打呢?以哪个分支打呢?有两种

  1. B服务上线后并合到master后,以master分支打包
  2. B服务预发验证完,上线前打包,以特征分支打包

使用方式1的弊端是当存在二方包循环依赖时,需要一方以SNAPSHOT上线
使用方式2的弊端是在多人开发时,B服务的二方包并不是最新的master代码,如果直接打包上线可能把已经上线的代码冲掉。

方式2的弊端可以在CD流程中增加校验来避免:当前上线分支是否包含master的最新commit。

所以推荐方式2+CD校验master最新commit方式。

Git项目多服务发布

通常一个Git项目会有多个服务,当项目代码改动时,改动涉及的服务都应发布,否则会出现线上不同服务之间的代码来自不同版本,
如果只发布当前改动服务,其他服务在改动服务上线后可能会由于不兼容的变更而运行报错。

线上验证

在预发和上线后需要对代码进行验证,尽量在不影响线上用户的情况下完成。

在开发时就需要为后续的验证“开后门”,常用的方式有黑名单,白名单,特性开关,灰度,指定参数运行任务等。

黑名单,白名单,特性开关,灰度方式均通过配置中心来控制,能够做到实时变更;
而一些定时任务的验证需要添加参数,如果参数不为空则按参数运行任务,以此来指定对象进行验证,避免影响线上用户。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据安全】如何保证其安全

数据安全风险 数字经济时代,数据已成为重要的生产要素。智慧城市、智慧政务的建设,正以数据为核心,推动城市管理的智能化和公共服务的优化。然而,公共数据开放共享与隐私保护之间的矛盾日益凸显,如何在确保数据安全的…

ai论文生成器:分享8款AI一键生成论文的写作软件

在撰写毕业论文的过程中,高效利用各类软件工具可以极大地提升写作效率与质量。以下是八个免费的神器软件工具,它们各自在论文撰写、文献管理、语法校对、数据可视化等方面发挥着重要作用。希望这些推荐能帮助你顺利完成毕业论文的写作。 千笔AI论文&…

白话AI大模型(LLM)原理

大模型(例如 GPT-4或类似的深度学习模型)是基于神经网络的系统,用于理解、生成文本、图像或其他数据类型。其工作原理可以分为以下几个核心步骤,我将通过易于理解的例子逐一解释。 1. 神经网络的基本概念 大模型背后有一个非常庞…

数据压缩比 38.65%,TDengine 重塑 3H1 的存储与性能

小T导读:这篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一。作者通过自身实践,详细分享了 TDengine 在高端装备运维服务平台中的应用,涵盖架构改造、性能测试、功能实现等多个方面。从压缩效率到查询性能&#x…

【Prometheus 】【实战篇(四)】Node Exporter安装方式(含一键安装脚本)及重要监控指标一览

目录 一、Node Exporter 1.8.2安装步骤详解1、下载 Node Exporter 安装包2、解压下载的文件3、将 Node Exporter 移动到 /usr/local/bin/4、创建一个专用的系统用户5、创建 systemd 服务文件6、重新加载 systemd 配置7、启动并启用 Node Exporter 服务8、检查 Node Exporter 状…

Qt之串口设计-线程实现(十二)

Qt开发 系列文章 - Serial-port(十二) 目录 前言 一、SerialPort 二、实现方式 1.创建类 2.相关功能函数 3.用户使用 4.效果演示 5.拓展应用-实时刷新 总结 前言 Qt作为一个跨平台的应用程序开发框架,在串口编程方面提供了方便易用…

信号处理相关的东东(学习解惑)

信号处理相关的东东(学习解惑) 所有内容学习自知乎专栏,https://www.zhihu.com/column/xinhao,写的很好,值得反复学习 时频域分析的一些常用概念 FROM:https://zhuanlan.zhihu.com/p/35742606 1、相加性…

使用 UniApp 在微信小程序中实现 SSE 流式响应

概述 服务端发送事件(Server-Sent Events, SSE)是一种允许服务器向客户端推送实时更新的技术。SSE 提供了一种单向的通信通道,服务器可以持续地向客户端发送数据,而不需要客户端频繁发起请求。这对于需要实时更新的应用场景非常有用。 流式传输的特点是将数据逐步传输给客…

【数据结构】八大排序

目录 一、直接插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 七、归并排序 八、计数排序 稳定性结论 稳定性:排序后相同元素之间的相对顺序是否保持不变。 一、直接插入排序 基本思想:通过构建有序序列&#xff…

线程池ForkJoinPool详解

由一道算法题引发的思考 算法题:如何充分利用多核CPU的性能,快速对一个2千万大小的数组进行排序? 这道算法题可以拆解来看: 1)首先这是一道排序的算法题,而且是需要使用高效的排序算法对2千万大小的数组…

python08-序列02-字典dict、集合set

一、字典(dict):可变数据类型 1-1、字典的特点 字典是可变数据类型(list也是),具有增、删、改等一系列的操作;字典中的元素是无序的(hash)key必须唯一,value…

【Java项目】基于SpringBoot的【旅游管理系统 】

【Java项目】基于SpringBoot的【旅游管理系统 】 技术简介:本系统使用JAVA语言开发,采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介:(1)管理员功能:可以管理个人中心、用户管理、景区分…

UE5 跟踪能力的简单小怪

A、思路 1、用素材的骨骼网格体创建小怪BP,绑定新的小怪控制器。 2、控制器的事件开始时,获取玩家状态,指定AI小怪自动向玩家移动。 复杂的AI需要用强大功能如黑板、行为树。 而简单的AI则可以用简单方法实现,杀鸡不用牛刀。视…

渗透测试学习笔记(五)网络

一.IP地址 1. IP地址详解 ip地址是唯一标识,一段网络编码局域网(内网):交换机-网线-pcx.x.x.x 32位置2进制(0-255) IP地址五大类 IP类型IP范围A类0.0.0.0 到 127.255.255.255B类128.0.0.0 到191.255.25…

Windows 下 Anaconda的安装与配置 GPU 版

给之前的电脑安一下深度学习环境 判断是否有NVIDIA GPU Ctrl Shift Esc 打开任务管理器 带此字眼表示有 NVIDIA GPU 安装Anaconda anaconda 打开邮箱会看到下载链接 这里建议修改为其他盘,要不然下载的包和创建的环境都在C盘,占用空间 三个都打钩 取…

flutter --no-color pub get 超时解决方法

新建Flutter项目后,运行报错,需要执行pub get 点击Run ‘flutter pub get’ … … … 卡着,不动了,提示超时 是因为墙的问题 解决方案: 添加以下环境变量 变量名: PUB_HOSTED_URL 变量值: https://pub.flutter-io.cn …

Marin说PCB之POC电路layout设计仿真案例---06

我们书接上回啊,对于上面的出现原因我这个美女同事安娜说会不会你把POC电感下面的相邻两层的CUT_OUT的尺寸再去加大一些会不会变得更好呢?这个难道说是真的有用吗?小编我先自己算一卦看下结果。 本期文章我们就接着验证通过改善我们的单板POC…

Node.js 构建简单应用

在 Node.js 中构建一个简单应用通常包括以下几个步骤: 安装 Node.js设置项目目录初始化项目创建服务器并处理请求和响应 接下来,我们将一步步介绍如何用 Node.js 构建一个简单的 HTTP 应用程序。 1、安装 Node.js 首先确保系统上已安装 Node.js 和 n…

Cesium 无人机航线规划(航点航线)

航线规划实现定制航线,一键巡检功能 小镜头模拟的是此方向的拍照效果,觉得合适可以打个拍照印记 设置里可调控参数 保存后反显的样子,主要是为了区分航线

rfid标签打印开发指导

使用java连接斑马打印机,开发rfid标签打印功能 1.引用斑马打印机的SDKjar包 ZSDK_API.jar 将这个jar文件放到项目的lib目录下,没有就新建一个。 然后点击 File–Project Sreucture–Modules 点击加号 选择对应jar包即可 2.代码开发 1.打印机连接地址…