做者:申砾ios
本文是 PingCAP 招聘职位深度解读系列的第一篇,我司 Engineering VP 申砾老师将为你们介绍 TiDB 团队(一群没法抑制心里技术骚动的人!)。程序员
简单来讲,TiDB 是一个分布式高可用且可以水平扩展的关系型数据库,这个数据库的内核包含三个组件,其中的 SQL 层组件的名字也叫作 TiDB。这个组件负责全部和 SQL 计算相关的事情以及和客户端(业务)之间的交互,这是一个承上启下的核心模块。除了负责 TiDB 组件以外, TiDB 团队还负责开发与其余数据库之间的数据迁移和同步组件,好比 TiDB 自身的 Binlog 模块以及读取 MySQL 之类数据源 Binlog 的组件。数据库
TiDB 研发工程师职位信息:性能优化
https://www.pingcap.com/recruit-cn/engineering/tidb-engineer/服务器
招聘职位上的「岗位职责」简单写了下面三点:架构
负责分布式数据库查询优化器和执行引擎相关的设计,开发,文档撰写和新人指导;分布式
负责分布式数据库 SQL 层的设计,开发和性能优化;工具
参与分布式数据库底层系统存储系统的设计。性能
这里能够作的事情很是多,下面我会详细地介绍。学习
数据库最难的部分在于如何保证正确性,这个是须要具有严谨思惟+想象力的工程问题,也是咱们每个工程师平常必须考虑的问题。
咱们须要以负责且怀疑一切的态度去审视每一行代码;须要以严谨且狡诈的方式想出各类套路方法(“阴谋阳谋/奇技淫巧”)去吊打本身的产品;须要严肃且坚定地拒绝任何可能带来不肯定性的变动;须要在每次遇到问题的时候都反思从此如何避免出现相似的问题。
这是一个极端重要且有技术难度的事项,因此我把它放在第一点来介绍。
一个好的架构决定了产品的好坏。SQL 引擎是一个很是复杂的东西,涉及到大量的模块,如何安排这些模块,并解决这些模块之间复杂的交互是很是重要的事情。
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 你甚至能够写代码。”
“这里有足够多的技术挑战让你学习成长,自由的环境让你能够作你喜欢的工做内容,只要有能力,随时能够给任一项目提 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
实习生:公司的各项福利和学习资源对实习生全面开放,更重要的是实习生还未毕业就有机会接触工业级项目,并且实习期间表现优异者将有机会得到校招绿色通道特权。若是小伙伴们时间不够充裕,也能够先从社区 Contributor 作起,或许下一期 Talent Plan 的主角就是你!
伯乐推荐:若是你身边有符合以上要求的小伙伴,也能够找咱们聊一聊,推荐成功就有机会得到伯乐推荐奖励(iPad、iPhone、MacBook Pro 等等)。伯乐推荐邮件格式:[伯乐推荐] 候选人姓名-职位名称-推荐人姓名-推荐人手机号。