我一直在研究一个项目,它是一个应用程序服务器和一个对象数据库的组合,目前只在一台机器上运行.前段时间我读了一篇描述分布式关系数据库的论文,并对如何将该论文中的想法应用到我的项目中提出了一些想法,以便我可以使用共享在集群上运行它的高可用性版本- 没什么架构.
我的问题是,我没有设计分布式系统及其协议的经验 - 我没有参加大学分布式系统的高级CS课程.因此我担心能够设计一个不会导致死锁,饥饿,裂脑和其他问题的协议.
问题:在哪里可以找到有关设计分布式系统的好材料?有哪些方法可以验证分布式协议是否正常工作?欢迎提供书籍,学术文章和其他建议.
通过查看有关真正庞大的基于Web的平台的内容,特别是他们的系统如何随着时间的推移而发展以满足其增长,我学到了很多东西.
这里有一些我发现有启发性的例子:
易趣架构:他们的建筑历史和他们遇到的问题.显然,他们不能在拍卖和竞标中使用大量的缓存,因此他们的故事与其他许多人的故事不同.截至2006年,他们每两周部署100,000条新代码 - 如果出现问题,它们可以回滚正在进行的部署.
Google文件系统上的论文:很好地分析了他们需要什么,他们如何实现它以及它在生产中的表现如何.在阅读完本文之后,我发现自己构建部分基础架构以满足我的需求(如有必要)并不那么可怕,并且这样的解决方案可以而且可能应该非常简单和直接.在BigTable和MapReduce网络(包括YouTube视频)上还有很多有趣的东西,这是Google架构的其他重要部分.
在MySpace内部:在Microsoft堆栈上构建的为数不多的真正巨大的站点之一.您可以了解很多与数据层无关的内容.
"高可伸缩性"网站上的Real Life Architectures部分是寻找更多关于此主题资源的良好开端.例如,他们对亚马逊建筑有了很好的总结.
学习分布式计算并不容易.它真的是一个非常广阔的领域,涵盖了通信,安全性,可靠性,并发性等领域,每个领域都需要数年才能掌握.理解最终会通过大量的阅读和实践经验来实现.你似乎有一个具有挑战性的项目,所以你有机会:)
关于分布式计算的两本最受欢迎的书籍,我相信:
1)分布式系统:概念和设计 - George Coulouris等.
2)分布式系统:原理和范例 - AS Tanenbaum和M. Van Steen
这两本书都非常好地介绍了用于构建成功的分布式系统的当前方法(包括通信协议).我个人主要使用后者,我发现它是一个很好的文本.如果您认为亚马逊上的评论不是很好,那是因为大多数读者将这本书与AS Tanenbaum(IMO是计算机科学领域最好的作者之一)撰写的其他书籍进行了比较,这些书籍非常坦率.
PS:我真的质疑你需要设计和验证一个新的协议.如果您正在使用应用程序服务器和数据库,那么您可能已经可以使用它.