当前位置: 首页 > news >正文

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”。

相关文章:

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

2023 年已经过去,TiDB 经过了一年的迭代,又往前进步了一点点,我们非常自豪的看到,TiDB 正在不断地帮助我们的客户成功,包括但不限于: ○ 首个云原生、分布式、全栈国产化银行核心业务系统投产上线丨TiDB …...

debug - 只要在内存中有显示相关的数据, 就会被CE找到

文章目录 debug - 只要在内存中有显示相关的实际数据, 就会被CE找到概述笔记demo实现demo运行效果用CE查找实际数据地址找到自己的调试点 - 方法1找到自己的调试点 - 方法2打补丁备注END debug - 只要在内存中有显示相关的实际数据, 就会被CE找到 概述 自己写了一个demo, 想验…...

Redis 单个与多节点如何实现分布式锁

分布式锁 在许多环境中,分布式锁是非常有用的原语,在这些环境中,不同的进程必须以互斥的方式操作共享资源。在应对并发问题时,Redis 客户端还可以通过加锁的方式,来控制并发写操作对共享数据的修改,从而保…...

频段划分学习射频知识的意义

一、射频电路设计与低频电路设计的不同点 随着频率提高,相应电磁波的波长与变得可与分立电路元件的尺寸相比拟时,电阻、电容和电感这些元件的电响应,将偏离他们的理想频率特性。以 WIFI 2.4G 频段为例,当频率为 2437MHz&#xff0…...

Effective Objective-C 学习(四)

掌握GCD及操作队列的使用时机 在执行后台任务时,GCD 并不一定是最佳方式。还有一种技术叫做 NSOperationQueue,它虽然与 GCD 不同,但是却与之相关,开发者可以把操作以 NSOperation 子类的形式放在队列中,而这些操作也…...

欢迎来到IT时代----盘点曾经爆火全网的计算机电影

计算机专业必看的几部电影 计算机专业必看的几部电影,就像一场精彩的编程盛宴!《黑客帝国》让你穿越虚拟世界,感受高科技的魅力;《社交网络》揭示了互联网巨头的创业之路,《源代码》带你穿越时间解救世界,这…...

光芒绽放:妙用“GLAD原则”打造标准的数据可视化图表

光芒绽放:妙用“GLAD原则”打造标准的数据可视化图表 文章目录 光芒绽放:妙用“GLAD原则”打造标准的数据可视化图表前言一、可视化工具有哪些?二、那如何做出正确可视化图表 ?GLAD原则1.G原则2.L原则3.A原则4.D原则 三、总结最后…...

如何设计出用于喜欢的界面

要设计出用户喜欢的界面,你可以考虑以下几个方面: 用户研究:首先要了解用户的需求和偏好。你可以通过用户调研、用户访谈和数据分析来获取这些信息。了解用户的行为模式、喜好和痛点,有助于设计出更吸引人的界面。 直观的布局&am…...

第三篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:pyttsx3实现语音助手经典案例

传奇开心果短博文系列 系列短博文目录Python的文本和语音相互转换库技术点案例示例系列 短博文目录一、项目背景和目标二、雏形示例代码三、扩展思路介绍四、与其他库和API集成示例代码五、自定义语音示例代码六、多语言支持示例代码七、语音控制应用程序示例代码八、文本转语音…...

JS中数组的常用方法

concat() 连接两个或更多的数组,并返回结果。 let array1 [1, 2, 3]; let array2 [4, 5, 6]; let concatenatedArray array1.concat(array2); console.log(concatenatedArray); // [1, 2, 3, 4, 5, 6]join() 把数组的所有元素放入一个字符串。元素通过指定…...

最好用的论文检索网站

网站展示: 网站链接 sci-hub文献检索 用途: 可以用文章的DOI来检索并下载文章...

AI专题:AI巨轮滚滚向前

今天分享的是电子系列深度研究报告:《AI专题:AI巨轮滚滚向前》。 (报告出品方:方正证券) 报告共计:65页 来源:人工智能学派 Gemini 1.5 Pro 性能显著增强,长上下文理解取得突破 …...

SpringBoot常见问题

1 引言 Spring Boot是一个基于Spring框架的快速开发脚手架,它简化了Spring应用的初始化和搭建过程,提供了众多便利的功能和特性,比如自动配置、嵌入式Tomcat等,让开发人员可以更加专注于业务逻辑的实现。   Spring Boot还提供了…...

五种多目标优化算法(MOAHA、MOGWO、NSWOA、MOPSO、NSGA2)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOAHA 1.2MOGWO 1.3NSWOA 1.4MOPSO 1.5NSGA2 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3)&#xff…...

用 LangChain 和 Milvus 从零搭建 LLM 应用

如何从零搭建一个 LLM 应用?不妨试试 LangChain Milvus 的组合拳。 作为开发 LLM 应用的框架,LangChain 内部不仅包含诸多模块,而且支持外部集成;Milvus 同样可以支持诸多 LLM 集成,二者结合除了可以轻松搭建一个 LL…...

[Bug解决] Invalid bound statement (not found)出现原因和解决方法

1、问题描述 在写了一个很普通的查询语句之后,出现了下面的报错信息 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.oauth.mapper.WxVisitorQrBeanMapper.selectByComIdAndEmpId at org.apache.ibatis.binding.Mappe…...

Qt:Qt3个窗口类的区别、VS与QT项目转换

一、Qt3个窗口类的区别 QMainWindow:包含菜单栏、工具栏、状态栏 QWidget:普通的一个窗口,什么也不包括 QDialog:对话框,常用来做登录窗口、弹出窗口(例如设置页面) QDialog实现简易登录界面…...

uni-app判断不同端

大家好&#xff0c;今天给大家分享的知识是在uni-app中如何区分是在什么端操作的程序 话不多说直接上代码&#xff1a; // #ifdef APP-PLUS<view>APP端</view>// #endif// #ifdef H5<view>H5端</view>// #endif// #ifdef MP<view>小程序端</v…...

计算机网络-网络设备防火墙是什么?

一、防火墙基本概念 前面我们学习了交换机、路由器是网络中常用的设备&#xff0c;现实中还有一个很重要的设备-防火墙。防火墙这一设备通常用于两个网络之间有针对性的、逻辑意义上的隔离。在网络通信领域&#xff0c;防火墙是一种安全设备。它用于保护一个网络区域免受来自另…...

Code Composer Studio (CCS) - Breakpoint (断点)

Code Composer Studio [CCS] - Breakpoint [断点] 1. BreakpointReferences 1. Breakpoint 选中断点右键 -> Breakpoint Properties… Skip Count&#xff1a;跳过断点总数&#xff0c;在断点执行之前设置总数 Current Count&#xff1a;当前跳过断电累计值 References […...

人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_001---人工智能工作笔记0096

使用centos安装,注意安装之前,保证系统可以联网,然后执行yum update 先去更新一下系统,可以省掉很多麻烦 20240219_150031 这里我们使用centos系统吧,使用习惯了. ChatGlm首先需要一台个人计算机,或者服务器, 要的算力,训练最多,微调次之,推理需要算力最少 其实很多都支持C…...

分层钱包HD钱包

bc1 开头的通常指的是比特币&#xff08;Bitcoin&#xff09;的地址&#xff0c;这种格式遵循了比特币改进提案BIP 0173中定义的Bech32编码格式。Bech32地址也被称为"SegWit"地址&#xff0c;它们支持Segregated Witness功能&#xff0c;这是比特币网络为了提高区块链…...

基于python+mysql的宠物领养网站系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括&#xff1a;首页、宠物详情页、用户中心模块。后台功能包括&#xff1a;总览、领养管理、宠物管理、分类…...

机器学习入门--门控循环单元(GRU)原理与实践

GRU模型 随着深度学习领域的快速发展&#xff0c;循环神经网络&#xff08;RNN&#xff09;已成为自然语言处理&#xff08;NLP&#xff09;等领域中常用的模型之一。但是&#xff0c;在RNN中&#xff0c;如果时间步数较大&#xff0c;会导致梯度消失或爆炸的问题&#xff0c;…...

GitHub Actions

GitHub Actions GitHub Actions 是 GitHub 提供的一种持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;解决方案。它可以让你在 GitHub 仓库中直接自动化、定制化和执行软件开发工作流程。 比如&#xff0c;当有新的推送到仓库或者新的 Pull Request…...

harmony 鸿蒙系统学习 安装ohpm报错 ohpm install failed

一. 安装配置 DevEco Studio 安装包时报错 execute ohpm install failed. Install task failed: ArkTS 3.2.12.5. Install ArkTS dependencies failed. 解决办法 找原因&#xff0c;首先&#xff0c;我的电脑中之前安装过node&#xff0c;也许是因为这个。&#xff08;其实…...

MySQL Replication

0 序言 MySQL Replication 是 MySQL 中的一个功能&#xff0c;允许从一个 MySQL 数据库服务器&#xff08;称为主服务器或 master&#xff09;复制数据和数据库结构到另一个服务器&#xff08;称为从服务器或 slave&#xff09;。这种复制是异步的&#xff0c;意味着从服务器不…...

redis分布式锁redisson

文章目录 1. 分布式锁1.1 基本原理和实现方式对比synchronized锁在集群模式下的问题多jvm使用同一个锁监视器分布式锁概念分布式锁须满足的条件分布式锁的实现 1.2 基于Redis的分布式锁获取锁&释放锁操作示例 基于Redis实现分布式锁初级版本ILock接口SimpleRedisLock使用示…...

制作一个简单的html网页

1. 特效按钮 2 可以独立使用的一个页面 3 底部小时钟 <!DOCTYPE html> <html> <head><title>Simple Webpage</title><style>/* 禁止鼠标右键 */body {-webkit-touch-callout: none; /* iOS Safari */-webkit-user-select: none; …...

js filter,every,includes 过滤数组

背景&#xff1a; 页面&#xff1a;在项目中遇到的&#xff0c;前端页面显示为&#xff0c;顶部是下拉搜索条件,下面是一个表格&#xff1b; 数据&#xff1a;接口请求一次性拿到所有&#xff1a;搜索条件里的下拉选项和表格中的数据&#xff1b; 现状&#xff1a;需要前端在搜…...