左耳听风_083_82_程序员练级攻略分布式架构经典图书和论文
你好,我是陈浩网名猪耳朵house.这节课呢我主要是想给你推荐一些分布式架构的经典图书和论文。
首先呢我推荐几本分布式架构方面的经典图书,第一本呢叫做distributed systems for final profit.那这是一本免费的电子书。
作者撰写这本书的目的啊,是希望用一种更容易理解的方式讲述以亚马逊的dynamo, google的big table,还有MAREDDS等等为代表的分布式系统背后的核心思想。
第二本叫做designing data intensive applications.这本书啊是一本非常好的书。
我们知道在分布式的世界里,数据节点的扩展是一件非常麻烦的事儿。
那这本书啊深入浅出的用了很多的工程案例,讲解了如何让数据节点做扩展。
作者,马丁科勒普曼在分布式数据系统领域啊有着很深的功底。
他在这本书里啊完整梳理了各类纷繁复杂的设计,背后的技术逻辑,不同架构之间的妥协与超越,很值得开发人员与架构设计者阅读。
那这本书深入到betree SS tables LSM这类数据存储结构当中,并且呢从外部的视角来审视这些数据结构对no sql和关系型数据库的影响。
那这本书啊可以让你很清楚的了解到,在真实世界的大数据架构当中,数据分区数据复制的一些坑,并提供了很好的解决方案。
那最赞的是作者将各种各样技术的本质非常好的关联在一起,令你触类旁通。
而且这本书啊完全就是抽丝剥茧,循循善诱。
从提出问题到解决问题,再到解决方案,再到优化方案,以及对比不同的方案,一点一点的把非常晦涩的技术和知识展开。
那这本书的引用啊也是相当多的,每章后面都有几百个reference.那通过这些reference,你可以看到更为广阔、更为精彩的世界。
第三本书呢叫做distributed systems, principle and paralines.那这本书呢是由计算机科学家安德鲁斯图尔特、塔伦鲍姆和他的同事马丁范斯蒂恩合力撰写的,是分布式系统方面的经典教材。
它里面的语言简洁,内容通俗易懂,介绍了分布式系统的七大核心原理啊,并给出了大量的例子。
同时呢也系统讲述了分布式系统的概念和技术,包括通信进程命名、同步化、一致性和复制,还有容错和安全啊等等。
他呢还讨论了分布式应用的开发方法,但是这本书啊不是一本指导如何做的手册啊,它仅仅适合系统性的学习基础知识,并了解编写分布式系统的基本原则和逻辑。
那它的中文翻译版呢叫做分布式系统原理与泛型。
第四本书叫做scalalable web architecture and distributy systems.那这是一本免费的在线小册子,它的中文翻译版叫做可扩展的外部架构和分布式系统。
那这本书主要是针对面向互联网的分布式系统,但是其中的原理啊或许也可以应用在其他的分布式系统设计当中。
在书中呢作者提出的一个观点啊,就是通过了解大型网站的分布式架构原理,小型网站的构建呢也能从中受益。
这本书从大型互联网系统的常见特性啊,比如说高可用、高性能、高可靠、易管理等出发,引出了一个类似于flickard典型的大型图片网站的例子。
最后呢第五本书叫做principles of distict beauty systems.那这本书是苏黎世联邦理工学院的教材,他讲述了多种分布式系统里面会用到的算法。
那虽然分布式系统的不同场景会用到不同的算法,但是呢并不表示这些算法都会被用到。
不过呢作为学生来说,掌握了算法设计的精髓,也就能举一反三的设计出解决其他问题的算法,从而得到分布式系统架构设计中所需要的算法。
那除了这些图书之外呢,我再介绍一些经典的论文。
要想了解分布式模型当中最难的分布式事务,你需要看一看google f engine的联合创始人瑞恩巴雷特在二零零九年的goole IO大会上的演讲transaction across data center.在这个演讲当中啊,巴雷特讲述了各种经典的解决方案,如何在一致性、事物性能还有错误上面做平衡。
最后呢他讨论了为什么分布式系统的事务只有pixel算法是最好的。
那文中这个图呢就是这个算法中的结论,你也可以一步看一下我在酷shl上写的分布式系统的事务处理这篇文章。
然后呢,是paxels一致性算法。
那paxel算法呢是莱斯利兰伯特在一九九零年提出来的一种基于消息传递,并且具有高度容错特性的一致性算法。
但是呢这个算法太过于晦涩了,所以它一直以来啊都属于理论上的论文性质的东西。
那它真正进入工程圈啊,主要是来源于google的一个分布式锁服务。
Charbby lock它用在了big table中,直到google发布了文中这两篇论文,pixos才进入到工程界的视野中来。
Google与bk table相起名的还有另外两篇论文,我在文中呢也给你列了出来。
不过呢这几篇文章中啊并没有讲太多的pixel算法上的细节,反而是在paxel made live a legenerary perspective.这篇论文当中提到了很多工程实件的细节。
这篇论文详细的解释了google在实现paacelce的时候遇到的各种问题和解决方案,讲述了从理论到实际应用,二者之间巨大的鸿沟。
Pixel算法的原码论文比较晦涩,也不易懂。
那这里呢我推荐一篇比较容易读的叫做need algorithms. Pixel这篇文章中啊,还有一些小动画帮助你来读懂。
那还有一篇可以帮你理解的文章呢,叫做pixils by examples啊,因为pixel算法太过于晦涩了,而且在实际的实现上有太多的坑不太容易写。
对,所以呢就有人搞出了另外一个一致性的算法叫raft.那它的原始论文啊叫做insearch of another standable consensus orgythm它的中文翻译啊叫做寻找一种易于理解的rax算法。
那这篇论文的译文在音波q上题目叫做raft一致性算法论文译文推荐你读一读。
那这里呢我在文中放了几个不错的raft算法的动画演示的链接。
你有兴趣呢可以看一看。
在后面呢业内又搞出了一些工程上的东西,比如说amazon的dynamo DB,他的论文dynamo amazon highly available key value store,影响力非常大。
这篇论文讲述了amazon的dynamo DB是如何满足系统的高可用、高扩展和高可靠的那其中也展示了系统架构是如何做到数据分布和数据一致性的。
Gfs采用的是查表式的数据分布,而dynamo DB呢采用的是计算式的啊,也是一个改进版的,通过虚拟节点来减少增加节点,带来数据迁移的一致性哈希。
这篇文章里啊有几个关键的概念,一个叫做vector clock,另一个呢是gotip协议。
那接着呢我再给你推荐几篇相关的文章,第一篇叫做time clocks at the ordering of events in the distributy system.这篇文章是莱斯利朗伯特在一九七八年发表的,并在二零零七年选入了SOSP的名人堂,被誉为第一篇真正的分布式系统论文。
那这篇论文啊曾一度成为计算机科学史上被引用最多的文章。
在分布式系统中啊,时钟同步是一个非常难的问题,因为分布式系统是使用消息来进行通信的那如果使用物理时钟来进行同步啊,一方面是不同的process的时钟有差异,那另一方面是时间的计算也有一定的误差。
那这样的话,如果有两个时间相同的事件,就无法区分他们谁前谁后了。
那这篇文章呢就主要解决了分布式系统当中呢始终同步的问题。
那第二个呢是马赛诸塞大学的课程,distributed operating system里面的第十节clock synchronization.那这篇讲义呢讲述了时钟同步的问题。
另外啊就是关于vector clock,你可以看一下why vector clocks are easy,还有why vector clocks are hard这两篇文章。
那接下来啊我们聊一聊用来做数据同步的conssip协议,它的原始论文呢叫做efficient recognization and flow control for antananphc protocols. Gossip算法也是conandre使用的数据复制协议。
那这个协议呢就像八卦和谣言传播一样,可以一传十,十传百的传播。
开这个协议看似简单,但细节上呢却非常麻烦。
Gotip协议呢也是no sql数据库consenal中使用到的数据协议。
你可以上youtube上看一下这个视频,介绍关于gossip的一些图示化的东西呢。
你可以看一下动画叫做gossip visualization.那对于分布式存储和数据库啊,除了前面google的bigtable和google fill system两篇论文,以及mazon的dynamd b的论文。
那还有其他几篇啊,也是要读一下的。
我在文中呢都给你罗列了出来。
而对于分布式消息系统啊,我推荐三篇相关的论文。
首先你一定要读一下卡夫卡的这篇论文,叫做卡kafa a distributed messaging system for log processing.然后呢,你还要读一下warm hole level of sub to support jail, replicated internet services. Warm o啊是facebook内部使用的一个pop sum系统,目前呢还没有开源,它和卡夫卡之类的消息中间件很类似。
但是呢它又不像其他的卡布萨姆系统翁后,他没有自己的存储来保存消息。
那它呢也不需要数据源,在原有的更新路径上去插入一个操作来发送消息啊,它是非侵入式,它直接部署在数据源的机器上,并直接扫描数据源的transaction logs.那这样呢还带来一个好处,就是我们后本身呢不需要做任何地域复制策略,只需要依赖于数据源的javl replication策略就可以了。
另外呢,我还推荐你读一下all about the data bus linding scalleable consistent change data capture platform.在投投稿lindds OCC二零一二的这篇论文里,作者呢提出了要支持对于不同数据源的抽取,允许不同数据源抽取器的开发和接入,只需要这个抽取器遵循设计规范就可以了。
那这个规范的一个重要方面呢,就是每个数据变化都必须被一个单调递增的数字标注用于同步。
那这其中的一些方法完全可以用作异地双活的系统架构当中。
在文中啊,我还附上了这篇论文相关的几个链接,供你阅读对于日志和数据方面的内容啊,我推荐接下来这四篇论文,第一篇呢叫做the log what every software engineer should know about real time datas unifinal abstruction这篇文章很长啊,不过呢它是一篇非常好,非常好的文章,这是每个工程师都应该知道的事儿。
你一定要看一看,你呢也可以看中译版叫做日志。
每个软件工程师都应该知道关于有关实时数据的统一概念。
第二篇论文叫做the lock structures more tree啊,也就是LSM tree.在n多年前啊,google发表了big table的论文,论文中有很多很酷的方面。
呃,其中之一呢就是他所使用的文件组织方式。
那这个方法更通用的名字啊,就叫做log structure tomattree.那现在呢有很多产品都用了LSM这个文件结构策略啊,包括h base kssandra、 level、 DB,还有circulight.甚至呢在mango DB三点零里面也带了一个可选的LSM引擎。
那LSM有趣的地方呢在于它抛弃了大多数数据库所使用的传统文件组织方法。
实际上当你第一次看他的时候啊,是违反直觉的那这篇论文呢可以让你明白这个技术第三篇论文叫做immutiability changes everything.这篇论文是现任salesfalse软件架构师帕特赫兰德在CIDR二零一五大会上发表的。
第四篇论文呢叫做tango distributed data structures of a sheltalog.那这个论文啊非常经典,其中说明了不可变性架构设计的优点。
随着为海量数据集存储和计算而设计的以数据为中心的新型抽象技术的出现,分布式系统呢比以往任何时候都更容易构建。
但是对于原数据的存储和访问不存在类似的抽象。
那为了填补这一空白啊,tango给开发人员提供了一个由共享日志支持的内存复制数据结构的抽象。
Tango对象易于构建和使用。
通过共享日志上简单的追加和读取操作来复制状态啊,而不是复杂的分布式协议。
在这个过程中啊,他们从共享日志当中获得了比如线性化、持久性,还有高可用性的属性。
那tango呢还利用共享日志实施跨不同对象的快速事务处理,它允许应用程序跨机器进行状态划分,并在不牺牲一致性的情况下扩展到底层日志的上限。
那接着呢我推荐google的分布式跟踪监控论文叫做deaper a large scale distributed system tracing infrastructure.那它的开源实现呢有三个,分别是ZV、 king、 pinpoint,还有h trace.那我个人呢更喜欢safty.另外呢,对于数据分析相关内容啊,我想让你读一读以下这四篇论文。
那第一篇呢,是twitter公司的一篇关于日志架构和数据分析的论文。
The unified logging infrastructure for data analysts that twitter第二篇论文scale用big data by infrastructure the twitter experience.他描述了twitter公司的数据分析平台,在数据量越来越大,架构越来越复杂,业务需求越来越多的情况之下,数据分析从头到底是怎么做的?第三篇论文呢是drama, interactive analyst is a web scale data sets. Google公司的java是一个针对临时查询提供服务的系统。
那他处理了是只读的多层数据。
那这篇文章介绍了它的架构与实现,还有它和MAPREDCE是如何互补的。
最后啊第四篇论文叫做resident distribubeauty datassets, a false tolerant abstruction or in memory cluster computing.这篇论文提出了弹性分布式数据集的概念。
那它呢是一个分布式存储抽象,使得程序员可以在大型集群上以容错的方式执行内存计算。
而且啊还解释了它的出现原因啊,就是解决之前计算框架在迭代算法和交布式数据挖掘工具两种应用场景下处理效率低下的问题。
那同时呢他也指出将数据保存在内存里,可以将性能提高一个数量级。
同时呢,它也阐述了它的实现原理和应用场景等多方面内容,很有趣儿推荐你读一读。
那最后呢我还给你列出了与编程相关的四篇论文,还有三篇其他的分布式论文都非常值得一读。
好了,这节课到这里呢就结束了。
我们来总结一下今天分享的内容啊是分布式架构方面的经典图书和论文。
并且啊我也给出了导读文字,嗯,几乎涵盖了分布式系统架构方面所有关键的理论知识。
这些内容呢非常重要。
他们是学好分布式架构的基石,请一定要认真的学习。
在下节课呢,我们将讲述分布式架构工程设计方面的内容啊,包括设计原则、设计模式,还有工程实践等方面的内容,敬请期待。