(四)Distributed System学习路径
1. 初阶
顺序 | 资源 | 知识分类/使用方法 | 链接和介绍 |
0 | Distributed systems for fun and profit | 【大局观】 推荐的人很多的一本小书,可读性很强,几天就读完了 | https://book.mixu.net/distsys/ 这本小书可读性很强,基本的东西也都覆盖差不多了。它比较好多一点是不纠结算法细节,重在梳理思路。当然它也给了reference,假如你需要的话。 == 介绍了分布式系统中的一些关键概念和设计考量,助你了解知名的商用系统如 Dynamo、BigTable、MapReduce、Hadoop 背后的设计原理。 |
1 | MIT 6.824 | 【大局观】
| Youtube: https://www.youtube.com/@6.824 B站(翻译1): B站(翻译2): 课程主页: https://pdos.csail.mit.edu/6.824/schedule.html == 跟着他的作业从零开始手撸分布式系统。主要包括mapreduce,paxos,backup server和shared key-value server。重点是,可以手撸。 |
1‘ | cmu 15-440 | 【大局观】 | 课程主页: https://www.cs.cmu.edu/~dga/15-440/S14/ (木有找到视频) 这是分布式系统的入门课,主要是针对本科生。推荐下14年Dave和Srini上的,特色之一是用了Go(那阵子Dave特别着迷于go)地址在http://www.cs.cmu.edu/~dga/15-440/S14/ 建议顺序是先学习440的课件,然后完成作业,有余力再712. |
1‘ | Cambridge Concurrent and Distributed Systems | 【大局观】 | https://www.cl.cam.ac.uk/teaching/2021/ConcDisSys/materials.html https://www.youtube.com/watch?v=UEAMfLPZZhE&list=PLeKd45zvjcDFUEv_ohr_HdUFe97RItdiB 《DDIA》作者MartinKleppmann主讲 |
2 | CMU-15445 Intro to Database Systems | 【数据库】 与MIT 6.824一起配合着看 | Youtube: https://www.youtube.com/watch?v=vdPALZ-GCfI&list=PLSE8ODhjZXjbj8BMuIrRcacnQh20hmY9g B站: https://www.bilibili.com/video/av85655193/?vd_source=72867308e8b7b6d7774a7e4be6278f68 == 可以了解到数据库的基本概念,例如存储、BufferPool 管理、索引、优化器、执行器、事务、MVCC 等。15445 的实验部分是基于其开源的教学项目 bustub,补全其中几个重要的部分,这个项目是 C++ 写的,如果对 C++ 不熟悉的话,那么我觉得实验部分可以暂时跳过,有多余的精力再来搞,毕竟我们是来学数据库的,而不是学 C++ 的。 |
3 | (DDIA) 《Designing Data-Intensive Applications》 | 推荐的人最多的一本书,有一定的难度,要在入门之后看 | 配合PPT: https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgnbeIuwYoxPf-5AE.pdf == 这本书的最大优势就是告诉我们一个技术或概念出现的来龙去脉,任何技术或概念都不是天然就有的 == 去年知乎er吹爆的神书。以我的阅读体验来讲,科班出身应该是完全看得懂的(可能需要一些背景知识而已),看完之后能对分布式数据库的设计和权衡有清晰的认识。在阅读的过程中,可以配合着看一些相关论文,既可以看章节最后的reference,也可以找自己感兴趣的分布式领域经典论文,这些论文的列表知乎和 Github 上一搜很多。 |
3‘ | (optional) 《分布式系统概念与设计》 库劳里斯 | 推荐的人没有很多,作为选读 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgqbeIuwYoscfksQc.pdf |
3’ | (optional) Notes on Distributed Systems for Young Bloods | 推荐的人没有很多,作为选读 | https://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/ 这篇文章中没有理论,是一份适合新手阅读的分布式系统实践笔记。 |
顺序 | 资源 | 知识分类/使用方法 | 链接和介绍 |
1 | Distributed systems theory for the distributed systems engineer | 这篇文章除了把之前你已经看过的东西重新梳理的一边,同时也推荐了好多paper帮你更深入的了解。关于读paper,我觉得如果你没有很强的驱动力是很难啃下去的。要么工作中在用的某个系统,需要深入了解;要么自己在实现一个类似的系统。总之要综合实践才好继续深入。 | |
2 | CMU 15-721 Advanced Database Systems | 推荐的人比较多的中阶课程 | 课程主页: https://15721.courses.cs.cmu.edu/spring2020/schedule.html B站: == 讨论更高级主题,主要是paper讲解 |
2’ | (optional)standford cs244b Distributed System 斯坦福的分布式系统课程 | 是一个讨论课也给了一些经典的论文列表 | 课程主页: |
3 | 《分布式系统》第三版 M. van Steen and A.S. Tanenbaum, Distributed Systems, 3rd ed., distributed-systems.net, 2017. | 推荐的人比较多的书 | https://www.distributed-systems.net/index.php/books/ds3/ == 本书分为九个小结: 简介(Introduction) 架构(Architecture) 进程(Processes) 通信(Communication) 命名系统(Naming) 协同(Coordination) 一致性和多副本(Consistency and replication) 容错(Fault Tolerance) 安全(Security) 作者还提供了 Python 示例代码和图表下载。 |
4 | 《大规模分布式存储系统:原理解析与架构实战》 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgoLeIuwYootzb2wc.pdf 算是导论性质的书,介绍了很多基础知识基础概念,会帮助你理解不同类型的分布式系统的设计,像文件系统键值系统,还是表格系统,不同的存储系统的highlevel设计是什么,系统的里需要哪些module,每个module的瓶颈在哪里,怎么解决瓶颈。这本书不厚读起来很容易理解。 | |
4‘ | (optional)Nancy Lynch《分布式算法》 | https://32931414.s21i.faiusr.com/61/ABUIABA9GAAgmbeIuwYov7iqmAM.pdf (放在optional因为推荐的人没有很多) 如果想系统性的学习分布式算法,Nancy Lynch等人的大作《分布式算法》绝对是经典中的经典,但因为该书中的算法证明涉及到大量的数学,读起来也绝对是困难中的困难。虽然国内能看懂计算机英文的不少,但能看到数学英文的就不多了,头大低效是肯定的。 |
顺序 | 资源 | 知识分类/使用方法 | 链接和介绍 |
1 | Google三篇论文 Amazon的一篇论文 | 介绍: https://blog.csdn.net/u011510825/article/details/122816587 论文1 (The Google File System): https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg1LaIuwYoyfaWogQ.pdf 论文2 (MapReduce): https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg0LaIuwYo3OGB3QQ.pdf 论文3 (Bigtable): https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg0baIuwYo-Yb0jwI.pdf论文4 (Dynamo): https://32931414.s21i.faiusr.com/61/ABUIABA9GAAg8LaIuwYopqS_-gY.pdf == 这四篇文章基本阐述了当代各种分布式设计的理论。以及分布式是解决什么问题的。 这4篇文章,即使看英文,也不会发现很难,因为它们都是非常“实践”性的文章,没有高深理论,你看完之后的感觉是“我靠,其实我早生20年也能写出来“(当然,这是一个错觉,没有几千台机器服务的实践,你不可能搞出来) 每篇文章,平均4小时可以读完。 | |
2 | TiDB Talent Plan学习营 | 推荐参加TiDB Talent Plan学习营,带你实现一个mini版TiDB和TiKV,这里有体系化的学习路线图,并且还有TiDB原厂专家和社区大佬亲临指导,可以从中了解世界顶级开源分布式数据库的底层实现。 == PingCAP Talent Plan 是一项进阶学习计划,内容涵盖:语言学习(Go/Rust),分布式系统、数据库基础知识,和配套项目实践作业。课程内容层层递进,分为线上和线下两个部分:线上课程:学员根据课表完成相应的作业,以周为单位打包提交,导师会进行评估并反馈。表现优异者将会被邀请参加线下课程。TiKV 方向的线上课程包含部分 MIT 6.824 的 Lab。如果已经通关了 MIT 6.824,那么续起 Talent Plan 那肯定是“不费吹灰之力”了:D线下课程:线下集中学习,有导师面对面授课、带教,通过项目练习,强化学员的实操能力。Talent Plan 学员最终可以掌握工业级分布式数据库项目——TiDB/TiKV 架构原理,以及一定的实操技能。 | |
3 | 论文 | Readings in Databases: https://github.com/rxin/db-readings awesome-distributed-systems: https://github.com/theanalyst/awesome-distributed-systems https://github.com/ty4z2008/Qix/blob/master/ds.md https://gist.github.com/ascrutae/7fbc3681ff6e7f68fc908e196eac980e
https://citeseerx.ist.psu.edu/doc/10.1.1.41.7628
https://www.the-paper-trail.org/post/2008-08-13-a-brief-tour-of-flp-impossibility/ 是这篇论文的简单版本:https://groups.csail.mit.edu/tds/papers/Lynch/jacm85.pdf | |
4 | 开源项目 | 存储
共识算法
计算
| |
5 | 学习计算机结构和操作系统的基本知识 | 参考我们制定的学习路径的初阶部分:(一)Computer Systems(OS)计算机系统学习路径:https://www.xiaogeedu.net/sys-nd/196.html |