我一直在研究a project,它是应用服务器和对象数据库的组合,目前仅在一台机器上运行。前段时间我读了a paper,它描述了一个分布式关系数据库,并得到了一些关于如何将该论文中的想法应用到我的项目中的想法,以便我可以使用shared-nothing architecture在集群上运行它的高可用性版本。
我的问题是,我没有设计分布式系统及其协议的经验 - 我没有参加大学分布式系统的高级CS课程。所以我担心能够设计一个协议,它不会导致死锁,饥饿,split brain和其他问题。
问题:在哪里可以找到有关设计分布式系统的好材料?有哪些方法可以验证分布式协议是否正常工作?欢迎提供书籍,学术文章和其他建议。
通过查看有关真正庞大的基于Web的平台的内容,特别是他们的系统如何随着时间的推移而发展以满足其增长,我学到了很多东西。
这里有一些我发现有启发性的例子:
关于此主题的更多资源的一个良好开端是“高可伸缩性”网站上的Real Life Architectures部分。例如,他们对Amazons架构有一个很好的总结。
学习分布式计算并不容易。它真的是一个非常广阔的领域,涵盖了通信,安全性,可靠性,并发性等领域,每个领域都需要数年才能掌握。理解最终会通过大量的阅读和实践经验来实现。你似乎有一个具有挑战性的项目,所以你有机会:)
关于分布式计算的两本最受欢迎的书籍,我相信:
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:我真的质疑你需要设计和验证一个新的协议。如果您正在使用应用程序服务器和数据库,那么您可能已经可以使用它。
我喜欢Andrew S. Tanenbaum和Maarten van Steen所着的“分布式系统:原理和范例”一书。
在一个更抽象和正式的层面上,Communicating and Mobile Systems: The Pi-Calculus的Robin Milner给出了验证系统的计算方法。有用于验证协议的pi演算的变体,例如SPI-calculus(维基百科页面自我上次看之后已经消失),以及implementations,其中一些也是验证工具。
我在哪里可以找到关于设计分布式系统的好材料?
我从未能完成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。
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。这些都具有可扩展性和可管理性(复制,容错,高可用性)的承诺。
一本好书是Birman的Reliable Distributed Systems,虽然它有批评者。
如果你想正式验证你的协议,你可以看看Lynch的Distributed Algorithms中的一些技术。
您之前尝试实施的任何协议都可能已经过设计和分析。我只是插上我自己的blog,它包括例如共识算法。