我一直致力于a project,它是应用程序服务器和对象数据库的组合,目前仅在一台计算机上运行。前段时间我读了a paper,它描述了一个分布式关系数据库,并得到了一些关于如何将该论文中的想法应用到我的项目中的想法,以便我可以在集群上运行它的高可用性版本使用shared-nothing architecture。
我的问题是,我没有设计分布式系统及其协议的经验 - 我没有参加大学分布式系统的高级CS课程。所以我担心能够设计一个不会导致死锁,饥饿,split brain和其他问题的协议。
问题:我在哪里可以找到有关设计分布式系统的好材料?有哪些方法可以验证分布式协议是否正常工作?欢迎提供书籍,学术文章和其他建议。
答案 0 :(得分:13)
通过查看有关真正庞大的基于网络的平台的内容,特别是他们的系统如何随着时间的推移而发展以满足其增长,我学到了很多东西。
这里有一些我发现有启发性的例子:
eBay Architecture:他们的建筑历史和他们遇到的问题。显然他们不能在拍卖和竞标中使用大量的缓存,所以他们的故事在这一点上与其他许多人不同。截至2006年,他们每两周部署100,000行新代码 - 如果出现问题,他们可以回滚正在进行的部署。
Paper on Google File System:很好地分析了他们需要什么,他们如何实现它以及它在生产中的表现如何。在阅读完本文之后,我发现自己构建部分基础架构以满足我的需求(如有必要)并不那么可怕,并且这样的解决方案可以而且可能应该非常简单和直接。在BigTable和MapReduce网络(包括YouTube视频)上也有很多有趣的东西,这是Google架构的其他重要部分。
Inside MySpace:构建在Microsoft堆栈上的为数不多的真正庞大的网站之一。您可以在数据层中了解很多不要做的内容。
有关此主题的更多资源的一个良好开端是“高可伸缩性”网站上的Real Life Architectures部分。例如,他们是Amazons架构的一个很好的总结。
答案 1 :(得分:9)
学习分布式计算并不容易。它真的是一个非常广阔的领域,涵盖了通信,安全性,可靠性,并发性等领域,每个领域都需要数年才能掌握。理解最终会通过大量的阅读和实践经验来实现。你似乎有一个具有挑战性的项目,所以你有机会:)
我相信有两本关于分布式计算的最受欢迎的书籍:
1)Distributed Systems: Concepts and Design - George Coulouris等人
2)Distributed Systems: Principles and Paradigms - A. S. Tanenbaum和M. Van Steen
这两本书都非常好地介绍了用于构建成功的分布式系统的当前方法(包括通信协议)。我个人主要使用后者,我发现它是一个很好的文本。如果您认为亚马逊上的评论不是很好,那是因为大多数读者将这本书与A.S.撰写的其他书籍进行比较。 Tanenbaum(IMO是计算机科学领域最好的作者之一),坦率地写得更好。
PS :我真的质疑您需要设计和验证新协议。如果您正在使用应用程序服务器和数据库,那么您可能已经可以使用它。
答案 2 :(得分:3)
我喜欢Andrew S. Tanenbaum和Maarten van Steen的书 Distributed Systems:Principles and Paradigms 。
答案 3 :(得分:2)
在更抽象和正式的层面上,Communicating and Mobile Systems: The Pi-Calculus Robin Milner为验证系统提供了一个微积分。有用于验证协议的pi演算的变体,例如SPI-calculus(自上次查看以来已经消失的维基百科页面),以及implementations,其中一些也是验证工具。
答案 4 :(得分:2)
在哪里可以找到有关设计分布式系统的优质材料?
我从未能完成Nancy Lynch的着名书籍。但是,我发现Sukumar Ghosh Distributed Systems: An Algorithmic Approach的这本书更容易阅读,如果需要,它会指向原始论文。
然而,我没有阅读Gerard Tel和Nicola Santoro的书籍。也许他们仍然更容易阅读...
有哪些方法可以验证分布式协议是否正常工作?
为了调查可能性(以及为了理解这个问题),我认为从书中Software Specification Methods概述可能的工具是有用的。
我最后的决定是学习TLA +。为什么?即使语言和工具看起来更好,我真的决定尝试TLA +因为它背后的人是Leslie Lamport。也就是说,不仅是分布式系统上的杰出人物,还有Latex的作者! 您可以免费获得TLA+ book和several examples。
答案 5 :(得分:1)
一本好书是Birman的Reliable Distributed Systems,虽然它有批评者。
如果您想正式验证协议,可以查看Lynch Distributed Algorithms中的一些技巧。
您之前尝试实施的任何协议都可能已经过设计和分析。我只需插入自己的blog,其中包括共识算法。
答案 6 :(得分:1)
Leslie Lamport撰写了许多经典论文: (http://research.microsoft.com/en-us/um/people/lamport/pubs/pubs.html)和Edsger Dijkstra (http://www.cs.utexas.edu/users/EWD/) 对于数据库方面。
主流是NoSQL运动,很多项目都出现在市场上,包括CouchDb(couchdb.apache.org),MongoDB,Cassandra。这些都具有可扩展性和可管理性(复制,容错,高可用性)的承诺。