如何设计和验证分布式系统?

问题描述 投票:16回答:7

我一直在研究a project,它是应用服务器和对象数据库的组合,目前仅在一台机器上运行。前段时间我读了a paper,它描述了一个分布式关系数据库,并得到了一些关于如何将该论文中的想法应用到我的项目中的想法,以便我可以使用shared-nothing architecture在集群上运行它的高可用性版本。

我的问题是,我没有设计分布式系统及其协议的经验 - 我没有参加大学分布式系统的高级CS课程。所以我担心能够设计一个协议,它不会导致死锁,饥饿,split brain和其他问题。

问题:在哪里可以找到有关设计分布式系统的好材料?有哪些方法可以验证分布式协议是否正常工作?欢迎提供书籍,学术文章和其他建议。

distributed protocols high-availability formal-verification
7个回答
13
投票

通过查看有关真正庞大的基于Web的平台的内容,特别是他们的系统如何随着时间的推移而发展以满足其增长,我学到了很多东西。

这里有一些我发现有启发性的例子:

  • eBay Architecture:他们的建筑历史和他们遇到的问题。显然他们不能在拍卖和竞标中使用大量的缓存,所以他们的故事在这一点上与其他许多人不同。截至2006年,他们每两周部署100,000条新代码 - 如果出现问题,它们可以回滚正在进行的部署。
  • Paper on Google File System:很好地分析了他们需要什么,他们如何实现它以及它在生产中的表现如何。在阅读完本文之后,我发现自己构建部分基础架构以满足我的需求(如有必要)并不那么可怕,并且这样的解决方案可以而且可能应该非常简单和直接。在BigTable和MapReduce网络(包括YouTube视频)上还有很多有趣的东西,这是Google架构的其他重要部分。
  • Inside MySpace:在Microsoft堆栈上构建的为数不多的真正庞大的站点之一。您可以了解很多与数据层无关的内容。

关于此主题的更多资源的一个良好开端是“高可伸缩性”网站上的Real Life Architectures部分。例如,他们对Amazons架构有一个很好的总结。


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:我真的质疑你需要设计和验证一个新的协议。如果您正在使用应用程序服务器和数据库,那么您可能已经可以使用它。


3
投票

我喜欢Andrew S. Tanenbaum和Maarten van Steen所着的“分布式系统:原理和范例”一书。


2
投票

在一个更抽象和正式的层面上,Communicating and Mobile Systems: The Pi-CalculusRobin Milner给出了验证系统的计算方法。有用于验证协议的pi演算的变体,例如SPI-calculus(维基百科页面自我上次看之后已经消失),以及implementations,其中一些也是验证工具。


2
投票

我在哪里可以找到关于设计分布式系统的好材料?

我从未能完成Nancy Lynch的着名书籍。但是,我发现Sukumar Ghosh Distributed Systems: An Algorithmic Approach的这本书更容易阅读,如果需要,它指的是原始论文。

尽管如此,我还是没有读过Gerard TelNicola Santoro的书。也许它们仍然更容易阅读......

有哪些方法可以验证分布式协议是否正常工作?

为了调查可能性(以及为了理解这个问题),我认为从Software Specification Methods这本书中概述可能的工具是有用的。

我最后的决定是学习TLA +。为什么?即使语言和工具看起来更好,我真的决定尝试TLA +因为它背后的人是Leslie Lamport。也就是说,不仅是分布式系统上的杰出人物,还有Latex的作者!你可以免费获得TLA+ bookseveral examples


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。这些都具有可扩展性和可管理性(复制,容错,高可用性)的承诺。


1
投票

一本好书是Birman的Reliable Distributed Systems,虽然它有批评者。

如果你想正式验证你的协议,你可以看看Lynch的Distributed Algorithms中的一些技术。

您之前尝试实施的任何协议都可能已经过设计和分析。我只是插上我自己的blog,它包括例如共识算法。

© www.soinside.com 2019 - 2024. All rights reserved.