TiDB in 2023, 一次简单的回顾丨PingCAP 唐刘

2023 年已经过去,TiDB 经过了一年的迭代,又往前进步了一点点,我们非常自豪的看到,TiDB 正在不断地帮助我们的客户成功,包括但不限于:

○ 首个云原生、分布式、全栈国产化银行核心业务系统投产上线丨TiDB × 杭州银行

○ 国产数据库的珠穆朗玛峰,到底在哪里?

○ Scaling TiDB To 1 Million QPS ( https://blog.flipkart.tech/scaling-tidb-to-1-million-qps-d556aa6a16ef )

○ ……

要取得上面的成绩并不容易,在 2023 年我们也经历了很多,下面,我会简单的梳理回顾下,我们在 2023 年一些有意思的事情。

TiDB 6.5

在 2022 年的年底,我们发布 了 TiDB 6.5 LTS 版本, 这个版本我是非常期待的。实际结果来看,到 2023 年截止,TiDB 6.5 已经逐渐成为客户最重度的使用版本。

在 TiDB 6.5 之前,用户高频吐槽我们的一个问题就是 - 有时候来了一个大查询,直接把 TiDB Server 给弄 OOM 了,这样影响了一批其他的请求。所以我们在 TiDB 6.5 重点解决了 OOM 问题,结果也是很令人满意的,下图是我们实际在 TiDB Cloud 上面客户集群的报警情况,可以看到,TiDB OOM 的问题下降的非常明显。

不光在 TiDB Cloud 上面,我自己也从客户那边得到了非常多的直接反馈。 除了 OOM 问题的缓解,在 TiDB 6.5 里面,我们还重点的优化了 DDL 的速度,增强了优化器的能力等等。 所以在 2023 年一开始,我是信心满满的,觉得 TiDB 6.5 版本已经很不错。 现在想想,我那时候真的太天真了。

『不错』这个 flag 立了之后,立刻被打脸。TiDB 6.5 解决了不少之前客户遗留的问题,不过当客户开始更大规模使用 TiDB, 把 TiDB 用到更 critical 或者更复杂的场景的时候,新的问题又来了。

TiDB 7.1

在 2023 年有一段时间,我一般见到做数据库的朋友,都会问他们一个看起来比较好玩的问题,『你的客户有试过一次性导入一张 50TB 大小的单表吗?』如果是做 TP 数据库的朋友,通常会来一句『哪有这样的场景?』

嗯,我本来也以为,『哪有这样的场景?』,直到我们一个北美的客户真的进行了这样的操作。他们在 4 月份的时候开启了一次单表 50TB 的导入操作,开始的结果是悲催的 - 无论客户怎么操作,导入都遇到各种各样的问题,包括但不限于数据倾斜打满了一台 TiKV 的磁盘,PD 在 scatter region 的时候太慢导致的导入 timeout 等。本来我们希望帮助客户去操作导入,这样我们遇到问题之后能直接修复,然后继续,不过这个提议被客户直接拒绝,因为他们就是要自己亲自验证,能一次性的导入成功。

随着客户多次导入失败,客户生气的放下狠话,如果一周后还搞不定,那么就不用 TiDB 了。压力到了我们这边,我们开始了几乎连轴转的导入增强工作,终于在一周后,客户直接一次性的单表 50TB 数据导入成功。

这一次的导入优化经历,让我们学习到了很多,如果有机会后面可以再开文章详细说明。当然也有很大的收获,在北美这个客户导入成功一周以后,我们日本的一个客户进行了单表 100TB 的数据导入,结果当然是非常振奋人心的。

挑战还不仅仅限于此,又是北美的一个重要客户,他们将他们自己非常核心的一个元信息管理的业务放到了 TiDB 上面,然后这个业务大部分时候都只是涉及到 meta 的简单操作,属于 TP workload,不过也有不少的时候,他们需要直接进行一些轻量级的复杂查询,而且明确要求了当这样的复杂查询过来的时候,几乎完全不能影响他们的 TP workload。这个在 TiDB 6.5 还是比较有挑战的。而不光是这个客户,我们也发现,越来越多的客户将多个负载跑在一个 TiDB 集群,负载之间的隔离就变得尤其重要。于是我们跟这个客户一起开始了 resource control 的开发,也取得了非常不错的效果。

上面只是分 享了 TiDB 7.1 LTS 两个功 能的开发经历,我们也非常欣喜的看到,这些功能都得到了客户非常积极正向的反馈。也坚定了我们 - 聚焦样板客户的业务场景,不断打磨 TiDB,支持好这些业务场景,复制到其他客户,助力客户成功。

TiDB 7.5

随着越来越多的客户将 TiDB 用在非常核心的系统上面,在发布 TiDB 7.1 之后,我们决定,在 TiDB 7.5 LTS 版本,我们将专注于产品质量的提升。产品质量是一个很大的话题,这里仅仅列一些我们做的一点工作。

我们认为,要控制版本质量,一个非常朴素的逻辑就是少做 feature,当然我们不可能不做 feature,所以这一定是基于我们当前团队带宽的一个平衡和折中。下面是我们大概统计的不同 LTS 版本开发的 feature 个数,可以明显的看到,趋势是明显减少的。因为做的 feature 少,多出来的带宽我们就用到更多的质量加固的工作上面,所以我非常有理由相信,我们的 TiDB 的质量会越来越好。

减少 feature 个数对于研发工程师来说是一个极大的挑战,因为在很多研发的脑子里面,还是固有的认为我要通过做更多的 feature 来拿到更好的绩效,以及晋升。所以在 2023,我们花了大量的时间来解释为啥我们要控制 feature 个数,加固质量等,而且也会在绩效上面对相关工作的同学进行了倾斜。

这里大家可能会有另一个疑惑,就是我们 feature 做的少,产品的竞争力是不是就不行了?之前我也是这样的认为,不过后来我发现,我自己做为程序员也一样,我们太容易低估业务的复杂度,而高估自己的技术能力,所以总认为自己能开发很多 feature。不过后来我认识到,与其开发 10 个半吊子的 feature,真的还不如好好的开发 5 个或者更少的开箱即用的 feature,这样给客户的感受会更好。这也是我们后面会持续努力的目标。

譬如在 7.5 里面,我们花了大量的经历仍然去完善和优化 resource control,譬如我们引入了 runaway query 机制,给用户提供了对于 heavy query 的控制机制,更好的防止了一些突发 heavy query 引起的 TP 业务抖动问题,效果如下:

除了控制 feature 的个数,我们还致力于提升我们自己的测试效率,2023 年一个非常大的工作就是将很多写在 unit test 文件里面的 integration tests 挪出去,让 UT 真的变成 UT,详细见这个 issue - Split integration tests(IT) and unit tests(UT) in TiDB repo ( https://github.com/pingcap/tidb/issues/45961 )。这个工作非常的重要,在没开始之前,如果我们在本地单纯的跑 TiDB 的 UT 测试,不出意外,大概率会跑挂,即使通过,耗时也接近 50 分钟,而这个工作开始一段时间之后,我们当前跑完 UT 只需要 15 分钟(后面还会继续优化),这个对于我们自身的测试效率是一个极大的提升,当效率提升之后,我们就能有更多的时间写代码,加测试了。

这里仅仅只是简单的列了一些我们在质量上面做的事情,如果后面有机会,我可以专门写一篇文章讲讲 2023 年 TiDB 在质量上面做的工作。坦白的说,直到现在,我也没找到一系列很好的指标来评估我们发出去的一个版本质量到底好不好,无论我们做了多少的测试,我总认为是不够的。

小结

上面就是 TiDB 2023 的一个简单的回顾了,我们在 2023 年真的取得了许多非常不错的成绩。总结来说,就是我们发布了一个不错的产品,以及明确了以稳定性为基础的研发策略。回顾 2023,我们也有不少做错的地方,也走了一些弯路,这个有机会,后面再重新开一个新坑,讲讲『那些年我们开发 TiDB 所踩过的坑 :-) 』。

对于 2024 年,在 TiDB 上面,我们也会非常聚焦,首先仍然会以稳定性为基础,在这个基础上面,我们会投入带宽来改进 TiDB 的可观测性以及提升一些场景下面的性能,具体的大家可以关注我们 TiDB 的 roadmap,我们会定期的刷新。

在 2023 年,我们在 cloud 上面也取得了不错的进展,在后面一篇文章中,我就会来讲讲 “TiDB Cloud in 2023”。

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

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

相关文章

Apache POI | Java操作Excel文件

目录 1、介绍 2、代码示例 2.1、将数据写入Excel文件 2.2、读取Excel文件中的数据 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步…

【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床

准备工作: 首先电脑得提前完成安装如下: 1. nodejs环境(node ,npm):【安装指南】nodejs下载、安装与配置详细教程 2. Picgo:【安装指南】图床神器之Picgo下载、安装与配置详细教程 3. Typora:【安装指南】markdown神器之Typora下载、安装与无限使用详细教…

LeetCode---384周赛

题目列表 3033. 修改矩阵 3034. 匹配模式数组的子数组数目 I 3035. 回文字符串的最大数量 3036. 匹配模式数组的子数组数目 II 一、修改矩阵 简单模拟即可&#xff0c;代码如下 class Solution { public:vector<vector<int>> modifiedMatrix(vector<vecto…

Stable Diffusion教程——常用插件安装与测试(一)

前言 随着Stable Diffusion不断演进&#xff0c;越来越多的开发者开始涉足插件开发。尽管网络上存在大量教程&#xff0c;但它们通常零散分布&#xff0c;逐个学习和查找非常耗时&#xff0c;使人感觉每天都在劳累思考。这里总结了Stable Diffusion常用的插件安装与测试方法。…

[Angular 基础] - 视图封装 局部引用 父子组件中内容传递

[Angular 基础] - 视图封装 & 局部引用 & 父子组件中内容传递 之前的笔记&#xff1a; [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 以上为静态页面&#xff0c;即不涉及到跨组…

记一次有趣的逻辑漏洞挖洞经历

前言 前几天在网上冲浪的时候无意间看到了一个Edu的站点&#xff0c;是一个很常见的类似MOOC的那种在线学习系统&#xff0c;对外开放&#xff0c;同时有注册和登录功能。对于我这种常年低危的菜鸡来说&#xff0c;这是最愿意看到的&#xff0c;因为一个Web网站有了登录功能&a…

第2讲springsecurity+vue通用权限系统

阿里云 maven阿里云镜像 <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for addition…

数据记笔记:USGS 查看上世纪卫星图

1 先到USGS EarthExplorer 界面&#xff0c;在address 处选择需要的城市/也可以在底下polygon处手动标出需要研究的区域 2&#xff0c;点击show&#xff0c;就会出找到的对应的区域&#xff0c;点击这个区域&#xff0c;polygon处就会有响应了。然后选择date range 3 点击下方的…

AMD FPGA设计优化宝典笔记(4)复位桥

高亚军老师的这本书《AMD FPGA设计优化宝典》&#xff0c;他主要讲了两个东西&#xff1a; 第一个东西是代码的良好风格&#xff1b; 第二个是设计收敛等的本质。 这个书的结构是一个总论&#xff0c;加上另外的9个优化&#xff0c;包含的有&#xff1a;时钟网络、组合逻辑、触…

VS中设置#define _CRT_SECURE_NO_WARNINGS的原因和设置方式

原因&#xff1a; 在编译老的用C语言的开源项目的时候&#xff0c;可能因为一些老的.c文件使用了strcpy,scanf等不安全的函数&#xff0c;而报警告和错误&#xff0c;而导致无法编译通过。 解决方案&#xff1a; 我们有两种解决方案&#xff1a; 1、在指定的源文件的开头定…

跟着pink老师前端入门教程(JavaScript)-day02

三、变量 &#xff08;一&#xff09;变量概述 1、什么是变量 白话&#xff1a;变量就是一个装东西的盒子 通俗&#xff1a;变量是用于存放数据的容器&#xff0c;通过变量名获取数据&#xff0c;甚至数据可以修改 2、变量在内存中的存储 本质&#xff1a;变量是程序在内存…

你的电脑关机吗

目录 程序员为什么不喜欢关电脑&#xff1f; 电脑长时间不关机会怎样? 电脑卡顿 中度风险 硬件损耗 能源浪费 散热问题 软件问题 网络安全问题 程序员为什么不喜欢关电脑&#xff1f; 大部分人都会选择将电脑进行关机操作。其实这不难理解&#xff0c;毕竟人类都需要…

Linux_线程

线程与进程 多级页表 线程控制 线程互斥 线程同步 生产者消费者模型 常见概念 下面选取32位系统举例。 一.线程与进程 上图是曾经我们认为进程所占用的资源的集合。 1.1 线程概念 线程是一个执行分支&#xff0c;执行粒度比进程细&#xff0c;调度成本比进程低线程是cpu…

vue-ESlint (六)

代码规范 代码规范&#xff1a;一套写代码的约定规则。例如&#xff1a;"赋值符号的左右是否需要空格" "一句结束是否是要加;" . 老话说&#xff1a;"没有规矩不成方圆" → 正规的团队 需要 统一的编码风格 JavaScript Standard Style 规范说…

Cocos2dx-lua ScrollView[一]基础篇

一.ScrollView概述 cocos游戏中ScrollView控件大量使用,95%以上的项目都会使用ScrollView,个别游戏可能全部使用翻页的滑动效果。如果想要精通Cocos的UI开发,精通ScrollView控件非常关键,因此对ScrollView的使用进行总结很有必要。 下文缩写说明:sv = ScrollView, item代…

.NET Core WebAPI中使用swagger版本控制,添加注释

一、效果 二、实现步骤 在代码中添加注释 在项目属性中生成API文档 在Program中注册Swagger服务并配置文档信息 // 添加swagger注释 builder.Services.AddSwaggerGen(x > {x.SwaggerDoc("v1", new OpenApiInfo { Title "Swagger标题", Version "…

Unity中关于ScrollRect组件完整解决方案(ScrollRect中元素自动排版+ScrollRect中元素自动定位到Viewport可见范围内)

一、元素自动排版功能 1、首先要往我们的unity项目中导入两个脚本文件&#xff0c;脚本文件名称分别是UIScrollEventListener和CZScrollRect&#xff0c;这两个脚本文件代码如下所示。 1-1、介绍UIScrollEventListener脚本写法。 using System.Collections; using System.Co…

比特币突然大涨

作者&#xff1a;秦晋 2月9日&#xff0c;除夕夜&#xff0c;比特币突然大涨&#xff0c;最高涨至48219美元&#xff0c;涨幅超6%。据CNBC报道&#xff0c;本周比特币已经上涨10.76%&#xff0c;创下自12月8日以来的最佳的一周。本周ETH上涨8.46%&#xff0c;成为自1月12日以来…

SpringBoot+Tess4J实现本地与远程图片的文字识别

Spring Boot应用程序里集成Tess4J来实现OCR&#xff08;光学字符识别&#xff09;&#xff0c;以识别出本地和远程图片中的文字 一、添加依赖 <dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><vers…

MongoDB数据库又被勒索攻击了

前言 朋友发来一张图片&#xff0c;说MongoDB数据库被勒索了&#xff0c;问我是哪个家族的...... &#xff08;上图来源于网络)&#xff0c;当笔者看到朋友发的图片之后&#xff0c;判断应该是黑客入侵了MongoDB数据库服务器&#xff0c;然后删除了数据库里面的数据&#xff0…