TiDB Serverless Branching:通过数据库分支简化应用开发流程

2023 年 7 月 10 日,TiDB Serverless 正式商用。这是一个完全托管的数据库服务平台(DBaaS),提供灵活的集群配置和基于用量的付费模式。紧随其后,TiDB Serverless Branching 的测试版也发布了。

TiDB Serverless Branching 功能使用户能够为其 TiDB Serverless 集群创建分支。这些分支可以实现并行开发,促进新功能快速迭代,排查故障,开发者无需中断生产数据库的运行。该功能不仅简化了开发和部署过程,还保持了生产环境中数据库的稳定性和可靠性。

分支是什么?

对于集群而言,分支是一个独立的实例,其中包含一份原始集群的数据快照。它建立了一个隔离的环境,以便在不影响原始集群的情况下进行各种操作。

当为集群创建一个分支时,该分支中的数据与原始集群开始分叉,这意味着在原始集群或分支中进行的后续更改将不会被同步。

TiDB Serverless 采用了写时复制 (copy-on-write )技术,以实现快速、平稳地创建分支。这种方法允许原始集群与其分支之间共享数据。这个操作一般在几分钟内就能完成,对用户来说是无感知的,对原始集群的性能也不会有影响。

平衡软件开发速度和质量

在软件开发中,快速推出新功能和全面测试之间的微妙平衡是一个挑战。找到正确的平衡可以实现敏捷开发、更快的迭代,并及时收到宝贵的客户反馈,同时不会影响软件的质量和可靠性。TiDB Serverless Branching 提供了一种方式来找到这个最佳平衡。

为开发人员提供独立环境

在日常开发和测试活动中使用数据库时,开发人员经常面临配额限制、高成本、资源限制和数据质量等挑战。所以通常在团队内共享数据库更实际。但共享数据库往往会导致环境的冲突,开发人员不得不花费额外的精力在应用中添加一些隔离的逻辑。

TiDB Serverless Branching 通过为每个开发人员提供独立的开发和测试环境来解决这些问题。通过消除资源共享和任务干扰,提高生产效率并促进高效的团队协作。

动图封面

通过类似生产的分支进行高效测试

为了 消除资源共享和任务 间干扰带来的烦恼 ,开发人员通常会在进行开发工作时使用单独的数据库环境,比如在服务器上设置自己的数据库或在 Docker 上启动数据库容器。 然而,这些环境与生产环境存在显著差异,很难模拟出实际的性能和延迟状态。 对于功能测试,则总是需要大量的数据准备工作,可能却仍然无法与实际的生产环境相匹配。 为了确保数据质量,开发人员可以选择生成生产数据库的快照,并在测试环境中还原它,或者费力地构建模拟数据。 然而,这两种方法都很繁琐,会显著降低开发效率。

通过 TiDB Serverless Branching,开发人员将能够在几分钟内快速创建与生产环境相同的分支。这些分支有助于使用最新的生产数据进行测试,并快速检测问题。此外,这些分支完全与生产集群隔离,可以进行更安全的功能测试和故障排除。

动图封面

与持续集成和持续部署(CICD)流程无缝集成

自动化场景需要先进的环境管理和质量控制。TiDB Serverless Branching 可以轻松集成到自动化的 CICD 工作流中,通过分支整合, 代码质量的把控和测试流程都变得更加流畅 。这确保了产品的质量,同时遵循了高效的软件开发实践。

动图封面

与 GitHub 集成的分支管理

结合 TiDB Serverless Branching 功能,我们推出了 TiDB Cloud 分支管理 GitHub App。如果开发人员使用 GitHub flow ( https://docs.github.com/en/get-started/quickstart/github-flow ),该应用能够极大程度地简化将分支集成到 CI 流水线中的工作。有关该 GitHub App 的更多详细信息,请参阅我们的文档 ( https://docs.pingcap.com/tidbcloud/branch-github-integration )。

 TiDB Serverless Branching 与 GitHub CI 流水线集成

我们将使用 tidbcloud-branch-gorm-example ( https://github.com/shiyuhang0/tidbcloud-branch-gorm-example ) 来演示集成过程。tidbcloud-branch-gorm-example ( https://github.com/go-gorm/playground )是一个适用于 TiDB Serverless Branching 的 gorm playground 项目的分支版本 。操作如下:

  1. 按照说明将您的 TiDB Serverless 集群与 GitHub 仓库连接起来。这将在您的 GitHub 帐户上安装 TiDB Cloud 分支管理 GitHub App。每次创建 pull request 时, 都会触发创建一个新的对应 TiDB Serverless 分支。
  2. 调整 CI 流水线,使用新创建的 TiDB Serverless 分支来运行测试。
name: tests
​
on:pull_request:branches: [ master ]
​
jobs:test:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- uses: tidbcloud/wait-for-tidbcloud-branch@v0id: wait-for-branchwith:token: ${{ secrets.GITHUB_TOKEN }}public-key: ${{ secrets.TIDB_CLOUD_PUBLIC_KEY }}private-key: ${{ secrets.TIDB_CLOUD_PRIVATE_KEY }}timeout-seconds: 600- name: Set up Go 1.19uses: actions/setup-go@v2with:go-version: 1.19
​- name: go mod pakcage cacheuses: actions/cache@v2with:path: ~/go/pkg/modkey: ubuntu-latest-go-1.19-${{ hashFiles('go.mod') }}
​- name: Testsrun: |GORM_ENABLE_CACHE=true GORM_DIALECT=tidb GORM_DSN="${{ steps.wait-for-branch.outputs.username }}:${{ steps.wait-for-branch.outputs.password }}@tcp(${{ steps.wait-for-branch.outputs.host }}:${{ steps.wait-for-branch.outputs.port }})/test?parseTime=true&tls=tidb" ./test.sh

为了简化 CI 流水线,我们开发了 wait-for-tidbcloud-branch ( https://github.com/tidbcloud/wait-for-tidbcloud-branch ),这是一个辅助的 GitHub Action。它会等到 pull request 对应的 TiDB Serverless 分支就绪后,创建一个新的数据库用户供后续使用。

在完成设置后,每当创建 pull request 时,TiDB Cloud 分支管理 GitHub App 将为拉取请求生成一个 TiDB Serverless 分支。然后,CI 流程将等待分支就绪并将其用于测试。这确保您使用这些分支执行的任何测试都可以映射到生产数据库中的数据,从而更容易及时发现任何潜在问题。

一个具体的开发案例

比如你正在开发 一个 添加唯一索引的 功能 ,但生产数据库中已经存在重复的行。 借助 Ti DB Serverless Branching,CI 流水线可以迅速识别出这类问题。 这是因为测试负载在与生产数据库镜像一致的分支中执行,可以在早期检测到潜在问题。 然而,如果是在模拟数据上进行测试,这类问题很容易被忽视,甚至可能会遗漏到生产环境。

在上面的示例中,我们在数据库中执行了一个简单的 DDL 更改。TiDB 支持在线 DDL ( https://docs.pingcap.com/tidb/stable/ddl-introduction#execution-principles-and-best-practices-of-ddl-statements )变更,用户无需担心影响应用工作负载。然而,随着应用的扩展和测试涉及到更多的业务逻辑,分支对于效率提高和质量保证变得越来越有益。

使用 TiDB Serverless Branching 定制 CI/CD 工作流

TiDB Cloud Branching 工作流专门设计成与流行的应用程序框架兼容,开发人员可以将其简单地集成到现有的 CI 流水线中。 如 果 TiDB Serverless Branching GitHub App 不能完全满足你的需求,在 TiDB Cloud CLI ( https://docs.pingcap.com/tidbcloud/get-started-with-cli )、setup-tidbcloud-cli ( https://github.com/tidbcloud/setup-tidbcloud-cli ) 和 GitHub Actions 的帮助下,你也可以定制分支的 CI/CD 工作流。

结论

借助 TiDB Serverless Branching,开发人员可以并行工作,快速进行新功能的迭代而不影响生产数据库的正常稳定运行。该功能简化了开发和部署过程,同时确保了生产数据库的稳定性和可靠性。

我们希望更多的开发人员能够使用到 TiDB Serverless Branching,我们也将不断改进和扩展这一功能,以满足大家不断变化的需求,敬请期待!

点击链接,立即试用 TiDB Serverless Branching,获取更简化、快速的应用程序开发体验!

TiDB Cloud

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

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

相关文章

1688拍立淘接口 按图搜索1688商品列表

item_get-获得1688商品详情 1688.item_get接入测试 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item…

《C和指针》笔记17:sizeof

sizeof操作符判断它的操作数的类型长度,以字节为单位表示。 操作数既可以是个表达式(常常是单个变量), sizeof x上面的式子返回变量x所占据的字节数。 也可以是两边加上括号的类型名。 sizeof(int)上面的式子返回整型变量的字…

go读取yaml,json,ini等配置文件

实际项目中,要读取一些json等配置文件。今天就来说一说,Golang 是如何读取YAML,JSON,INI等配置文件的。 一. go读取json配置文件 JSON 应该比较熟悉,它是一种轻量级的数据交换格式。层次结构简洁清晰 ,易于阅读和编写&#xff0…

高性能JavaScript

管理浏览器中的JavaScript代码是个棘手的问题&#xff0c;因为代码执行阻塞了其他浏览器处理过程&#xff0c;注入用户界面回执。每次遇到 < script > 便签&#xff0c;页面必须停下来等待代码下载&#xff08;如果是外部的&#xff09;并执行&#xff0c;然后再继续处理…

基于战争策略算法优化的BP神经网络(预测应用) - 附代码

基于战争策略算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于战争策略算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.战争策略优化BP神经网络2.1 BP神经网络参数设置2.2 战争策略算法应用 4.测试结果&#xff1a;5…

【Centos8_配置单节点伪分布式Spark环境】

安装centos8 jdk部署伪分布式spark环境 安装Centos8 环境下的JDK 下载jdk linux版本 下载链接&#xff1a; jdk-8u381-linux-x64.tar.gz 将该文件上传到Centos8 主机 部署配置jdk&#xff08;java8&#xff09; # 解压到指定路径 [lhangtigerkeen Downloads]$ sudo tar …

【Apollo学习笔记】——规划模块TASK之SPEED_BOUNDS_PRIORI_DECIDER

文章目录 前言SPEED_BOUNDS_PRIORI_DECIDER功能简介SPEED_BOUNDS_PRIORI_DECIDER相关配置SPEED_BOUNDS_PRIORI_DECIDER流程将障碍物映射到ST图中ComputeSTBoundary(PathDecision* path_decision)ComputeSTBoundary(Obstacle* obstacle)GetOverlapBoundaryPointsComputeSTBounda…

Docker搭建私有仓库并迁移

目录 方案 A、B机器安装docker 设置阿里云镜像源 安装 Docker-CE并设置为开机自动启动 A机器准备数据 拷贝数据 B机器运行redis、mysql镜像 重启docker服务 方案 准备两台机器&#xff1a;A机器&#xff08;可以连接外网&#xff09;&#xff0c;B机器&#xff08;内网机器…

图床项目进度(二)——动态酷炫首页

前言&#xff1a; 前面的文章我不是说我简单copy了站友的一个登录页吗&#xff0c;我感觉还是太单调了&#xff0c;想加一个好看的背景。 但是我前端的水平哪里够啊&#xff0c;于是在网上找了找制作动态背景的插件。 效果如下图。 如何使用 这个插件是particles.js 安装…

使用图集SpriteAtlas时,根据其中的Sprite,给 RawImage 设置 texture 的两种方法

当使用图集 SpriteAtlas 时&#xff0c; 从中获取的 Sprite 的 texture 是图集中整张图片&#xff0c;为了给 RawImage 设置 Texture&#xff0c;有两种方式&#xff1a; 方式1&#xff1a;使用以下扩展函数&#xff0c;其原理是给 RawImage 设置整张纹理&#xff0c;然后设置…

C语言入门篇(九)

前言   本篇分享的是部分操作符的概念与用法&#xff0c;从经典例题入手&#xff0c;带你快速了解和掌握。   收录专栏&#xff1a;浅谈C语言 操作符详解下 10. 逗号表达式11. 下标引用、函数调用和结构成员12. 表达式求值12.1 隐士类型转换12.2 算术转换12.3 操作符的属性…

多项式求逆

已知 F F F&#xff0c;求 G G G 考虑倍增 F ( x ) ∗ H ( x ) ≡ 1 ( m o d x n / 2 ) F(x) * H(x) \equiv 1 \pmod{x^{n/2}} F(x)∗H(x)≡1(modxn/2) F ( x ) ∗ G ( x ) ≡ 1 ( m o d x n / 2 ) F(x) * G(x) \equiv 1 \pmod{x^{n/2}} F(x)∗G(x)≡1(modxn/2) 假设 H H…

最大子数组和【贪心算法】

最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 class Solution {public int maxSubArray(int[] nums) {//记录最大结果&…

Linux土遁术之监测监测进程打开文件

分析问题过程中&#xff0c;追踪进程打开的文件可以在许多不同情况下有用&#xff0c;体现在以下几个方面&#xff1a; 故障排除和调试&#xff1a; 当程序出现问题、崩溃或异常行为时&#xff0c;追踪进程打开的文件可以帮助您找出问题的根本原因。这有助于快速定位错误&…

基于Spring Boot的住院病人管理系统设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的住院病人管理系统设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java spring…

前列腺小体外泄蛋白(PSEP)——博迈伦

前列腺小体外泄蛋白&#xff08;Prostate-specific extracellular vesicle protein&#xff0c;简称PSEP&#xff09;是一种在前列腺细胞分泌的小体外囊泡中出现的蛋白质。小体外泌物指的是由细胞分泌的膜包裹小体&#xff0c;其中包含多种生物活性物质&#xff0c;如蛋白质、R…

springboot aop实现接口防重复操作

一、前言 有时在项目开发中某些接口逻辑比较复杂&#xff0c;响应时间长&#xff0c;那么可能导致重复提交问题。 二、如何解决 1.先定义一个防重复提交的注解。 import java.lang.annotation.*;Inherited Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Do…

vue三级市区联动

默认返回值格式&#xff1a;all:code、name都返回 name:只返回name code:只返回code&#xff0c;level&#xff1a;可设置显示层级 1&#xff1a; 省 2&#xff1a; 省、市 3&#xff1a; 省、市、区 v-model 默认值 可以是 name: [ "天津市", "天津市",…

Debian 30 周年,生日快乐!

导读近日是 Debian 日&#xff0c;也是由伊恩-默多克&#xff08;Ian Murdock&#xff09;创立的 Debian GNU/Linux 通用操作系统和社区支持的 Debian 项目 30 周年纪念日。 不管你信不信&#xff0c;从已故的伊恩-默多克于 1993 年 8 月 16 日宣布成立 Debian 项目&#xff0c…

C# 练习题

26. Enum(枚举) /*枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。C# 枚举是值类型。换句话说&#xff0c;枚举包含自己的值&#xff0c;且不能继承或传递继承。 */using System;public class EnumTest {enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };static…