唐刘:TiDB 研发工程实践及 TiDB 人才观丨CCF 中国数据库暑期学校

在刚刚结束的 CCF 中国数据库暑期学校上, PingCAP 的研发副总裁唐刘分享了在 TiDB 研发过程中的工程实践经验和人才培养方法。目前,TiDB 已广泛应用于各行各业,有着庞大的用户基数,面临多样化的数据处理需求。PingCAP 通过开源、敏态+稳态的研发方式、自动化、持续测试以及持续倾听客户之声(Voice of Customer)等工程实践,成功应对了这些挑战。TiDB 的开源模式、人才培养、持续创造社会价值等也是 PingCAP 关注的焦点。以下为分享实录。阅读需约 8 分钟。

我是 PingCAP 的研发负责人唐刘,也是 PingCAP 的第一个员工。从 8 年前,TiDB 的第一行代码开始,我就深入地参与到了这个项目中。非常荣幸我能有今天的机会,代表 PingCAP 与大家分享 TiDB 研发过程中的一些工程实践经验,以及我们人才培养的方法,供大家学习参考。

经过了 8 年的发展,TiDB 已经被应用在了各行各业,可以说无论是衣食住行、金融保险,生活中每个环节都有了 TiDB 的参与。如此广阔的应用场景也给 TiDB 数据库提出了更高的要求。

作为一款通用数据库,各行业、各场景对数据处理的需求截然不同,如何满足多种需求?面对庞大的用户基数,以及当下爆火的 AI 技术,整个社会的数据量持续膨胀,数据库又该如何应对?很多同学可能会觉得,开发一款数据库,单机能跑起来、能存数据就好了,然而当数据规模扩大 10 倍、100 倍,甚至达到 PB 级别,即使是 OLTP 数据库,这个压力和挑战也是完全不同的。极度复杂的业务场景下,大规模海量数据的处理与分析成为了我们必须面对的挑战。 幸运的是,PingCAP 通过 8 年的努力,成功地解决了客户的实际问题,接下来我将和大家分享,PingCAP 是如何通过工程实践和人才培养来应对这些挑战的。

TiDB 工程实践

开源

在 PingCAP 的工程实践中,最重要的是开源,从开发 TiDB 的第一天起,我们就选择了完全开源的方式来开发我们的数据库,我们完全基于 GitHub 平台来开发,任何人都可以直接在 GitHub 上下载 TiDB 的源代码,编译、部署、运行,也可以直接发布到线上环境,甚至可以在遵循开源协议的前提下将 TiDB 的服务售卖给客户。我们将一切能开源的都开源,能透明的都透明。 开源协作这个观念放在今天大家可能已经习以为常,但是在 8、9 年前的中国,尤其是基础架构领域公司,有很多人会投来非常怀疑的目光。但是我们始终坚定地去走开源这条路,因为我们相信开源是我们能跟我们的用户取得信任的最高效的途径。只有开源才能让用户清晰地了解 TiDB 的系统架构、设计思路,用户脱离 PingCAP 也能够运维、使用甚至迭代这个产品,这种信任对一家基础软件公司来说是至关重要的。

然而开源协作也并不是一件很简单的事,培养使用 GitHub 的习惯也是有一定上手门槛的。比如我们遇到问题之后,首先要在 GitHub 上开 issue,详细地把这个问题描述出来,甚至还需要复现问题;处理问题时要写详细的设计文档,邀请其他人来 review,通过后才能提交 Pull Request 进行代码研发,再次通过 review 才能合并代码,真正投入使用。这一系列流程走下来会有人觉得会不会太繁琐了?其实这也是开源的魅力所在,通过这样的方式,才能打造一款合格的工业体系的设计。

敏态 + 稳态

除了开源,PingCAP 另一个重要的工程实践就是敏态 + 稳态的研发方式。作为一款数据库产品,TiDB 的每个客户对数据库产品的要求是不同的,比如对于互联网客户,要求就是短而快,而在金融核心的银行大客户,稳定才是最重要的。所以,如何让所有用户都「又快又稳」地感知到 TiDB 的价值?我们选择了敏态 + 稳态的迭代方式。 首先我们以敏态的方式来应对业务的不确定性。具体来说,我们会以非常高的频次 - 月度发布 DMR 版本,就是 Development Milestone Release 的这样的版本,同时每周我们会将最新代码部署到云上面去,进入 TiDB Cloud 给到用户进行试用,通过用户体验快速地迭代打磨,借助于整个社区的力量,帮助我们的产品,尤其是新的 feature 快速地推向市场,让客户去感知、去使用。 同时,我们也在以稳态的方式提升整个产品的核心能力。我们每半年会发布一个 LTS(Long Term Support)的版本,让企业客户能够安心使用。因为很多行业,比如我们银行业的客户,不会去使用非常激进的版本,而是主要出于稳定性的考量。在这个大的 LTS 版本里面,我们就会专注于稳定性、高可用性和性能的不断提升。

接下来我分享这些“工程实践”是来自 TiDB 的,同时业界优秀的互联网公司、软件开发人员也都有这样的“最佳实践”。

自动化

想让程序跑得又快又稳,非常关键的就是自动化一切能自动化的服务,让机器和 AI 最大程度地放大开发人员的生产力。大家能在 GitHub 上看到的 PingCAP 的项目代码,如果用冰山来打比方,可能只是冰山海平面上非常小的一角,它的海平面以下有非常大的基座,就是我们的自动化测试体系—— CI/CD、自动化的 pipeline、AI 增强的问答系统,以及其它相关的系统,都是藏在 TiDB 源码后面的。因而 TiDB 能够实现完全自动化的部署、运维。PingCAP 除了数据库内核团队,也成立了专门的团队来实现这些自动化,这也是 PingCAP 能跑得快的一个重要因素。

测试,测试,测试

重要事情说三遍,测试、测试、测试。活动现场有了很多和同学交流的机会,很多同学会有一个共同的疑问:在工业界和学术界做数据库到底有什么不一样?

以 PingCAP 为例,在工业界,我们很多的工作都是聚焦于“测试”的。这是个看起来非常枯燥的工作,但也非常基础,只有做好测试工作,数据库才能更加健壮。我是一个有 20 多年研发经验的程序员,甚至可以非常笃定地说,只要是从事软件开发这个行业,数据库或是其他,只要涉及到基础架构,能不能写好测试会是区分一个工程师是否优秀的一个分水岭。基础软件是非常复杂的系统,复杂系统的稳定性和鲁棒性是非常关键的,只有深入理解系统的工作原理,才能有效地测试系统,才能不断修正、优化。所以在设计系统的时候,我们要保证系统的「可测性」。

Eat your own dog food

吃自己的狗粮,这也是软件开发中常提到的一件事。像我们自己做的 OSS Insight,一个开源的 GitHub 数据分析工具,就是基于我们自己的 TiDB Cloud 来构建的。同时 PingCAP 内部的很多系统也都是基于 TiDB、TiDB Cloud 的。一个系统如果你自己都不愿意尝试体验,那就很难是一个好的系统。

部署、研发、预研,时刻保持技术领先

为了时刻保持技术的领先性,现在 PingCAP 采用的是一个“三代”的研发模块——部署一代、研发一代、预研一代。比如我们底层的存储 TiKV,现在用户部署的基本都是我们的“部署一代”,也就是单个 RocksDB 的存储引擎,今年年底我们会发布现在正投入大量资源研发的下一代存储引擎,也就是基于多 RocksDB 的 Partitioned Raft KV 的新一代存储引擎。除此之外,我们还在研发另一套云原生的 cloud engine。我们会同时保持三代的迭代速度,确保我们在每一个时间点上,TiDB 的技术架构都是领先的,都能给用户带来更大的价值。

持续倾听客户的声音

另外一个学术界与工业界的差距就是,在工业界你需要了解你的产品目标用户是谁,你的产品谁来买单?做产品一定要根据用户的需求来做,而非自己主观的评估。无论你的技术多么 fancy,看起来有多酷,如果没人用,它都不是一款好的产品。PingCAP 一直非常重视用户的反馈,无论是通过 GitHub 的开源协作,还是 AskTUG 论坛、我们线下的客户之声活动,我们都在不断地根据用户的反馈来进行产品的设计和迭代。

TiDB 产品家族协同演进

经过 8 年的打磨,TiDB 形成了一个完备的产品家族体系。最上面是 TiDB Open Core,也就是我们的源代码是完全开源的。基于这个 Open Core,我们推出了 TiDB 企业版、全托管的 TiDB Cloud,和 TiDB Serverless 版本。前两者对应着我之前提到的“敏态 + 稳态”,而 TiDB Serverless 则正在把 PingCAP 人一个非常有野心的愿望变成现实:我们希望给全世界的开发者提供一款免费的、永远在线的数据服务。我们希望 TiDB Serverless 能做到表级别的创建和唤醒,在满足一定 resource quota 的情况下,做到可预期的性能。

TiDB 人才生态

TiDB 自主开源的模式,打造了敏态 + 稳态的工程体系和开放式的架构哲学,而这一切的基础、最核心的部分就是 TiDB 的人才生态。TiDB 一直坚持开源,而 PingCAP 作为一家公司,是以营利为目的的,为什么还能一直坚持开源信仰?我们坚持做企业一定要回报社会,一个好的商业模式是什么样的?我们觉得应该是先创造社会价值,再从社会价值上萃取一部分商业价值,这也是我们对于自己未来长期的期望。

TiDB 在培养怎样的人才?从我们过去招聘的 JD 就可以看出来。归纳到这几点,第一就是技术专精,热爱开源,数据库作为基础软件,对计算机系统的理解、过硬的编程实力都是必须的,我们也希望大家能够深刻理解开源软件的协作模式;同时我们希望你有国际化的视野和拥抱创新的精神,TiDB 诞生于中国,服务于全球用户,在中国、北美、APAC、欧洲都有业务,只有具有开放的心态,才能更好地拥抱国际化;除此之外,客户导向也很重要,如我前面提到的“持续倾听客户的声音”,贝索斯也在亚马逊的 leadership principle 中提出了一条 customer obsession,也就是痴迷客户,客户导向,唯有如此才能打造一款成功的产品。

8 年以来,公司、产品不断壮大,TiDB 的人才生态也在逐步完善,现在也有了一些成果。我们通过 TiDB 成功地连接了全世界的数据库人才,TiDB 在全球有近 2000 名贡献者,遍布 45 个国家和地区,包括现场的同学也有很多 TiDB 的贡献者,TiDB 也成功进入了全球范围内超过 250 家高校。

技术人如何实现社会价值

作为一名工程师,如何创造社会价值?

又回到了最开始我们聊的:开源。只有开源,我们才能在全世界的代码宝库里,留下一些有长远价值的东西,我们的探索,也才能成为国内技术通行者的共同探索。

在开源的基础上,为了让 TiDB 触手可及,我们做了许多努力。

首先,我们将 TiDB 的底层存储 TiKV、混沌工程测试平台 Chaos Mesh 都捐赠给了 CNCF 基金会,它们现在已经成为了非常技术公司构建自己云原生服务的底座;从 2021 到今天,PingCAP 连续三年与 CCF 数据库专委会合作,共同组织中国数据库暑期学校,促进工业界与学术界的联动,让更多学生接触到了数据库的专业知识;我们还打造了 Talent Plan 项目,一门非常适合技术爱好者入门数据库内核研发的数据库课程,现在已经与 250 多所高校合作,学员遍布全球……

今天,为了更好的支持中国数据库人才培养,持续赋能中国数据库行业,践行 PingCAP 对数据库人才的长期主义,和中国数据库一同成长,PingCAP 向中国计算机学会数据库专委会捐赠三年暑期学校工程实践的全部实验,2021 年的主题是分布式,2022 年是优化器,今年的主题是云数据库,欢迎大家体验。

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

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

相关文章

Git介绍及常用命令详解

一、Git的概述 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。 Git 会跟踪我们对文件所做的更改,因此我们可以记录已完成的工作,并且可以在需要时恢复到特定或以前的版本。Git 还使多人协作变得更加容易&…

研发工程师玩转Kubernetes——PVC通过storageClassName进行延迟绑定

不同的PV可以使用相同的StorageClass,它们是一对多的关系。 PV可以设置节点亲和性。比如下图,local-storage-class-waitforfirstconsumer-pv-ubuntuc只能在节点ubuntuc上;local-storage-class-waitforfirstconsumer-pv-ubuntud只能在节点ubu…

C语言笔试训练【第六天】

大家好,我是纪宁。今天是C语言笔试训练的第6天,加油! 往期回顾: C语言笔试训练【第五天】 C语言笔试训练【第四天】 C语言笔试训练【第三天】 C语言笔试训练【第二天】 C语言笔试训练【第一天】 1、以下叙述中正确的是&…

学习Maven Web 应用

Maven Web 应用 本章节我们将学习如何使用版本控制系统 Maven 来管理一个基于 web 的项目,如何创建、构建、部署已经运行一个 web 应用。 创建 Web 应用 我们可以使用 maven-archetype-webapp 插件来创建一个简单的 Java web 应用。 打开命令控制台,…

esp8266使用arduinoJson与tft_espi库发生冲突解决方法

esp8266使用arduinoJson与tft_espi库发生冲突解决方法 arduinoJson与tft_espi库发生冲突解决方法下载arduinoJson5.0版本的,不要用最新版本 示范代码: // Copyright Benoit Blanchon 2014 // MIT License // // Arduino JSON library // https://git…

docker版jxTMS使用指南:使用jxTMS采集数据之一

本文讲解了如何jxTMS的数据采集与处理框架并介绍了如何用来采集数据,整个系列的文章请查看:docker版jxTMS使用指南:4.4版升级内容 docker版本的使用,请查看:docker版jxTMS使用指南 4.0版jxTMS的说明,请查…

GLSL用于图像处理

Pipeline 硬件处理顶点和片段的Pipeline 软件的输入 顶点着色器 顶点的glsl 输入–特殊全局变量 变量 类型 指定函数 描述 gl_ Vertex vec4 glVertex 顶点的全局空间坐标 gl_Color vec4 glColor 主颜色值 gl_SecondaryColor vec4 glSecondaryColor 辅助颜色值 gl_Normal …

Springboot项目集成Durid数据源和P6Spy以及dbType not support问题

项目开发阶段&#xff0c;mybatis的SQL打印有占位符&#xff0c;调试起来还是有点麻烦&#xff0c;随想整合P6Spy打印可以直接执行的SQL&#xff0c;方便调试&#xff0c;用的Durid连接池。 Springboot项目集成Durid <dependency><groupId>com.alibaba</group…

Redis基础命令大全

这里写目录标题 第一章、Redis 命令大全1.1&#xff09;通用命令语法&#xff1a;ping语法&#xff1a;dbsize语法&#xff1a;select db语法&#xff1a;flushdb语法&#xff1a;exit 或 quit语法&#xff1a;redis-cli 1.2&#xff09;Redis 的 Key 的操作命令语法&#xff1…

微信小程序 地图map(电子围栏圆形和多边形)

正常情况下是没有手机上画电子围栏的&#xff0c;公共平台上我也没找到&#xff0c;所以走了一个歪点子&#xff0c;就是给地图添加点击事件&#xff0c;记录点的位置&#xff0c;在画到电子围栏上就是添加电子围栏了&#xff0c;如果只是显示电子围栏就简单了 一、多边形电子…

机器人CPP编程基础-01第一个程序Hello World

很多课程先讲C/C或者一些其他编程课&#xff0c;称之为基础课程。然后到本科高年级进行机器人专业课学习&#xff0c;这样时间损失非常大&#xff0c;效率非常低。 C/单片机/嵌入式/ROS等这些编程基础可以合并到一门课中进行实现&#xff0c;这些素材已经迭代三轮以上&#xf…

ctfshow web93-98

web93 打开环境是一个代码审计题目 简单分析就是输入一个变量num&#xff0c;其值不能等于4476与包含字母&#xff0c;但是他的值需要为4476 函数intval作用为获取变量的整数值&#xff0c;第二个参数的意思是进制&#xff0c;默认为10进制。题目参数为0&#xff0c;就根据变…

享元模式(C++)

定义 运用共享技术有效地支持大量细粒度的对象。 使用场景 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中&#xff0c;从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时&#xff0c;让外部客户程序仍…

立即开始使用 3D 图像

一、说明 这个故事介绍了使用这种类型的数据来训练机器学习3D模型。特别是&#xff0c;我们讨论了Kaggle中可用的MNIST数据集的3D版本&#xff0c;以及如何使用Keras训练模型识别3D数字。 3D 数据无处不在。由于我们希望构建AI来与我们的物理世界进行交互&#xff0c;因此使用3…

8月9日上课内容 nginx负载均衡

负载均衡工作当中用的很多的&#xff0c;也是面试会问的很重要的一个点 负载均衡&#xff1a;通过反向代理来实现&#xff08;nginx只有反向代理才能做负载均衡&#xff09; 正向代理的配置方法&#xff08;用的较少&#xff09; 反向代理的方式&#xff1a;四层代理与七层代…

【多重信号分类】超分辨率测向方法——依赖于将观测空间分解为噪声子空间和源/信号子空间的方法具有高分辨率(HR)并产生准确的估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

牛客小白月赛75C题题解

文章目录 方豆子问题建模问题分析代码 方豆子 问题建模 给定一个整数n&#xff0c;要求输出n级好豆豆&#xff0c;n级好豆豆由3个n-1级好豆豆和1个n-1级坏豆豆组成&#xff0c;已经给出了1级好豆豆和1级坏豆豆。 问题分析 由于最终的豆豆是由其上一级的豆豆产生的&#xff0…

单片机外部晶振故障后自动切换内部晶振——以STM32为例

单片机外部晶振故障后自动切换内部晶振——以STM32为例 作者日期版本说明Dog Tao2023.08.02V1.0发布初始版本 文章目录 单片机外部晶振故障后自动切换内部晶振——以STM32为例背景外部晶振与内部振荡器STM32F103时钟系统STM32F407时钟系统 代码实现系统时钟设置流程时钟源检测…

ArcGIS Pro实践技术应用——暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用全流程科研能力提升

查看原文>>>ArcGIS Pro实践技术应用——暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合能力 本文将利用ArcGIS Pro 将您的 GIS 工作组织到工程中&#xff0c;您可以使用 ArcGIS Pro 映射 2D 和 3D 数据。借助 ArcGIS Pro&#xff…

float 属性的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ float 是什么&#xff1f;⭐ float 属性值⭐ 使用 float 的注意事项&#xff1a;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门…