(四)Distributed System学习路径

2024-11-21 03:58

(四)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):

https://www.bilibili.com/video/BV1x7411M7Sf/?from=search&seid=15149782867482872906&spm_id_from=333.337.0.0&vd_source=3fc05c3b7f095e12a12ea9850e2e0a35

B站(翻译2):

https://www.bilibili.com/video/BV1CU4y1P7PE/?spm_id_from=333.337.search-card.all.click&vd_source=b1ea52a3752465cf99ecc3f9f6a3da38

课程主页:

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》

推荐的人最多的一本书,有一定的难度,要在入门之后看

https://ddia.qtmuniao.com/#/


配合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/

这篇文章中没有理论,是一份适合新手阅读的分布式系统实践笔记。


2. 中阶

顺序

资源

知识分类/使用方法

链接和介绍

1

Distributed systems theory for the distributed systems engineer


https://www.the-paper-trail.org/post/2014-08-09-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站:

https://www.bilibili.com/video/BV1VE411f7kP/?spm_id_from=333.337.search-card.all.click&vd_source=72867308e8b7b6d7774a7e4be6278f68

==

讨论更高级主题,主要是paper讲解

2’

(optional)standford cs244b Distributed System 斯坦福的分布式系统课程

是一个讨论课也给了一些经典的论文列表

课程主页:

http://www.scs.stanford.edu/20sp-cs244b/

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等人的大作《分布式算法》绝对是经典中的经典,但因为该书中的算法证明涉及到大量的数学,读起来也绝对是困难中的困难。虽然国内能看懂计算机英文的不少,但能看到数学英文的就不多了,头大低效是肯定的。


3. 高阶

顺序

资源

知识分类/使用方法

链接和介绍

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学习营


https://tidb.net/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



  • Raft 论文 : 广为流传的Raft精简版论文。这篇论文主要介绍了Raft的工作原理,简单提及但没有详细介绍Cluster Membership changes和Log Compaction高级主题。

  • Raft算法作者ongardie的博士论文 :Raft作者的博士论文,250多页,精髓在前70页,包含了精简版论文的内容,同时又详细介绍了Cluster Membership changes和Log Compaction高级主题。从70页开始,主要跟Raft实践有关:Raft的易学习性、选举超时时间评估、性能等。

  • Zookeeper :提出ZK的论文,ZK作为类似成功应用的案例,值得借鉴。

  • multi-paxospaxos算法需要通过prepare 和accept的四次网络通信才能形成一项决议,而且不限制proposer的数量,非常容易发生冲突,实际工程中,基本上没有按照paxos照搬实现的。简单讲,multi-poxos是一次prepare了一个区间的决议,获得批准后,后面只需要逐个发送accept请求即可,大大减少了网络通信。在实际实现中,通常还要选出一个leader,来消除prepare的冲突。这个论文好像是中国人写的。。。

  • percolatorGoogle设计的基于BIGTABLE单行事务构建的分布式事务层,对两阶段提交讲的比较清楚。

  • MegastoreGoogle在bigtable和spanner之间的过度系统,应该是最早的使用paxos保证多机一致性的,但在spanner论文中提到,megastore性能实在不行,现在据一个googol基础架构部门的工程师讲,spanner在谷歌内部要一统江湖了,200多人的团队。

  • 《Consensus on Transaction Commit》Jim Gray & Leslie Lamport 两位大神合写的paxos提交算法,比较抽象,核心思想是单个协调者的两阶段提交算法是paxos提交中选举成员组为1的特例。spanner中把协调者状态通过paxos复制到多个副本隐隐有这篇论文的理论影子。对这篇论文的唯一印象就是经典的两阶段提交算法可以看做是Paxos提交算法的一个特例。

  • A Note on Distributed Systems:

https://citeseerx.ist.psu.edu/doc/10.1.1.41.7628

  • A Brief Tour of FLP Impossibility

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

开源项目


存储

  • HadoopgithubcomJava:可以通过tag看早期代码包含MapReduce和GFS的开源实现

  • seaweedfsgithubcomGolang:参考了FacebookHaystack和F4

  • MiniogithubcomGolang:一个经典的开源实现的对象存储

  • TiDBgithubcomGolang提供MySql访问接口的分布式数据库


共识算法

  • EtcdgithubcomGolang:Raft的一个实现用于k8s中也可以用于任何分布式系统的控制面的数据存储

  • ZookeepergithubcomJava:实现了Zab共识协议最初用于Hadoop中存储元信息地位和Etcd类似


计算

  • SparkgithubcomScala:一个大数据处理、分析引擎

  • FlinkgithubcomJava:流批一体的数据处理引擎

  • RaygithubcomPython/C++:表达能力强大的通用计算引擎

5

学习计算机结构和操作系统的基本知识


参考我们制定的学习路径的初阶部分:(一)Computer Systems(OS)计算机系统学习路径:https://www.xiaogeedu.net/sys-nd/196.html



DIY吧 除非你...
若你有信心 我建议CS申硕申博求职DIY~ 若你想找专家伴你成长 我建议寻找做啥成啥的人 他们能力强 资源多 能解决你一切CS申硕申博求职身份生活的挑战~
先找其他机构?
肯定有其他靠谱机构 但如果你感觉他们干不过我、或你走投无路了 你再来找我吧hhh 但如果我没名额了 希望你别难过 我不是针对你 而是我每年名额都会满
就想加肖哥微信
我的微信被我藏在我荡气回肠的人生经历里 xiaogeedu.tech/col.jsp?id=253 辛苦你去找下hhh 我是美西时区 但每年9月中-12月中是申请季/招聘季 作息是乱的
不考虑商业合作
不商业合作 因为我不知谁靠谱 不合作能杜绝狗血 因噎废食能保护我自己 且我不缺流量还要赶走流量 找我合作您巨亏hh 我与任何商家或申硕申博求职中介都无关
用电脑访问本站
不建议用手机端访问本站,看着贼挤,在电脑端看着舒服hh