共计 4341 个字符,预计需要花费 11 分钟才能阅读完成。
引子
时下,随着通信技术的倒退、挪动互联网的遍及、物联网车联网人工智能的衰亡,每天所产生的数据呈爆炸性的增长。这种尺度的数据不是传统单机零碎能够独立解决的,而只能借助于大规模的分布式系统,因此分布式系统慢慢的变成一门“显学”。而作为一个分布式系统初学者,面对网上未加归类、浩如烟海的学习材料,很容易两眼抓瞎。
但分布式系统有其根本钻研内容和独特倒退脉络,比方:
- 一些根本钻研问题:时序问题、一致性问题、容错技术、共识算法、并发管制等等。
- 一些根本定理:CAP、PACELC、FLP
- 渐次倒退的工业零碎:MapReduce、Spark、GFS、Dynamo、Cosmos
因而只须要在“时空”两个维度对分布式系统进行把握,就能提纲挈领,愈学愈明。“时 ”示意分布式系统的演进脉络,能够通过浏览不同期间、学术界工业界的一些论文来把握。“ 空”示意分布式系统中所钻研的根本问题的拆解,能够通过浏览一些书籍建设分布式系统的常识体系。本文将我在学习分布式系统常识过程收集到的一些材料,按类别简略汇总,以飨诸君。材料排名没有先后,请按需采纳。
注: 文中举荐的材料大多为英文,如果浏览有艰难,举荐应用 Chrome 浏览器,并且给 Chrome 装一个“google 翻译”的插件,能够点击一键“翻译此页面”。
作者:木鸟杂记 https://www.qtmuniao.com/2021…, 转载请注明出处
书籍
Dr. Martin Kleppmann. Designing Data-Intensive Applications
《构建数据密集型利用》,https://dataintensive.net/buy.html,作者提供收费英文版下载,网上也能够搜到。
全书分为三大部分:
- 零碎基石(Foundations of Data System)
- 扩散数据(Distributed Data)
- 衍生数据(Derived Data)
零碎基石 局部探讨了数据系统的一些通用侧面:
- 可靠性、可扩展性、可维护性(Reliable, Scalable, and Maintainable Applications)
- 数据模型和查询语言(Data Models and Query Languages)
- 数据存储和检索(Storage and Retrieval)
- 数据编码和演进(Encoding and Evolution)
扩散数据 局部探讨了构建扩散在多机上的数据系统和一些准则和面临的问题:
- 冗余(replication)
- 分片(Partition)
- 事务(Transactions)
- 分布式系统存在的问题(The Trouble With Distributed Systems)
- 一致性和共识(Consistency and Consensus)
衍生数据 局部其实是在探讨扩散在多机上的零碎的解决问题。包含:
- 批处理(Batch Processing)
- 流式解决(Stream Processing)
- 数据系统的将来(The Future of Data Systems)
近年来流批零碎趋于交融,从而让用户可能更加灵便、高效的对原始数据进行解决和变换。
这些章节拆分的都十分棒。熟读本书,让你在遇到一个新零碎时,能够如庖丁解牛个别纯熟拆解成为多个构件,并了每个构件背地的衡量取舍(trade off)。
M. van Steen and A.S. Tanenbaum, Distributed Systems, 3rd ed., distributed-systems.net, 2017.
《分布式系统》第三版,https://www.distributed-systems.net/index.php/books/ds3/。作者提供英文版 PDF 收费下载链接,简介:
本书分为九个小结:
- 简介(Introduction)
- 架构(Architecture)
- 过程(Processes)
- 通信(Communication)
- 命名零碎(Naming)
- 协同(Coordination)
- 一致性和多正本(Consistency and replication)
- 容错(Fault Tolerance)
- 平安(Security)
作者还提供了 Python 示例代码和图表下载。
Mikito Takada. Distributed System for fun and profit
一本收费的分布式系统小书:http://book.mixu.net/distsys/,介绍了分布式系统中的一些要害概念和设计考量,助你理解出名的商用零碎如 Dynamo、BigTable、MapReduce、Hadoop 背地的设计原理。作者将分布式编程的考量归结为两个方面:
- 信息以光速传递
- 拆散组件会独立出错
而后将全书分为五个小结:
- 分布式系统根底(Basics):粗粒度的介绍了一些名词和概念,探讨了零碎的指标以及实现的难度
- 自上而下的层层形象(Up and down the level of abstraction):介绍了 CAP 定理和 FLP impossibility,而后探讨了多种一致性模型。
- 时与序(time and order)。了解散布零碎的要害之一,便是要了解扩散的组件如何确定工夫的先后顺序。
- 多正本:防止决裂(Replication: preventing divergence):多正本间如何保持一致
- 多正本:承受一致(Replication: accepting divergence):多正本间如何解决抵触
公开课
MIT 6.824: Distributed Systems
最经典的分布式系统课程之一:https://pdos.csail.mit.edu/6.824/schedule.html。
课程亮点在于:
- 精选的论文列表
- 精美的实验设计
非常适合自学。
CMU 15-440: Distributed Systems
cmu 的分布式系统:https://www.cs.cmu.edu/~dga/15-440/S14/syllabus.html。
本课程讲义比拟好,试验别有一番风味。
UW CSE490H: Distributed Systems
华盛顿大学的分布式系统课程:https://courses.cs.washington.edu/courses/cse490h/11wi/。最近几年的课程没有开还是没有公开,最近的是 2011 年的。也提供了一个不错的论文浏览列表。
开源我的项目
存储
- Hadoop,https://github.com/apache/hadoop,Java:能够通过 tag 看晚期代码,蕴含 MapReduce 和 GFS 的开源实现
- seaweedfs,https://github.com/chrislusf/seaweedfs,Golang:参考了 Facebook Haystack 和 F4
- Minio,https://github.com/minio/minio,Golang:一个经典的开源实现的对象存储
- TiDB,https://github.com/pingcap/tidb,Golang,提供 MySql 拜访接口的分布式数据库
共识算法
- Etcd,https://github.com/etcd-io/etcd,Golang:Raft 的一个实现,用于 k8s 中。也能够用于任何分布式系统的管制面的数据存储。
- Zookeeper,https://github.com/apache/zookeeper,Java:实现了 Zab 共识协定,最后用于 Hadoop 中存储元信息,位置和 Etcd 相似。
计算
- Spark,https://github.com/apache/spark,Scala:一个大数据处理、剖析引擎
- Flink,https://github.com/apache/flink,Java:流批一体的数据处理引擎
- Ray,https://github.com/ray-project/ray,Python/C++:表达能力弱小的通用计算引擎
系列博客
写给分布式系统初学者的一些笔记
Jeff Hodges https://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/
博主将从事分布式系统工作所失去的经验教训做了一个概要性的总结,对新人进入分布式畛域转换思维很有启发性作用。包含:
- 故障频发是分布式系统区别于其余零碎的显著特点
- 构建强壮的分布式系统要远难于单机零碎
- 分布式系统的开源合作不同于单机零碎
- 多机协同很难
- 很慢这个事件在分布式系统中很难定位
- 寻找使服务局部可用的伎俩
- 充分利用局部性原理
- 应用 CAP 原理来扫视你的分布式系统
- …
给分布式系统工程师的一些分布式实践
https://www.the-paper-trail.org/post/2014-08-09-distributed-systems-theory-for-the-distributed-systems-engineer/
博主给出了分布式系统的一个入门门路和参考资料:
- 第一步(First steps):举荐了一些书
- 故障和时序(Failure and Time):散布零碎中最重要的两个基石,给出了一些经典论文援用
- 容错的根本考量(The basic tension of fault tolerance):要做冗余以容错,但过分冗余又会节约性能
- 根本源语(Basic primitives):散布零碎中的一些基本概念论文链接,包含选举算法、一致性快照、共识协定、分布式状态机、播送、链式冗余。
- 一些工业零碎论文列表:谷歌的居多,非谷歌的也有一些
Meetup
Papers we love
PapersWeLove 计算机论文分享:https://www.zhihu.com/column/c_1353678180390162432
Microsoft-Distributed-System-Meetup
微软同学搞的一个分布式系统 meetup,包含 一块学 6.824、一块读 DDIA、有意思的主题演讲等等:https://microsoft-distributed-system-meetup.github.io/home/
Distributed Systems Reading Group
MIT 同学在 2013 年搞的一个论文浏览小组:http://dsrg.pdos.csail.mit.edu/papers/
包含共识协定、数据冗余、事务相干、并发问题等等。
The Last Thing
最初,附赠一个 github 上经典的 awesome 系列中,分布式系统的 repo:https://github.com/theanalyst/awesome-distributed-systems
我是青藤木鸟,一个喜爱摄影的程序员,欢送关注我的公众号:“木鸟杂记”。