16

我一直在做一个项目,它是一个应用服务器和一个对象数据库的组合,目前只在一台机器上运行。前段时间,我阅读了一篇描述分布式关系数据库的论文,并获得了一些关于如何将论文中的想法应用到我的项目中的想法,这样我就可以使用共享的集群创建一个运行在集群上的高可用性版本- 无架构

我的问题是,我没有设计分布式系统及其协议的经验——我没有在大学学习关于分布式系统的高级 CS 课程。所以我很担心能不能设计出一个不会造成死锁、饥饿、脑裂等问题的协议。

问题:我在哪里可以找到关于设计分布式系统的好资料?有哪些方法可以验证分布式协议是否正常工作?欢迎推荐书籍、学术文章等。

4

7 回答 7

13

I learned a lot by looking at what is published about really huge web-based plattforms, and especially how their systems evolved over time to meet their growth.

Here a some examples I found enlightening:

  • eBay Architecture: Nice history of their architecture and the issues they had. Obviously they can't use a lot of caching for the auctions and bids, so their story is different in that point from many others. As of 2006, they deployed 100,000 new lines of code every two weeks - and are able to roll back an ongoing deployment if issues arise.

  • Paper on Google File System: Nice analysis of what they needed, how they implemented it and how it performs in production use. After reading this, I found it less scary to build parts of the infrastructure myself to meet exactly my needs, if necessary, and that such a solution can and probably should be quite simple and straight-forward. There is also a lot of interesting stuff on the net (including YouTube videos) on BigTable and MapReduce, other important parts of Google's architecture.

  • Inside MySpace: One of the few really huge sites build on the Microsoft stack. You can learn a lot of what not to do with your data layer.

A great start for finding much more resources on this topic is the Real Life Architectures section on the "High Scalability" web site. For example they a good summary on Amazons architecture.

于 2009-02-08T13:51:19.820 回答
10

学习分布式计算并不容易。它确实是一个非常广阔的领域,涵盖了通信、安全性、可靠性、并发性等领域,每个领域都需要数年时间才能掌握。理解最终会通过大量的阅读和实践经验来实现。你似乎有一个具有挑战性的项目开始,所以这是你的机会:)

我相信,关于分布式计算的两本最受欢迎的书是:

1)分布式系统:概念与设计- George Coulouris 等人。

2)分布式系统:原理和范式- AS Tanenbaum 和 M. Van Steen

这两本书都很好地介绍了当前用于构建成功的分布式系统的方法(包括通信协议)。我个人主要使用后者,我发现它是一个很好的文本。如果您认为亚马逊上的评论不是很好,那是因为大多数读者将这本书与 AS Tanenbaum(IMO 是计算机科学领域最好的作者之一)写的其他书进行比较,坦率地说,这些书写得更好。

PS:我真的怀疑您是否需要设计和验证新协议。如果您正在使用应用程序服务器和数据库,那么您所需要的可能已经可用。

于 2009-02-08T06:48:25.587 回答
3

我喜欢Andrew S. Tanenbaum 和 Maarten van Steen所著的《分布式系统:原理和范式》一书。

于 2009-02-07T17:59:18.727 回答
2

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

我一直没能读完南希·林奇的名著。但是,我发现 Sukumar Ghosh分布式系统:一种算法方法的书更容易阅读,如果需要,它会指向原始论文。

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

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

为了调查可能性(也为了理解问题),我认为从软件规范方法一书中了解可能的工具是有用的。

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

于 2013-03-28T20:04:45.177 回答
2

在更抽象和正式的层面上,通信和移动系统: Robin Milner的 Pi-Calculus提供了用于验证系统的微积分。有用于验证协议的 pi-calculus 的变体,例如 SPI-calculus(自从我上次查看以来,维基百科页面已经消失)和implementations,其中一些也是验证工具。

于 2009-02-07T18:33:44.913 回答
1

One good book is Birman's Reliable Distributed Systems, although it has its detractors.

If you want to formally verify your protocol you could look at some of the techniques in Lynch's Distributed Algorithms.

It is likely that whatever protocol you are trying to implement has been designed and analysed before. I'll just plug my own blog, which covers e.g. consensus algorithms.

于 2009-02-08T14:00:51.250 回答
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。这些都具有可扩展性和可管理性(复制、容错、高可用性)的承诺。

于 2011-05-05T02:25:46.457 回答