TiDB 团队:一群无法抑制内心技术骚动的人 | PingCAP 招聘季
作者:申砾
本文是 PingCAP 招聘职位深度解读系列的第一篇,我司 Engineering VP 申砾老师将为大家介绍 TiDB 团队(一群无法抑制内心技术骚动的人!)。
TiDB 团队工作方向
简单来说,TiDB 是一个分布式高可用且能够水平扩展的关系型数据库,这个数据库的内核包含三个组件,其中的 SQL 层组件的名字也叫做 TiDB。这个组件负责所有和 SQL 计算相关的事情以及和客户端(业务)之间的交互,这是一个承上启下的核心模块。除了负责 TiDB 组件之外, TiDB 团队还负责开发与其他数据库之间的数据迁移和同步组件,比如 TiDB 自身的 Binlog 模块以及读取 MySQL 之类数据源 Binlog 的组件。
来 TiDB 团队你能做什么
TiDB 研发工程师职位信息:
https://www.pingcap.com/recruit-cn/engineering/tidb-engineer/
招聘职位上的「岗位职责」简单写了下面三点:
- 负责分布式数据库查询优化器和执行引擎相关的设计,开发,文档撰写和新人指导;
- 负责分布式数据库 SQL 层的设计,开发和性能优化;
- 参与分布式数据库底层系统存储系统的设计。
这里可以做的事情非常多,下面我会详细地介绍。
正确性
数据库最难的部分在于如何保证正确性,这个是需要具备严谨思维+想象力的工程问题,也是我们每一个工程师日常必须考虑的问题。
我们需要以负责且怀疑一切的态度去审视每一行代码;需要以严谨且狡诈的方式想出各种套路方法(“阴谋阳谋/奇技淫巧”)去吊打自己的产品;需要严肃且坚决地拒绝任何可能带来不确定性的变更;需要在每次遇到问题的时候都反思今后如何避免出现类似的问题。
这是一个极端重要且有技术难度的事项,所以我把它放在第一点来介绍。
架构
一个好的架构决定了产品的好坏。SQL 引擎是一个非常复杂的东西,涉及到大量的模块,如何安排这些模块,并解决这些模块之间复杂的交互是非常重要的事情。
DDL
DDL 是 SQL 引擎最基本的功能之一,有人觉得不就是建个表、删个表吗?其实不是,难点在于如何在分布式数据库上支持不阻塞业务的 DDL 变更,特别是在海量数据上做 DDL,如何既快又好。例如如何在线修改一个十亿级别 Table 的某一列的类型?当然这一切的前提都是保证 DDL 操作的正确性,这点在分布式数据库中有很多点需要考虑,不信的话可以来一起踩坑。
优化器
一条 Query 的查询计划好坏可能会导致执行时间的巨大差别,优化器就是 SQL 引擎的军师。我们需要考虑各种数据分布、各种优化手段、各种等价变化,在合理的时间内选出一条不那么差的查询计划。这里说“不那么差”听起来不那么靠谱,但是在 Query 比较复杂的情况下,潜在的查询计划搜索空间非常庞大,既要找到好的查询计划,又希望缩短搜索时间,这是一个非常有挑战的事情。希望你能来和我们一起做一个“总能选出最好的查询计划”的优化器。
统计信息收集与更新
在优化器搜索并评估所有候选查询计划的过程中,统计信息的准确与否非常重要,它是 SQL 引擎的情报官,优化器拥有准确的统计信息才能做出正确的决策,就像军师有精确且及时的情报才能给出正确的行动方案。在海量的数据中(百亿级别)如何快速计算统计信息,反应数据真实分布;在繁忙的生产系统中,如何让统计信息跟上数据的变动,提供更及时的信息,这些都是有挑战的事情。
执行引擎
军师根据正确的情报制定了好的作战计划之后,还需要骁勇的将军去执行,在这里就是执行引擎。我们在 2.0 和 2.1 两个版本中,都对执行引擎做了大量改进,一些语句的运行时间有了几倍甚至数量级的提升。我们会考虑到如何提升 CPU 使用率、减少 Cache miss、减少 TLB miss,通过 Pipeline、并行等模式提升执行速度。
数据迁移/同步组件
作为一个新兴的数据库,我们需要考虑帮助用户平滑的迁移(全量+增量)已有数据库(主要面对 MySQL)到 TiDB 中来,当然我们也提供一套组件来实时同步数据变动到数据库外面。主要包括下面三个组件:
DM 是一个数据迁移平台,同时支持全量迁移(MyDumper+Loader)以及增量迁移(读取 MySQL Binlog),我们需要把这个工具做的稳定、高效、易于使用。在数据迁移的过程中,我们支持对数据的 Schema 以及内容按照一定规则做转换,实现分库分表的合并等复杂的操作。除了实现这些功能之外,还会致力于让各种操作尽量简单方便,可视化同步状态。
Binlog 是 TiDB 自身的 binlog 模块,能够把 TiDB 集群的实时变动发送出去,通过 binlog 可以给 TiDB 增加一个从集群,这个从集群可以是另一个 TiDB 集群,也可以是一个 MySQL 实例。另外也可以将 binlog 写入消息队列中被其他系统消费,用于其他用途,只要知道 binlog 数据的 protobuf 定义即可。这里的难点在于如何保证正确性、性能、稳定性,特别是如何保证多个节点的 binlog 数据按照事务保证输出顺序,数据不重不丢不乱且延迟低。
Lightning 是一个专门为 TiDB 开发的数据批量导入工具,可以读取 MyDumper 的输出格式或者是 CSV 格式的文件,将数据导入 TiDB 集群。相比通过 SQL 接口导入数据,Lightning 可以跳过分布式事务、数据唯一性约束检查、Raft 协议,将 SQL 文本直接转换为 TiKV 底层的 RocksDB SST file,再将 SST file 注入到 TiKV 集群中。极大地缩短了导数据时间,目前内部的一个测试场景中,导入单表 1TB 的 SQL 文本耗时 2 小时,我们还在持续优化这个工具,尽可能缩短这个时间。
性能
这里把性能放在了最后,并不是说它是不重要的部分,相反它是最重要的部分之一。大家可以看我们的文档,每次发布新版本都会给出性能改进的对比结果,大多数用户在接触 TiDB 之后也会关心性能指标。
我们现在主要通过 OLTP(比如 Sysbench, TPC-C)以及 OLAP (TPC-H)两套测试体系来评估 TiDB 的性能,并且在同时针对这两类场景做性能优化。这里有非常多的事情可以做。我们希望能把性能提升到极致。
除了写代码,你能做的还有这些……
作为一个硬核的代码「团伙」,仅仅「举头望明月,低头写代码」是无法满足我们内心的技术骚动的,我们希望把 TiDB 这个项目和整个开源世界连接起来,所以希望你能和我们一起一些事情让更多的人了解 TiDB:
- 《TiDB 源码阅读》是面向开发者的系列文章,帮助 Contributors 了解 TiDB 的实现细节,让数据库内核这个东西在大家眼中不再神秘,希望越来越多的人能参与到 TiDB 这个项目中来,做一个世界顶级的开源数据库项目。
- Talent Plan 是面向在校学生准备的数据库开发课程,希望通过 3~4 周的导师带学,让同学们能够了解如何做一个分布式数据库,能够基于 TiDB 开发新的功能,做一些和数据库研究相关的实验项目。目前已经有多名同学将自己的毕业设计题目选为 TiDB 相关的事情。
- 除了「写文章,做导师」,我们也非常鼓励大家走出公司做分享,各位可能已经在国内各大技术会议上看到了 PingCAPer 的身影,其实这只是冰山一角。我们在各地都有定期举办的 Infra Meetup,有对外公开的技术方案评审和 Paper Reading,有高校实验室交流,有海外会议布道。在过去的一年中,我们举办或参加了八十多场技术/学术交流活动,把 TiDB 的旗帜插到了世界各地。
我们希望大家能全面发展,这些活动的存在也是想给大家足够的舞台来施展才华,作为拜仁球迷,我想说:“在 PingCAP 你甚至可以写代码。”
Team 成员有话说
“这里有足够多的技术挑战让你学习成长,自由的环境让你可以做你喜欢的工作内容,只要有能力,随时可以给任一项目提 PR 或 Review 代码, CEO 也可能随时 Review 你代码。”
-- From July2993
“在 TiDB 团队有很多聪明且踏实的同事,让我有一种回到学校大家一起努力成长的感觉;工作内容很丰富,既有富有挑战的复杂逻辑,也有具体到底层的工程细节,还有需要时刻关注的学术界最新研究成果,有时还需要承担不同的角色,比如作为一个好的演讲人将一场报告有条理地呈现出去,或者快速地帮助客户解决线上遇到的问题,总的来说,对我而言,这是一份充满可能性的工作。”
-- From Eurekaka
“在这里可以参与到一个完整的开源项目。写代码时必须特别小心,任何失误都可能造成重大的影响,一个细微的行为变化都可能对现有的用户造成困扰。
除了写代码之外,在这里也学会了如何推进一项工作,会涉及到讨论,测试,review,文档等方方面面。也会因为这样的环境,使人整体得到很大的提升。尤其是做事情的方式,思考问题的角度。”
-- From Tiancaiamao
“在这里我感受最深刻的是:无论与谁有意见分歧,大家都单纯地以将事情做得更优为出发点,发表各自观点,会有用代码论证的,也会有拿测试数据佐证的。大家在未定方案前‘针锋相对’,定方案后则又乐呵地讨论去哪吃饭。我非常幸运能和一群志同道合的小伙伴在贵司做着自己喜欢的事。”
-- From Zimulala
我们的期望
兴趣+野心
希望你热爱技术,对开源、基础架构有兴趣,看到这里面的巨大技术挑战以及广阔前景,希望能为业界带来激动人心的解决方案。同时希望你是一个能自我驱动的人,且能带动周边的人一起来推进,这一点很重要。
技术
如果你技术精湛,有数据库/分布式系统/服务器端开发的经验,对代码质量有追求,那就来一起展示技术给大家看。
沟通顺畅 && 思维敏捷 && 条理清晰
目前我们已经有一百多名同事,分散在全球 6 个 Office 或者是远程办公。所以如何高效的沟通,如何能跟上其他同事的思维节奏非常重要。
我们可以提供什么
我经常看到一些招聘贴中写到弹性工作制、不打卡、水果零食健身这种,这些我司都有,不过我认为都不值一提,我想这些并不是优秀的你所追求的。我们能为你提供下面这些东西:
一群聪明优秀的同事
聪明人总是想和聪明人一起工作。相比大厂,我们一直追求小而精的团队,人员的平均水平会更高,我们招聘的时候非常谨慎,保障团队整体水平不断提高。
一个难且有趣的目标
很多程序员对技术有一定的追求,希望能在技术上有一定的成就,刚好我们这个事情是非常难且非常有趣,足够你来施展,一定有你抓破脑袋也解决不了的问题。
一个快速成长的环境
我们希望每个人都能独当一面,即使是校招进来的新同学,我们也期望你能在一年的时间内飞速成长。我们会有老鸟手把手帮你 Review 代码,有各种技术文档、Talk、Meetup 帮助你获取新知识以及建立自己在技术圈的影响力。
一个站着挣钱的机会
作为一篇招聘贴,不提钱会伤感情。我们的薪酬还是很有竞争力的,具体的可以和我司崔老板谈,他那里弹药充足。不过我觉得最值钱的还是现在的期权,已经有不少朋友问过我能不能私下买一些。只要我们能一起把这个技术产品做好,挣到钱是自然而然的事情。
加入我们吧!
我们认为优秀的工程师或多或少有以下共同特质:
- A Quick Learner
- An Earnest Curiosity
- Faith in Open Source
- Self-driven
- Get Things Done
如果你符合以上特质,欢迎进入招聘页面查看目前开放的工作机会:
https://www.pingcap.com/recruit-cn/join/#positions
简历投递通道:[email protected]
实习生:公司的各项福利和学习资源对实习生全面开放,更重要的是实习生还未毕业就有机会接触工业级项目,而且实习期间表现优异者将有机会获得校招绿色通道特权。如果小伙伴们时间不够充裕,也可以先从社区 Contributor 做起,或许下一期 Talent Plan 的主角就是你!
伯乐推荐:如果你身边有符合以上要求的小伙伴,也可以找我们聊一聊,推荐成功就有机会获得伯乐推荐奖励(iPad、iPhone、MacBook Pro 等等)。伯乐推荐邮件格式:[伯乐推荐] 候选人姓名-职位名称-推荐人姓名-推荐人手机号。