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.rhkb.cn/news/123570.html

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

相关文章

导出Excel的技术分享-综合篇

导出Excel的技术分享-综合篇 简单的EasyExcel使用 /*** 最简单的写*/public void simpleWrite() {// 注意 simpleWrite在数据量不大的情况下可以使用(5000以内,具体也要看实际情况),数据量大参照 重复多次写入// 写法1 JDK8// s…

Excel文件损坏打不开怎么办?可用这三招解决!

当你的excel文件不可读,或者出现提示“文件已经被损坏,无法打开”,这种情况让人措手不及。而且还会给我们正常的工作带来很多麻烦,文件损坏打不开怎么办?来看看这3招,详细的图文教程,小白也能轻…

2022年09月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:二叉树的深度 给定一棵二叉树,求该二叉树的深度 二叉树深度定义:从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的节点个数为树的深度 时间限制:1000 内存限制:65535 输入 第一行是一个整数n,表示…

基于vue-cli创建后台管理系统前端页面——element-ui,axios,跨域配置,布局初步,导航栏

目录 引出安装npm install安装element-ui安装axios 进行配置main.js中引入添加jwt前端跨域配置 进行初始布局HomeView.vueApp.vue 新增页面和引入home页面导航栏总结 引出 1.vue-cli创建前端工程,安装element-ui,axios和配置; 2.前端跨域的配…

HTTP介绍:一文了解什么是HTTP

目录 什么是HTTP协议 HTTP的工作流程 HTTP请求报文 HTTP响应报文 HTTP状态码 HTTP基于TCP协议的优点 持久连接与非持久连接: 详谈无状态与状态管理: 总结 HTTP协议(Hypertext Transfer Protocol)是互联网上应用最为广泛的…

CS420 课程笔记 P6 - 游戏逆向中的虚拟内存

文章目录 IntroVirtual memoryExample!Static example Intro 在上个视频中,我们知道有些地址在你重进游戏时就会无效,有的有时有效,我们需要了解称为虚拟内存的东西 记住这些信息:当你双击打开 Squally.exe 游戏时,系…

RabbitMQ:work结构

> 只需要在消费者端,添加Qos能力以及更改为手动ack即可让消费者,根据自己的能力去消费指定的消息,而不是默认情况下由RabbitMQ平均分配了,生产者不变,正常发布消息到默认的exchange > 消费者指定Qoa和手动ack …

前端面试0906

// 请给出输出结果 function foo(){ console.log(a); } function bar(){ var a 3; console.log(this.a); foo(); } var a 2; bar(); 2 2 // 请从下面的问题中挑选3道进行回答 1. 防抖和节流分别是什么,一般用在什么场景? 防抖(Debounc…

富士康曲线救国,iPhone 15 Pro订单较上代有减少,iPhone 15增加

据外媒报道,苹果将于9月13日凌晨举行的秋季新品发布会上推出iPhone 15系列智能手机。然而,令人惊讶的是,这款备受期待的手机在8月份就已开始批量生产,以确保上市初期供应充足。 随着iPhone 15系列发布时间的临近,越来越…

ArcGIS Engine10.2 Setup 报错

00 问题重述 当我尝试安装ArcGIS Engine时弹出错误:ArcGIs 10,2 Engine cannot be installed on your machine.ArcGIs 10,2 Engine requires Microsoft ,NET Framework 3.5sp1, Which has not been found on your system, If you want to download and install Mic…

如何实现的手机实景自动直播,都有哪些功能呢?

手机实景自动直播最近真的太火了,全程只需要一部手机,就能完成24小时直播带货,不需要真人出镜,不需要场地,不需要搭建直播间,只需要一部手机就可以了。真人语音讲解,真人智能回复,实…

论文阅读_扩散模型_DDPM

英文名称: Denoising Diffusion Probabilistic Models 中文名称: 去噪扩散概率模型 论文地址: http://arxiv.org/abs/2006.11239 代码地址1: https://github.com/hojonathanho/diffusion (论文对应代码 tensorflow) 代码地址2: https://github.com/AUTOM…

C语言是否快被时代所淘汰?

今日话题,C语言是否快被时代所淘汰?在移动互联网的冲击下,windows做的人越来越少,WP阵营没人做,后台简单的php,复杂的大数据处理的java,要求性能的c。主流一二线公司基本上没多少用C#的了。其实…

Kali Linux渗透测试技术介绍【文末送书】

文章目录 写在前面一、什么是Kali Linux二、渗透测试基础概述和方法论三、好书推荐1. 书籍简介2. 读者对象3. 随书资源 写作末尾 写在前面 对于企业网络安全建设工作的质量保障,业界普遍遵循PDCA(计划(Plan)、实施(Do…

js-14---什么是事件代理?应用场景是什么?

1、事件代理是什么? 事件代理,通俗来讲就是把一个元素响应事件(click,keydown…)的函数委托到另一个元素。 事件流都会经过三个阶段:捕获阶段–>目标阶段----->冒泡阶段 事件委托就是在冒泡阶段完成&…

以CS32F031为例浅说国产32位MCU的内核处理器

芯片内核又称CPU内核,它是CPU中间的核心芯片,是CPU最重要的组成部分。由单晶硅制成,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口…

Linux 调试技术 Kprobe

目录 用途:一、技术背景1.1 kprobes的特点与使用限制1.2 kprobe原理 二、 基于kprobe探测模块的探测方式2.1、struct kprobe结构体2.2 kprobe API函数2.3 示例代码参考资料: 用途: 判断内核函数是否被调用,获取调用上下文、入参以…

三秋农忙,自动驾驶农机保驾护航

“三秋”(收获、播种、整地)是一年中重要而忙碌的农事季节,水稻、棉花、玉米等农作物收获时期,也是小麦、蔬菜等秋种的好时间,还是各类农作物进入秋管的重要期。 随者农业科技发展,北斗导航农机自动驾驶系…

英语语法基础--思维导图

思维导图通常用于可视化和整理信息,而英文语法非常广泛且复杂,无法在一个简单的思维导图中完整表示。然而,我可以提供一个简化版本的英文语法思维导图,列出一些主要的语法概念和部分示例。 请注意,这只是一个基本的概…

【牛客刷题】反转固定区间链表、每k个节点一组反转

链表内指定区间反转_牛客题霸_牛客网 ListNode* reverseList(ListNode* head, ListNode* tail) {ListNode* pre nullptr;ListNode* cur head;while (cur ! tail) { 最后cur就是tailListNode* temp cur->next;cur->next pre;pre cur;cur temp;}return pre;}ListNode…