近日,由 TiDB 社区主办,专属于全球开发者与技术爱好者的顶级挑战赛事——TiDB Hackathon 2020 比赛圆满落幕。今年是 TiDB Hackathon 第四次举办,参赛队伍规模创历届之最,共有 45 支来自全球各地的队伍报名,首次实现全球联动。经过 2 天时间的极限挑战, 大赛涌现出不少令人激动的项目。为了让更多小伙伴了解这些参赛团队背后的故事, 我们开启了 TiDB Hackathon 2020 优秀项目分享系列,本篇文章将介绍 CNCF 特别奖森海飞霞团队赛前幕后的精彩故事。
想象一下你有一个 10 台 的 TiKV 集群,有一天 3 块磁盘同时坏了,恰好有一组 Raft Group 就在这 3 块盘上,你不会担心丢数据,因为 10 台机器的集群,同时坏 3 块磁盘的概率太小了。
那么如果这是一个 5000 台的 TiKV 集群呢?
对于一个分布式存储系统,使用多副本机制可以保证数据的安全性。然而,通常情况下,随着集群规模的增长,绝大部分的数据副本数并不会随之增长。久而久之,就会出现当集群规模成百上千时,挂掉的机器节点数等于或者大于数据的副本数(这个数字通常是 3 )的概率也会随之上升。
对于一个 3 副本的集群,当集群发生 3 个节点宕机时,对于不同的调度算法而言,发生丢失数据的概率与影响范围也是不同的。在本次 TiDB Hackathon 比赛中,森海飞霞队伍通过 Dynamic Copysets 项目,降低了该情况下发生丢失数据的概率,并一举夺得本届大赛 CNCF 特别奖项。我们在赛后采访了森海飞霞团队队员与评委唐刘老师,邀请他们分享自己的 Hackathon 经验。
Q:为什么叫森海飞霞这个队伍名?
队长高松:森海飞霞是我非常喜欢的游戏 Dota 2 里新出的英雄,我玩的第一把就拿了 5 杀,于是决定这就是我的本命英雄。并且这次我是全程 coding,所以我要担当起老大哥的责任~
Q:你们最初为什么会想到要做这样一个项目?能分享下你们的灵感是什么吗?
队长高松:项目起源于上海 Office 的一次争论,这次讨论发生在 2020 年 2 月,当时冯立元在群里提出了「假设一个集群机器无限多,Raft Group 无限多的情况下, 我随便挑 3 台 总能找到一个 Raft Group,所以命中 3 台就会丢数据」起初东旭不相信这个结论,直到冯立元甩出论文,看似反直觉的结论竟然是经过论证的。这次辩论也为 Hackathon 埋下了种子。目前最大的 TiKV 单体集群可能只有几百台,但我们不能等到有上千台集群时才考虑这个问题。Copysets 离真正生产环境 GA 的标准还需要非常久的调试和测试,必须在集群规模达到之前做好应对。由于 Dynamic Copysets 本身是一个调度问题,我的工作也与调度相关,因此在 Hackathon 消息刚公布时就我默默想好了选题,加上讨论中舌战群儒的冯立元,我们两人一拍即合组成了队伍。
评委唐刘:Copysets 是我一直关注的领域,几年前我就写过相关文章,但这个实现难度高并且很难模拟,所以能在 Hackathon 上看到静态的 Copysets,并通过 PD simulator 模拟出来真的很振奋。
Q:知乎上你们的帖子里写到是唯一一个让 TiDB 性能倒退的项目,能详细说说为什么吗?
队长高松:对一个调度系统来说有一个类似 CAP 的老大难问题,无法既在 partition(数据分布)很均匀,又要整体负载符合业务需求,同时又要解决数据的 localilty 能力问题,这三方面本质上是矛盾的,有点像 CAP 理论,无法三者兼得,我们这个项目重在 partition 安全优化,必然就会带来 load balancing 的损失,所以可能会让 TiDB 性能倒退。
评委唐刘:我不认为 Dynamic Copysets 会让 TiDB 性能倒退,项目完善之后对性能的影响可以忽略不计,并且对安全性会有很大提升。如果真的让性能倒退了,那一定是他们实现的比较挫(官方吐槽最为致命)。
Q:在比赛过程中你们遇到过比较大的技术困难是什么?后续维护的最大的挑战是?
队员冯立元:做调度需要机器资源,测试需要一个超级大的集群,并且比赛时间有限,比较难在短时间内做出好看的结果。而修复速度是一个很重要的指标,灌数据没有办法提前准备好。
队长高松:后续我们会继续把项目完成,对 Copysets 本身的验证不是难题,但如何与现有调度系统结合并保证调度的效果是一个难题。从现有的资料来看也很少有其他业内同行做过分享,我们只能摸着石头过河。目前调度组验证十台集群的效果完全 ok,但之后的千台规模是否还有效,这种思考方式可能需要新的迭代,这也是一个新的挑战。
Q:你们认为 Dynamic Copysets 为什么很少有人做呢?
评委唐刘:这个问题我几年前就关注过,没想到现在业界依旧没有什么进展,我也挺吃惊的,我猜测是硬件质量逐渐变高了。而且用户现在大规模前移到云,对这块可能没有这么强的需求。还有就是像 Hadoop 这种超大规模 AP 集群坏一点对集群影响不大,但像 TP 的话问题还是比较大的。
Q:在参赛过程中有什么有趣的事儿可以分享吗?
队长高松:可以分享两件小事,RFC 公开的时候,我看到迪安的项目是做回表优化,这个问题我刚好和组员冯立元聊过,并且下定决心要在 2021 年来做,没想到在 Hackathon 被人捷足先登了。当我看到 RFC 的时候又惊讶又开心,毕竟英雄所见略同:)后续我也会和迪安一起讨论项目的落地。
第二件是虽然没有拿到一等奖有些失落,不过 Dynamic copysets 在生产环境的落地不管是业界还是学术界都是空白的状态,很巧的是 Copysets 第一作者的学生也在知乎上联系到我,看看调度上有没有新的研究方向。做完这个项目的话很有可能可以发一篇论文, 算是无心插柳吧。
Q:除了自己的项目,最喜欢哪个项目?
队长高松:我最喜欢 Mods。我最认同的是 mods 对 DBaaS 收益是最大的,不需要客户准备 GPU,我们可以直接用云上的 GPU,唯快不破的收益太令人震撼了,当我看到 demo 的时候都看呆了,我之前从来没想过用 GPU 来优化 TiDB,这个项目让我有了新的视角。
队员冯立元:我也最喜欢 mods,第二喜欢是平头哥的跨流量调度项目,因为这个项目能在云上省很多钱~
最后,森海飞霞的队长高松想对队员冯立元表达一下感谢~
“ To 冯立元:
在 2020 年我们一起合作了很多项目,谢谢你帮助我成长了很多,希望今后还能继续合作。
——高松