除了以上经典的分布式系统外,还有很多其他分布式计算项目,它们通过分布式计算来构建分布式系统并实现特定项目目标。
● Climateprediction.net:模拟百年以来的全球气象变化,并计算未来地球气象,以对付未来可能遭遇的灾害性天气。
● Quake-Catcher Network:借助笔记本计算机中内置的加速度计,以及一个简易的小型USB微机电强震仪(传感器),创建一个大的强震观测网。可用于地震的实时警报或防灾、减灾等相关的应用。
● World Community Grid:帮助查找人类疾病的治疗方法和改善人类生活的相关公益研究,包括艾滋病、癌症、流感病毒等疾病及水资源复育、太阳能技术、水稻品种的研究等。
● Einstein@Home:2005年开始的项目,目的是找出脉冲星的引力波,验证爱因斯坦的相对论预测。
● FightAIDS@home:研究艾滋病的生理原理和相关药物。
● Folding@home:了解蛋白质折叠、聚合以及相关疾病。
● GIMPS:寻找新的梅森素数。
● Distributed.net:2002年10月7日,以破解加密术而著称的Distributed.net宣布,在经过全球33.1万名计算机高手共同参与并苦心研究4年之后,已于2002年9月中旬破解了以研究加密算法而著称的美国RSA数据安全实验室开发的64位密匙——RC5-64密匙。
上述分布式计算项目或系统只是其中部分经典系统,随着互联网的飞速发展,近年来涌现出很多著名的系统与项目,读者可以查阅相关论文和技术文档以深入学习其技术原理。下面列出分布式系统领域一些经典的系统(论文),供大家学习参考。
1)The Google File System。这是分布式文件系统领域具有划时代意义的论文,文中的多副本机制、控制流与数据流隔离和追加写模式等概念几乎成为分布式文件系统领域的标准,Apache Hadoop的HDFS就是GFS的模仿之作。
2)MapReduce:Simplified Data Processing on Large Clusters。这篇论文也来自Google,通过Map和Reduce两个操作大大简化了分布式计算的复杂度,使任何需要的程序员都可以编写分布式计算程序,其中用到的技术值得我们好好学习。Hadoop也根据这篇论文做了一个开源的MapReduce。
3)BigTable:A Distributed Storage System for Structured Data。Google在NoSQL领域的分布式表格系统,LSM树的最好使用范例,广泛用到了网页索引存储、YouTube数据管理等业务,Hadoop对应的开源系统为HBase。
4)The Chubby lock service for loosely-coupled distributed systems。Google的分布式锁服务,基于Paxos协议,这篇文章相比于前三篇可能知道的人较少,但是其对应的开源系统ZooKeeper几乎每个后端程序员都接触过,其影响力其实不亚于前3个系统。
5)Finding a Needle in Haystack:Facebook's Photo Storage。Facebook的在线图片存储系统,目前来看是对小文件存储的最好解决方案之一,Facebook目前通过该系统存储了超过300PB的数据。
6)Windows Azure Storage:a highly available cloud storage service with strong consistency。关于Windows Azure的总体介绍文章,是一篇很好的描述云存储架构的论文,其中通过分层来同时保证可用性和一致性的思路在现实工作中也给了我们很多启发。
7)GraphLab:A New Framework for Parallel Machine Learning。CMU基于图计算的分布式机器学习框架,目前已经成立了专门的商业公司,在分布式机器学习方面成绩显著,其单机版的GraphChi处理百万维度的矩阵分解只需要2~3min。
8)Resilient Distributed Datasets:A Fault-Tolerant Abstraction for In-Memory Cluster Computing。其实就是Spark——目前流行的内存计算模式,通过RDD和lineage大大简化了分布式计算框架,通常几行scala代码就可以解决原来上千行MapReduce代码才能搞定的问题,大有取代MapReduce的趋势。
9)Scaling Distributed Machine Learning with the Parameter Server。百度李沐的大作,目前在大规模分布式学习方面,各家公司主要都是使用ps,ps具备良好的可扩展性,使得大数据时代的大规模分布式学习成为可能,Google的深度学习模型也是通过ps训练实现的,是目前最流行的分布式学习框架,豆瓣的开源系统paracell也是ps的一个实现。
10)Dremel:Interactive Analysis of Web-Scale Datasets。Google的大规模(近)实时数据分析系统,号称可以在3s内响应1PB数据的分析请求,内部使用查询树来优化分析速度,其开源实现为Drill,在工业界实时数据分析方面也比较有影响力。
11)Pregel:a system for large-scale graph processing。Google的大规模图计算系统,相当长一段时间是Google PageRank的主要计算系统,对开源的影响也很大(包括GraphLab和GraphChi)。
12)Spanner:Google's Globally-Distributed Database。这是第一个全球意义上的分布式数据库。其中介绍了很多一致性方面的设计考虑,简单起见,还采用了GPS和原子钟来确保时间最大误差在20ns以内,保证了事务的时间序,同样在分布式系统方面具有很强的借鉴意义。
13)Dynamo:Amazon's Highly Available Key-value Store。Amazon的分布式NoSQL数据库,作用相当于BigTable对于Google,与BigTable不同的是,Dynamo保证CAP中的AP,C(一致性)通过vector clock保证,对应的开源系统为Cassandra。
14)S4:Distributed Stream Computing Platform。Yahoo出品的流式计算系统,目前最流行的两大流式计算系统之一,Yahoo的主要广告计算平台。
15)Storm @Twitter。Storm起源于Twitter开源的一个类似于Hadoop的实时数据处理框架,Hadoop是批量处理数据,而Storm处理的是实时数据流。Storm开启了流式计算的新纪元,是很多公司实现流式计算的首选。