首页 > 数据库 >极狐GitLab在线发布(数据库)方法论

极狐GitLab在线发布(数据库)方法论

时间:2024-01-31 18:46:09浏览次数:32  
标签:旧列 数据库 GitLab 极狐 发布 Migration

前言

其他公司——邮件

“这周五凌晨6点公司产品发布,请相关的产品、设计、测试、运维、DBA、后端、前端、客服准时就位,6点开始我们准时挂维护页面。“

产品公告栏

“各位客户,我们产品定于xxxx(本周五)版本发布,维护xx小时,由此带来的不便请谅解,特此通告!“

极狐GitLab

SRE:昨天发布了。

产品/设计/测试/后端/前端/研发/客服:“啊?“”昨天发布了啊?”“哦....”.

背景

我们现在大部分公司的产品发布很多时候都会需要维护,以及相关人员到场,进行相关发布适宜;而在我们的极狐GitLab,好像“不存在”发布,有些小伙伴入职咱们公司可能入职一年都不知道原来我们的产品在“源源不断”地进行着发布。这一方面大大降低了小伙伴们的工作量,另一方面,自动化来做,出错的概率会比人工操作降低很多。

其他产品发布中,如果是遇到数据库表,特别是大表需要结构变更之类的,我想很多都逃不过产品维护的命运。因为一般来说我们的数据库在面对咱们的大表结构变更的时候,通常需要比较久的时间才能够完成。

那么在极狐GitLab的在线发布中,在面对变更大表的结构的时候,极狐GitLab怎么来做的呢?下面我们就说一下极狐GitLab在线发布数据库的方法论。

参考文档

Migration

关于GitLab 如何实现不停机上线文档

Migration

Migration:简单来说,就是我们在发布版本的时候对数据库的操作,也就是我们在一般发布中的sql文件包里面的东西。

在极狐GitLab中,将这个发布里面的需要执行的SQL文件分成了三个类别,分别是:Regular Migration、Post-deploy migration和Background migration。

Regular Migration这些是在部署新应用程序代码之前的sql,因为新代码可能会依赖这些执行的sql

Post-deploy migration 发布代码之后的对数据库的一些操作sql,比如添加索引啥的

Background migration 一般是放在后台执行的数据库操作,比如对大表的数据处理那些。

下面图是整个选择是哪个Migration的大致流程。

在线升级的实现

例:将一个主键从int改为bigint

  1. ​ 建立一个新bigint字段 (release M)

​ 首先,发布一个版本M,建立一个新字段类型为bigint,并且创建触发器同步两个字段的数据,使新列的数据同步旧列数据

  1. 交换两个列(release M+1)

​ 再发布一个版本M+1,在bigint列创建索引、外键、并且重置触发器,然后删除旧列索引、删除旧外键 ,然后在代码层面在这个表所涉及的功能加上一个feature flag,并且会创建一个忽略旧列的规则,这个时候涉及的相关功能会暂时失效。 然后交换两个列

  1. 移除旧列和触发器 (release M+2)

​ 发布另一个版本M+2,来删除旧列和触发器

  1. 移除规则(release M+3)

​ 最后发布一个版本 M+3,移除对旧列的忽略规则。(这里的规则是第三步,因为在gitlab这个产品中如果没建立对旧列的忽略的话,会报错,也就是说,我这数据库里面的列如果有没有使用的列或者表,是会出现报错的。)

​ 也就是在发布的过程中必须要锁表的时候我们是先让这所涉及的功能暂时“不可用”,然后执行相关操作,最后“可用”该部分功能来达到我们的目的。

流程图

总结

​ 综上,极狐GitLab就是配合代码分解了一些对数据库的大操作SQL,并且如果无法避免的锁表操作,可以通过feature flag来控制我们实现部分功能暂时不可用,等待完成之后再来对我们的相关功能进行恢复,从而保证整个产品的不停服。整个在线升级的方法论听上去,可能一说大家都能比较好的理解,但是真的要实现这里面的逻辑,需要很多地方严密配合。

这也是极狐GitLab产品的一个非常好的特有属性,保证了我们产品的安全可靠,这也体现了企业追求卓越的品质。

关注【极狐GitLab】获取更多 DevOps 行业最佳实践。

标签:旧列,数据库,GitLab,极狐,发布,Migration
From: https://www.cnblogs.com/jihugitlab/p/17999902

相关文章

  • 数据库MySQL8.0.29安装与备份||了解和掌握MySQL的安装和简单使用和备份数据
    内容:了解和掌握MySQL的安装和简单使用:(1) 了解安装MySQL的软硬件环境和安装方法;(2) 熟悉MySQL的相关基本使用;(3) 熟悉MySQL的构成和相关工具;(4) 通过MySQL的使用来理解数据库系统的基本概念。要求:1. 在微机上安装MySQL数据库系统,为后续实验搭建实验环境,提供前期准备;2. 完成实......
  • gitlab备份
    1)Gitlab的备份目录路径设置123456789101112[root@code-server~]#vim/etc/gitlab/gitlab.rbgitlab_rails['manage_backup_path']= truegitlab_rails['backup_path']= "/data/gitlab/backups"    //gitlab备份目录gitlab_rail......
  • 数据库研发人员必看的MySQL 8.0新特性
    本文汇总了MySQL8.0面向开发的新特性,总共有12个新特性,有想快速了解8.0新特性的朋友,可以看一下哈文章目录:1.公用表达式支持-CTE2.窗口函数3.表达式作为默认值:4.CHECK支持5.隐藏列-MySQL8.0.236.隐藏索引、降序索引、函数索引(MySQL-8.0.19)7.VALUES语法8.INTERSECT和EXC......
  • 重学数据库1
    在学校学数据库有些囫囵吞枣从,学的很不精进,只知道一些基础的增删改查语句,多表联系的我还不懂,因此我打算重新学习,下面将我每天做的笔记一点一点发出。DDL约束DML数据库操作有一个函数now(),此函数是获取系统当前时间的。insertintoemp(username,password,creat_time,update......
  • mac配置gitlab
    使用ssh方式拉取gitlab仓库代码背景在公司mac电脑上需要将gitee仓库代码迁移到公司gitlab代码仓库中,而我习惯使用ssh方式关联git仓库。我也喜欢使用下面简单粗暴的方式来配置git,之前玩git在window10系统上玩的比较多,各种操作都玩过,比如:创建分支、切换分支、分支代码合并、单文件......
  • mysql 创建数据库、创建用户
    --设置密码SHOWVARIABLESLIKE'validate_password%';setglobalvalidate_password_check_user_name='ON';setglobalvalidate_password_policy='LOW';setglobalvalidate_password_length=6; --创建数据库createdatabaseifnotex......
  • 数据库新手必知!轻松学习SQL外键约束的核心原理和实用技巧
    SQL约束-外键约束简介外键约束(FOREIGNKEY,缩写FK)是用来实现数据库表的参照完整性的。它是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须且有主键约束或者唯一约束。被依赖的表通常称之为父表或者主表,设置外键约束的表称为子表或从表。相关概念主键:可以唯一......
  • SQL vs NoSQL:系统设计中选择哪个数据库?
    SQLvsNoSQL:系统设计中选择哪个数据库?在设计系统时,您将面临的最关键的系统设计选择之一是选择合适的数据库管理系统(DBMS)。SQL与NoSQL数据库之间的选择可以极大地影响系统的整体性能、可扩展性和通常的成功。这就是为什么我们在系统设计中详细比较了SQL与NoSQL数据库,以帮助您......
  • openGauss学习笔记-211 openGauss 数据库运维-高危操作一览表
    openGauss学习笔记-211openGauss数据库运维-高危操作一览表各项操作请严格遵守指导书操作,同时避免执行如下高危操作。211.1禁止操作表1中描述在产品的操作与维护阶段,进行日常操作时应注意的严禁操作。表1禁用操作操作名称操作风险严禁修改数据目录下文件名,权限,......
  • 数据库之TiDB基础讲解
    目录1TiDB1.1引言1.2TiDB介绍1.3系统架构1.3.1TIDBServer1.3.2PDServer1.3.3TIKVServer1.3.4TiKV如何不丢失数据1.3.5分布式事务支持1.4与MySQL的对比1.5性能测试1.5.1测试一1.5.2系统测试报告21TiDB1.1引言当我们使用Mysql数据库到达一定量级以后,性能就......