每日变更的最佳实践

2024-01-24

图片

图片

在优维公司内部,我们采用发布单的方式进行每天的应用变更管理,这里给各位介绍优维的最佳实践。

变更是需要多角色合作的,而且他是整体研发流程的一部分。在优维内部,我们坚持每日变更,打通开发环节到最终发布上线的全过程,在保证质量的前提下,尽可能提升需求交付速率,如下是我们的简要流程图:

图片

其中最右侧【发布单】就是用EasyOps产品的【双态部署 - 发布单】来实现的。发布单用于记录应用程序的更改,包括:

  • 变更的内容

  • 变更的顺序

  • 影响的范围

  • 变更的结果

  • 操作的人

  • 操作的开始时间和耗时

这种标准变更方案有助于保证每日变更过程的有序可靠及高效。同时优维内部也把发布单的创建跟提测单对接起来,做到了全流程自动化。

大伙知道,发布绝不仅仅只是程序包版本的变化,他包括发布前的各种准备,部署过程以及部署之后的线上检查等。基于此考虑,我们的日常发布单是由升级前、升级、升级后三部分组成,如下是产品截图的全貌:

图片

升级前

1.发送升级通知
升级前通知各同事环境开始升级,避免升级过程中影响到环境的使用,这里使用的是调用钉钉机器人给各个关系群发送消息,客户可以根据实际情况采用不同通知方式.
在一些对客系统中,经常需要进行系统维护或升级的情况下,我们会考虑挂维护页面,以避免客户访问页面时出现报错或其他不良体验.
通过挂维护页面,我们可以向用户提供一些相关的信息,如维护的时间范围、维护目的以及预计恢复时间等。这样可以增加透明度,让用户了解系统维护的原因和进展。此外,维护页面还可以提供一些联系方式,以便用户在有需要时能够与系统管理员或客服人员进行沟通和交流。

这些都可以在发布单的前置动作去灵活配置

2.设置监控维护期
这步骤内部没有设置,我们想清楚的看到升级过程中监控是否能够监控到服务的变化,实际使用时建议配置上,避免升级过程中收到误报.

升级

优维内部总共将近400个组件,每日变更的组件平均有20+,最多时候有50来个。组件之间有些是有部署依赖,有顺序要求,在如此庞大的组件清单里面我们如何去解决这个部署依赖的问题?对此,我们设立了一些标准:

  • 对组件进行分层(runtime -> runtime_db -> model_resource -> logic -> logic_db -> L1 -> L2 -> L3 -> xxx),层与层之间是串行部署的

  • 将所有组件归属到具体层级中,下层组件可以对上层组件有依赖,但同层组件不允许有依赖(如logic层的logic_x组件可以对runtime层的runtime_x有依赖)

  • 不同层有自己的并发部署设置,并发限定为1(串行)肯定是最为可靠和有序的,但他带来的是部署时长的增加,故我们需要依据不同层的特性,在保证稳定的前提下,尽可能提升部署效率

这里简单介绍几个重要的层:

model_resource(数据组件)
这里主要放置了数据组件,他主要负责表结构的变更,我们要求我们的表结构是不能做破坏性变更的,故把他放在第一步,在升级过程中,即使表结构发生的变化,但逻辑组件应该也是能正常运行的。同时我们也会有专门的数据割接组件(logic_db层),如果有数据割接,就会在后续执行。

因为表结构的变更是非常严谨的,故在这个阶段我们采用串行执行的方式。
虽然串行执行的方式可能会导致导入模型的时间变长,但它可以有效地控制数据库的负载,确保系统的稳定性和可靠性。

逻辑组件(logic)
逻辑组件可以被理解为无状态应用,它们之间相互独立,没有依赖关系。由于这种独立性,我们可以采用并发执行的方式来提高发布速度,当前并行度我们设置为3。
通过并发执行逻辑组件,我们可以同时处理多个组件的发布任务,而不需要按照严格的顺序逐个执行。这样可以显著提高发布的速度和效率。每个逻辑组件都可以在独立的线程或进程中执行,充分利用多核处理器和分布式计算资源,以实现并行处理。

前端组件(L5)
优维微应用是前端组件,同样是无状态组件,但在某些情况下可能会依赖于后端逻辑组件。针对这种情况,我们将微应用的处理与逻辑组件分开,分成前后两个阶段进行处理。
在本阶段, 我们并发执行微应用的变更,当前并行度我们同样设置为3。

升级后

升级后我们会做一些升级后的通知和检查工作,包括:

1.发送升级完成通知
通知各同事环境已就绪,可以正常使用,同时做一些人工验证。

2.触发自动化冒烟
在升级后的环境中,通过自动化测试可以快速执行一系列测试用例,验证系统在升级后是否正常运行,是否满足预期的功能和性能要求。

3.计算升级过程中平台可用性
计算升级过程中平台可用性,用于评估升级对客户的影响,后续分析如何进一步优化缩小对客户的影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每日变更的最佳实践 的相关文章

  • 如何将TabLayout与Recyclerview同步?

    我有一个TabLayout with Recyclerview这样当单击选项卡时Recyclerview滚动到特定位置 我也想要相反的过程 这样当Recyclerview滚动到特定位置 然后该特定选项卡会突出显示 例如 如果有 4 个选项卡
  • Thread.yield()之后线程的Thread.State是什么?

    是什么Thread State之后的一个线程Thread yield 是不是一个Thread State WAITING 谢谢 不 线程仍会在RUNNABLE http download oracle com docs cd E17409
  • Spring MVC 配置启用

    我正在从头开始建立一个项目 目前我正在配置Spring MVC 4 1 5使用java配置 整个应用程序正在 tomcat gradle 插件上运行 有人可以解释一下为什么我需要对班级进行以下调用DefaultServletHandlerC
  • java中数字字符串间隔排序

    我正在与一些人一起上一个人课 其中有姓名 年龄范围等详细信息 年龄区间为 0 5 6 10 11 30 31 45 46 50 50 100 100 110 我正在上 Person 课name ageBand字符串间隔及其参数化构造函数 g
  • Java switch case 抛出 nullPointer 异常

    我有一个枚举声明如下 public enum Status REQ URL1 NOT URL2 GET URL3 String getURL Status String getURL this getURL getURL 我班上的一个领域
  • 创建 CXF Web 服务客户端时出现 ServiceConstructionException (scala+java+wsdl2java)

    这些其他问题暗示了解决方案 但我无法让它发挥作用 无法解析 http schemas xmlsoap org wsdl soap 的绑定 https stackoverflow com questions 26159206 could no
  • 在word文档的标题中添加图片时出现问题

    我正在Word文档的标题中添加图片 它显示图像的框架并显示 当前无法显示图像 如果我将文本添加到标题 它会显示文本 如果我在文档正文中添加图像 它也会显示图像 获取图像也是如此 它在标题上显示文本 但没有图像 我的支票快用完了 有人可以建议
  • Java:使用类型参数访问私有构造函数

    这是后续这个关于java私有构造函数的问题 https stackoverflow com questions 2599440 accessing the private constructor 假设我有以下课程 class Foo
  • Java中的异常通知

    使用 Tomcat 的 Web 应用程序有什么好的异常通知系统吗 寻找与 exception notification 等价的库 这些库可作为 Rails 的插件使用 看一下http logging apache org log4j 1 2
  • 如何使用jsp上传服务器文件夹上的文件[重复]

    这个问题在这里已经有答案了 我正在尝试使用 servlet jsp 将一些图像上传到位于我的服务器上的文件夹中 下面是我的代码 它在我的本地计算机上运行 import java io import java util import java
  • 将分区扩展到另一级

    根据下图来自春季批量文档 http docs spring io spring batch reference html scalability html partitioning 主步骤被划分为六个从步骤 它们是主步骤的相同副本 我的问题
  • TestNG 与 DataProvider 并行执行

    我有一个从数据提供者接收数据的测试 我希望此测试与数据提供者的不同值并行运行 我尝试了这样的方法 public class IndependentTest Test dataProvider dp1 threadPoolSize 3 inv
  • 尽管设置为 1.7,IntelliJ IDEA 13 仍使用 Java 1.5

    尽管在所有项目设置中指定了 JDK 1 7 包括File gt Project Structure gt Project Project SDK 则产生以下错误IntelliJ 13当尝试编译一些使用菱形运算符的简单 Java 7 代码时
  • Spring:当我的类已经用@RestController注释时,为什么我仍然应该使用@RequestBody?

    我目前正在将 Java 和 Spring 用于我的 Web 服务应用程序 我正在使用 RestController希望消除使用注释的需要 ResponseBody and RequestBody注释 不幸的是 删除 RequestBody注
  • 为什么 JPA/hibernate 不能映射到 MySQL blob 类型?

    我收到以下错误 Caused by org hibernate HibernateException Wrong column type in TestTable for column PAYLOAD Found blob expected
  • 使用 JSeperator - Java 时出现异常间隙

    我一直在开发 Swing GUI 并在添加后出现一些不寻常和不需要的间隙JSeperator 知道如何删除它们吗 或者任何其他选择来很好地实现这一目标 视觉描述 之前差距就很明显了JLabel 速度 及之后JSlider 相关代码 cont
  • 如何在 Java 中以编程方式获取接口的所有实现的列表?

    我可以通过反思或类似的方式来做到这一点吗 我已经搜索了一段时间 似乎有不同的方法 这里总结一下 反思 https github com ronmamo reflections如果您不介意添加依赖项 该库非常受欢迎 它看起来像这样 Refle
  • 三角形未在 OSX 上的 OpenGL 2.1 中绘制

    我正在学习有关使用 OpenGL 在 Java 中创建游戏引擎的教程 我正在尝试在屏幕上渲染一个三角形 一切运行良好 我可以更改背景颜色 但三角形不会显示 我还尝试运行作为教程系列的一部分提供的代码 但它仍然不起作用 教程链接 http b
  • GWT 和身份验证

    保护 GWT Tomcat 应用程序执行身份验证和授权的最佳策略是什么 有两种基本策略 确保入口点安全 确保远程服务的安全 确保入口点安全 最简单的方法是使用常规 Web 应用程序安全工具限制对 GWT 生成的 html js 文件的访问
  • 使用java读取行并映射过滤数据[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions publi

随机推荐

  • 【C#】基础巩固

    最近写代码的时候各种灵感勃发 有了灵感 就该实现了 可是 实现起来有些不流畅 总是有这样 那样的卡壳 总结下来发现了几个问题 1 C 基础内容不是特别牢靠 理解的不到位 导致自己想出来了一些内容 但是无法使用正确的C 代码实现 导致灵感无法
  • 手把手教你使用HarmonyOS本地模拟器

    我们通过下面的动图来回顾下手机本地模拟器的使用效果 本期 我们将为大家介绍HarmonyOS本地模拟器的版本演进 并手把手教大家使用HarmonyOS本地模拟器 一 本地模拟器的版本演进 2021年12月31日 经过一个版本的迭代优化 随D
  • 【UE】在控件蓝图中通过时间轴控制材质参数变化

    效果 步骤 1 新建一个控件蓝图和一个材质 2 打开材质 设置材质域为用户界面 混合模式设置为 半透明 在材质图表中添加两个参数来控制材质的颜色和不透明度 3 对材质创建材质实例 4 打开控件蓝图 在画布面板中添加一个图像控件 将刚才创建的
  • 案例研究:YGG 如何通过 GAP 帮助 Pixels 扩大玩家群体

    在 Sky Mavis 联合创始人 Jeffrey Jihoz Zirlin 在 YGG Web3 游戏峰会 W3GS 上发表主题演讲时 他向在场的人们透露 MMO 农场游戏 Pixels 的日活跃用户数已经超过了 130 000 人 这使
  • logback配置xml日志文件(保姆级教程)

    前言 这是个啥 这就是个控制日志输出格式 控制日志输出位置 控制日志输出环境 控制日志输出级别的玩意 控制忽略输出的日志就这些功能 没有什么很复杂的东西 废话不说多了 配置介绍 configuration
  • 题解 | #二维数组中的查找#C++二维数组暴力解法

    试用期被裁概率大嘛 华为西安 三一 在电信工作可以躺平吗 选offer 2022届offer收割机手把手教你拿offer 面试篇 新媒体运营面试的常问题都整理出来啦 还是准备辞职了 感觉我真的不适合上班 攒了点钱 准备辞职了 后面也不打算再
  • 高防服务器什么意思

    高防服务器什么意思 为什么要用高防服务器 小编为您整理发布高防服务器什么意思的解读 高防服务器是指具备较高防御能力的服务器 能够抵御DDoS CC等网络攻击 高防服务器通常用于保护游戏 APP 金融 电商等业务 这些领域因为其业务特性 容易
  • 2024最强Java面试八股文合集(持续更新)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • 深度学习(5)--Keras实战

    一 Keras基础概念 Keras是深度学习中的一个神经网络框架 是一个高级神经网络API 用Python编写 可以在TensorFlow CNTK或Theano之上运行 Keras优点 1 允许简单快速的原型设计 用户友好性 模块化和可扩
  • Android开发--自定义时频域折线绘制图

    直接上干货 1 XML
  • Kafka速度之谜:高性能的幕后秘密大揭秘

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 kafka高性能的原因 Page Cache ZeroCopy 零拷贝 前言 Kafka的介绍 kafka是linkedIn开源的分布式消息系统 归给Ap
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步
  • 自动驾驶离不开的仿真!Carla-Autoware联合仿真全栈教程

    随着自动驾驶技术的不断发展 研发技术人员开始面对一系列复杂挑战 特别是在确保系统安全性 处理复杂交通场景以及优化算法性能等方面 这些挑战中 尤其突出的是所谓的 长尾问题 即那些在实际道路测试中难以遇到的罕见或异常驾驶情况 这些问题暴露了实车
  • 题解 | #翻转单词序列# 复习Java几个集合方法使用

    人生第一次面试gg 字节跳动 复活赛 二面 字节后端实习面试 字节飞书后端一面凉经 字节 客服平台 一面面经 已挂 菜鸟前端 避雷避雷中华财险 中厂大厂到底怎么选 樊登读书精准营销岗面经 跨行 转技术岗进大厂的好机会 来看 岗位名称 云 软
  • sychnorized积累

    sychnorized 1 对象锁 包括方法锁 默认锁对象为this 当前实例对象 和同步代码块锁 自己指定锁对象 2 类锁 指synchronize修饰静态的方法或指定锁对象为Class对象 3 加锁和释放锁的原理 现象 时机 内置锁th
  • 两个月进口猛增10倍,买近百台光刻机,难怪ASML不舍中国市场

    据统计数据显示 2023年11月和12月 中国从荷兰进口的光刻机设备同比猛增10倍 进口金额超过19亿美元 让ASML赚得盆满钵满 ASML早前表示中国客户在2023年订购的光刻机全数交付 2023年11月中国进口的光刻机达到42台 进口金
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 高精度运算合集,加减乘除,快速幂,详细代码,OJ链接

    文章目录 零 前言 一 加法 高精度加法步骤 P1601 A B 二 减法 高精度减法步骤
  • 每日变更的最佳实践

    在优维公司内部 我们采用发布单的方式进行每天的应用变更管理 这里给各位介绍优维的最佳实践 变更是需要多角色合作的 而且他是整体研发流程的一部分 在优维内部 我们坚持每日变更 打通开发环节到最终发布上线的全过程 在保证质量的前提下 尽可能提升