TiDB 作为计算存储分离的数据库,在 SQL Layer 层上要做的东西有很多,比如对上层查询的模式控制,对下层 KV 数据的映射构建。TiDB SQL Infra Team 所做的工作正是成为连接 KV Store 和 SQL Layer 的桥梁。这也是其 SQL Infra 名字的由来:Infra 意为基础架构,得益于在线一致性模式变更的存在,使得在各个 TiDB Server 上都可以自下而上地在 Raw KV 上构建起一套成熟的结构化查询体系。
随着 TiDB 研发团体逐渐壮大,TiDB SQL Infra Team 也逐渐从原来数人研发团队中划分出来,工作内容更加形象化,具体化,模块化。TiDB SQL Infra Team 目前更加聚焦于 TiDB 的模式信息处理和维护,DDL 语法控制流程,SQL 诊断数据集成,以及和 Placement Driver(PD)、KV Storage 的数据交互。随着 TiDB 更加注重计算和数据源亲和性,由算子下推衍生的 Coprocessor 协处理逻辑也划分在 TiDB SQL Infra Team 的工作范畴之内。
我们在做什么
TiDB 元信息管理
元信息的管理对于一个数据库的重要性不言而喻。因此,SQL Infra 组内的工作大头就是 TiDB DDL。大家可能知道,作为一个分布式数据库,TiDB 同时基于 Google F1 Online Schema Change 支持在线 DDL 变更,这个理论本身比较简单,但实际进行工程应用的时候,有许多的事情需要考虑:
-
DDL 在线变更怎么和分布式系统的 Failover 结合在一起?哪些状态需要持久化,哪些不需要?
-
DDL 哪些阶段是可以优化(跳过)的?哪些 DDL 是可以并行支持的,又怎么支持?
-
哪些 DDL 是需要修改用户数据的,哪些其实不需要,在修改数据的时候,怎么避免与用户事务大规模冲突,怎么调整与用户事务对集群资源的争夺?
在这些情况的考虑下,我们对持续对 TiDB 的 DDL 进行了改进:提供在关键时刻可以救命的 FLASHBACK 表级闪回功能,避免“操作不规范,亲人两行泪”。表级锁可以更好地让 TiDB 支持数据的批量导入/备份/恢复。在极端情况下,TiDB 元数据坏了/丢了,ADMIN REPAIR 也可以对元数据进行修复以避免整个集群不可用。正在开发的 SEQUENCE,则为业务提供了更加灵活的持久化自增值数方案。除此之外,我们还在做进一步优化和探索工作。
TiDB 集群数据收集和诊断
TiDB 是一个存储计算分离,包含多组件的分布式系统,大家可以想象一下,运维起来其实要考虑很多问题:
-
怎么判断数据库集群状态是否健康?
-
集群如果有问题/故障,怎么解决?
-
怎么快速集群当前瓶颈在哪,这些瓶颈怎么处理?
-
哪一类 SQL 执行的慢?为什么慢,或者什么时候变慢的?
针对上面的问题,我们参考 MySQL/Oracle/DB2 等已有系统的 SQL 审计功能,开发了 TiDB STATEMENT SUMMARY,对 TiDB SQL 执行过程进行基于语句和执行计划指纹的统计,并滚动更新和归档,方便用户/ DBA 对不符合预期的性能问题做排查。而开发中的 TiDB 性能诊断框架,则以内置的方式直接提供对 TiDB 全集群、全模块、全链路的指标状态进行收集和展示,可以说你能想到和想不到的指标,都可以通过这个框架获取到。举个例子,你可以使用一条 SQL 获取 TiDB/TiKV 运行时的 CPU 和内存火焰图。
我们的团队
关于地点
TiDB SQL Infra Team 的组员均匀分布在各个 Office(北京、杭州、成都、广州),因为 TiDB 是一个诞生于开源、依托开源社区发展成长的项目,这使得我们认为远程的交流和办公是一个常态。所以 PingCAP 并不按照工作地点来划分工作模块,只要你有兴趣加入 TiDB 研发团队,你可以自由地选择工作地点。
关于工作内容
其实,TiDB 是一个非常开放的项目,我们的工作内容是不受限的:无论是提升 TiDB 性能、改善易用性、甚至只是让某个功能更加酷炫,只要你能想到有任何的事情能够让 TiDB 变得更好,并且有兴趣挖坑,都可以申请去做。在 TiDB SQL Infra Team,我们不希望大家只是按照既定的 TODO List 去做事,我们希望每个成员都能打开思路,在不断的思考中工作。
关于成长
底层系统软件开发是一个极具挑战性的任务,早期数据库系统是在八九十年代用 c 代码垒起来的,庞大体系难以现代化理解和调试。现代数据库本身就是非常有挑战和有意思的一个项目,如何将传统的 AST 解析,计划优化,物理存储用现代语言实现出来,并赋之以 Raft 高可用实际,这对我们来说也是一个巨大的挑战。对于 TiDB 这种以 HTAP Workload 为目标、希望部署在各种用户场景下的数据库来说,挑战尤甚。
坦率的讲,这对工程师的要求是非常高的,而我们也非常重视大家在工作中的个人成长。公司定期举办 Infra Meetup、Paper Reading 以及各种内外部技术交流分享,我们 Team 内部有学习小组,你可以把自己感兴趣的方向放到学习小组的主题池中,每周我们都有专门的时间供大家学习,并相互交流分享。我们相信这些机制可以让你打开思路,多了解业界的动态,多思考。
闲话二三
TiDB 是一个从零写起来的数据库,与基于某一个成熟的数据库做改进、开发中间件相比,这种从头写代码的做法自然要做很多的工作。但好处在于,你可以自由地按照自己的想法做设计、做实现,甚至为理想中的功能添加新的语法,并思考在各种场景下,数据库的用户在使用这些语法时的场景是什么,希望解决什么问题,后续的如何维护?这些事情,都可以在 TiDB 团队实现,去推送给广大的 TiDB 用户使用。
如果你喜欢研究极致的性能,乐于思考数据库的设计,喜欢对数据库刨根问底,欢迎加入我们!
加入我们吧!
我们认为优秀的工程师或多或少有以下共同特质:
· A Quick Learner
· A- n Earnest Curiosity
· Faith in Open Source
· Self-driven
· Get Things Done如果你符合以上特质,欢迎进入招聘页面查看目前开放的工作机会:
https://www.pingcap.com/recruit-cn/join/#positions
简历投递通道:hire@pingcap.com
实习生:公司的各项福利和学习资源对实习生全面开放,更重要的是实习生还未毕业就有机会接触工业级项目,而且实习期间表现优异者将有机会获得校招绿色通道特权。针对实习时间并不充裕的小伙伴,你可以先通过 Talent Plan 丰富基础知识(https://university.pingcap.com/talent-plan/),也可以通过参与 TiDB 开源社区获得更多实践机会!
伯乐推荐:如果你身边有符合以上要求的小伙伴,也可以找我们聊一聊,推荐成功就有机会获得伯乐推荐奖励。伯乐推荐邮件格式:[伯乐推荐] 候选人姓名-职位名称-推荐人姓名-推荐人手机号。
延展阅读
是的,我们在招人!PingCAP 2020 招聘季正式开启
TiDB Architecture Team:挑战数据库的本质难题
揭秘 PingCAP 年轻前沿的团队:用户生态