这门分布式 KV 存储系统课程教会了我什么? | 我与 Talent Plan

2024-04-08 02:58

本文主要是介绍这门分布式 KV 存储系统课程教会了我什么? | 我与 Talent Plan,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者介绍

张艺文,华中科技大学武汉国家光电实验室直博二年级,主要研究方向为基于新型存储设备的 KV 存储。PingCAP Talent Plan 第二期优秀学员。

距离我从 PingCAP Talent Plan 结业已经过了三个月,这也算是我第一次与企业或者说工业界近距离接触。与 PingCAP 结缘是在去年的六月份,我们实验室发表了一篇有关 KV 方向的论文,众所周知,PingCAP 研发了分布式 Key-Value 存储层 TiKV,同时他们也在寻求各种学术界的优化方案,尝试将这些成果实现到产品中以提升性能。所以在 PingCAP 的崔秋老师和唐刘老师来拜访了实验室之后,我们就顺利地开展了关于 TiKV 的合作。

那么问题来了,我们对 TiKV 并不熟悉。首先,TiKV 虽然也是 KV 存储系统,但它是一个分布式的 KV 系统,而我们研究的主要方向是单机 KV 存储引擎,因此我们需要去补习各种分布式方面的知识;第二是语言的门槛,平时的工作中我们都是 C/C++为主,在了解 PingCAP 之后才接触到 Rust 这门语言,进而了解到 Rust 陡峭的学习曲线,这无疑给我们熟悉 TiKV 又设置了一个阻碍;除此之外,关于 TiKV 的基本结构、各种实现上的技术等等,也是我们的知识盲区,要完全熟悉这个庞大的系统实属不易。而这个时候,Talent Plan 悄然而至,为我们深入了解并掌握 TiKV 打开了一扇窗。

Talent Plan 第一期是去年十一月份开始的,不巧的是那段时间我正忙着实验室的论文任务,没能参加。据说第一期 Talent Plan 因为没有区分线上线下课程,所以把基本语言学习以及后续系统学习课程压缩到了一个月的时间内,学员的学习压力比较大(嘿,还好我是第二期)。我真正参与到 Talent Plan 是在今年的三月份。有了第一期的经验,第二期 Talent Plan 在课程内容上做了很大的升级优化,拆分了线上部分和线下部分。首先我在实验室完成了语言以及基本的 Raft 原理等线上课程,然后再前往 PingCAP 总部学习一个月,专注于系统的学习。这个时间安排更加合理,一定程度也减小了我们的学习压力。在四月中旬,完成线上课程的我动身前往北京,与西工大、武大、中科大以及同一实验室的另一名小伙伴,开始了为期一个月的 TiKV 线下课程的学习。

第一周的课程任务主要是论文阅读,导师们挑选了分布式存储领域的论文带领我们阅读,同时穿插了两堂课,分别是 Rust 入门课程以及 TiKV 架构入门。通过论文以及简单的介绍,我们基本熟悉了主流的几个分布式数据库系统以及基本分布式一致性原理,算是正式进入到 TiKV 的世界。

第二三周开始深入学习 TiKV,从基本的 Read/Write Flow 解析到 TiKV 的部署以及性能测试,同时穿插学习 Raft 基本原理、MultiRaft 实现原理以及 Percolator 事务模型。各位导师由浅至深为我们解析了 TiKV 的各个层次的实现原理,我们也通过实际操作巩固相关的知识,了解到他们究竟在系统中是怎么运作的。

最后一周,我们的任务是综合前面的学习内容,自己实现一个基于 TiKV 的 Redis server,算是整个线下学习阶段的一个总结。

总体来说,完成所有课程以及任务让我们对 TiKV 以及 PD 的原理和实现都有了一个详尽的认识,虽然期间也遇到了各种困难,好在最后还是完成了所有任务顺利结业。在学习过程中,每天下午都有老师来为我们答疑(主要是 zhangjinpeng 老师),学习过程中遇到的问题都能够得到及时的解答,还能进行额外的工业界方面知识的拓展,让从未实际接触过工业界的我们学到了难得的经验。而且每周都有工作人员(此处感谢 linlin 姐)来记录生活学习上遇到的问题,能够得到非常及时的反馈,让我们能够专注于当下的学习。

当然,这也只是 Talent Plan 的第二期,也有不完美的地方。就我的感受而言,首先是课程安排上,语言基础以及 Raft 原理在我们完成线上课程之后基本已经很熟悉了,没有必要再次重复,可以省下来安排给别的课程。其次,我个人感觉线上课程从 Rust 入门到完成最后完成 MIT 的 kvserver 课程,一个月的时间有点紧张(建议小伙伴们尽早开始准备),而且 MIT 的两个课程的测试 case 非常的多,导致大量的时间花在了 debug 上,有点喧宾夺主。相比起来后面 Percolator 的课程感觉很合适,难度适中,完成之后在导师的指导下结合实际应用场景还进行了一些优化拓展。还有一个小问题,课程任务有的时候描述太简单,导致我们拿到题目有点一头雾水,当然每次都能通过及时沟通得到更加详细的说明(笑)。

当然 Talent Plan 也在不断的优化,据我所知,第三期课程已经做了许多改进,上面提到的问题已经得到了优化与解决,后续课程应该也会更加完善。

总的来说,参加 Talent Plan 是一次非常珍贵的体验,一方面是学到了许多的没有接触过的分布式领域的知识,另一方面也结识了来自全国各个高校的优秀的小伙伴以及 PingCAP 的各位厉害的导师,也为我之后来 PingCAP 实习埋下了伏笔。

最后,感谢 PingCAP 各位工作人员以及各位导师的付出与工作,为我们带来了 Talent Plan 这样优秀的活动。

 延展阅读 

我们是如何设计 Golang & SQL 引擎课程的? | Talent Plan 背后的故事

我们是如何设计 Rust & 分布式存储教程的?| Talent Plan 背后的故事

640?wx_fmt=jpeg

这篇关于这门分布式 KV 存储系统课程教会了我什么? | 我与 Talent Plan的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/884388

相关文章

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl

基于MySQL实现的分布式锁

概述 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就立即对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。 但是到了分布式系统的时代,这种

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P98

更改为 差分的数学表达式从泰勒级数展开式可得: 后悔没听廖老师的。 禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改zookeep

Spring Cloud整合Seata实现分布式事务

文章目录 1.Seata1.1 官网1.2 下载1.3 通过安装包运行seata1.3.1 解压seata-server-1.3.0.zip1.3.2 修改 conf/file.conf 配置文件1.3.3 修改conf/registry.conf配置文件1.3.4 添加seata配置信息到nacos1.3.5 配置seata服务端数据库表结构1.3.6 启动seata 2.Spring

ELK+Spring Cloud搭建分布式日志中心

ELK+Spring Cloud搭建分布式日志中心 1.ELK简介2.资源包下载3.Elasticsearch安装3.1 解压Elasticsearch3.2 修改Elasticsearch的配置文件3.3 修改系统配置3.4 启动Elasticsearch 4.ElasticSearch-head插件安装5.Logstash安装6.Kibana安装7.SpringCloud集成logsta

Redis进阶(七):分布式锁

在分布式系统下,涉及到多个节点访问同一个公共资源的情况,此时需要通过 锁 进行互斥控制:避免出现 线程安全问题。 1.分布式锁的基本实现 超卖问题: 解决: 采用redis实现分布式锁 可用采取:在购票的时候,操作过程中需要先加锁。在redis上设置一个key - value,完成上述买票操作,再把key - value 删掉。如果发现key - value 存在,就加锁失败,无法进

聊聊分布式,再讨论分布式解决方案

前言 最近很久没有写博客了,一方面是因为公司事情最近比较忙,另外一方面是因为在进行 CAP 的下一阶段的开发工作,不过目前已经告一段落了。 接下来还是开始我们今天的话题,说说分布式事务,或者说是我眼中的分布式事务,因为每个人可能对其的理解都不一样。 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事