共享内存系统是普通单机程序开发人员熟悉的开发范式,通过简单的使用读、写命令,就能确保将我们需要的值在内存中进行输入和读取。数据的一致性等问题,在单机系统中,开发人员根本不需要考虑。然而在分布式环境下,由于数据出现多个副本,且副本的数量有可能动态增加或减少,要实现同样的功能,又要保证读写性能,就需要新的算法和实现。本文介绍了分布式环境下实现共享内存模型会遇到的问题和挑战,针对不同问题,介绍多种算法,并比较其优劣性。本文是对现阶段该领域研究现状的总体介绍,通过阅读该文,我们能了解动态分布式共享内存研究的前沿状况,了解该领域的挑战与机遇。
所谓3R(Reading、wRiting、aRithmetic)依然是大多数人类智力活动的基础,同时,3R也是现代计算科技的重要组成部分。实际上,无论图灵机还是冯 · 诺依曼体系,都遵循读、写、算模型,所有投入实际使用的单处理器实现,都基于3R进行工作。随着网络科技的发展,通信虽然成为了重要系统活动,但在高层次的抽象上,使用读、写、算模型进行思考仍然显然更为自然。
理想的系统必须具备一定的容错性,同时系统必须支持大量并发访问。唯一能保证可用性的方法只有冗余,也就是说使用多个服务器制造对象内容的副本。由于所有节点都有可能被更换,因此存储系统必须提供数据的实时无缝迁移。
由数据副本带来的主要问题是一致性问题,一致性的概念通过原子性或者等效的线性一致性来实现。
原子性是最强大的一致性概念,同时实现代价也比较高,Eric Brewer的CAP定理已证明没有分布式系统可以完全同时实现一致性、可用性、分区容忍性;尽管如此,在某些限定情况下,实现简单和直观的原子一致性仍然非常必要。
基础工具:静态化网络系统条件下的共享内存系统
静态环境下的方法可以作为我们动态系统的基础工具,然而为静态系统设计的算法不能被直接用于动态系统,因为他们缺乏处理拷贝集合变化的能力。
能够处理共享内存的ABD算法实现了原子内存,拷贝的同时提升了容错能力和可用性。给定的总拷贝数是n,系统能够容忍 f 个拷贝失效,n>2f。
在动态网络环境中模拟共享内存系统
动态系统的节点可能随时退出或加入服务。ABD算法不能应用在这个场景中,因为它是建立在原有的拷贝主机集合一直可用的基础上。为了能够在动态环境中使用类似ABD方法,必须要提供方法对复制主机的集合进行管理,并保证阅读者和写入者能访问可用的集合。
我们首先从获取共识的问题开始,因为它通过建立共同的操作顺序,为实现内存服务的原子性提供了自然的基础。其次,我们将提出组通信服务(GCS)解决方案:使用强通信原语,比如完全排序广播来对操作排序。最后,我们聚焦一些方法,这些方法通过用显式的拷贝主机集合管理,可以用于扩展ABD算法至动态环境。
共识:在分布式环境中如何协调并达成一致是计算机科学的基本问题。在分布式环境下达成一致的问题被称作共识问题。由于不同节点提供了多个参考值,一组进程需要对该值达成一致。
共识算法可以应用于原子化的数据服务,我们只需要让参与者对全局所有操作顺序取得一致。但对于每个操作都使用共识是一个笨拙的实现方式,特别是一些干扰会延迟甚至阻止操作终止。
组通信服务(GCS):在分布式系统中最重要的基础材料就是GCS,GCS使得在不同节点上运行的操作共同以组的方式工作。操作通过GCS多播服务发送消息到所有组成员以实现分组协作。GCS负责保证消息传输的顺序和可靠性。
GCS通过基于视图及虚拟同步技术的有序组播来实现动态网络的共享内存。这种解决方案的主要缺点是对大多数GCS实现,形成一个新的视图需要大量时间,即使只有一个节点故障,性能下降也非常明显。
dynastore算法:dynastore是多写入者/多阅读者动态原子存储服务的实现。它集成了ABD算法,并允许副本主机集合重构,而且不需要共识的使用。另一方面,向配置中增加和删除单个节点,可能导致较大开销,与之相比,直接用一个完整的配置替换原有配置性能可能更高。所以读写操作的延迟更依赖重构的速度。
从理论到实践
我们在这里介绍并评估两个实现。第一是从Rambo算法思想派生的分布式磁盘阵列。第二是基于dynastore算法的实现。
FAB:联合砖块阵列(FAB)是由HP实验室开发和评估的存储系统,FAB系统中使用的计算机被称为“砖块(brick)”,通常配备普通商用的磁盘和网络接口。为实现分布,FAB将存储切为若干逻辑存储块,使用擦除码(erasure-coding)算法复制每个逻辑块到bricks子集。
对FAB实现的评估结果表明,FAB性能类似于集中式的解决方案,同时能提供连续的服务和高可用性。
ynadisk:ynadisk是用于评估的dynastore算法实现,其设计支持在无共识的条件下重新配置服务,或采用共识进行部分同步。
评估结果表明,在无重构的情况下,两个版本算法有着类似的读写延迟,当多个重构同时发生时,异步无共识方法的延迟有明显增加。
讨论
本文中提到的方法只是众多分布式存储服务实现方法的代表。这些方法,每一个都有其优缺点。基于共识的解决方案,虽然概念简单,但通常需要协调员的参与以获取共识,其性能可能会严重依赖于可用的协调员。组通信服务(GCS)是构建高可用性低延迟网络中的有效工具,但当视图发生变化时开销很高,理论上更加优雅的方法,比如dynastore、Rambo、GeoQuorums,虽然实现更复杂,但具有更大的灵活性。
何时进行重构也是必须解决的挑战。例如,在任意一个节点加入或退出服务都要求进行重构。但当节点不断加入和离开服务时,这种方法可能会造成不必要的开销。另一种方法是把决策权交给另一个分布式服务,通过观察和推理性预判,找到重构的最佳时机。
一致性存储系统一直是活跃的研究方向,一旦出现具有优越的容错性以及高性能的动态存储系统,将在构建复杂的分布式应用程序中发挥重要的作用。分布式应用程序对一致性和高性能的需求将不断催生对原子的读/写存储器需求。(译者:朱燚)
本文选编自CACM 2014年6月刊《Implementing Distributed Shared Memory for Dynamic Networks》。
原文链接:http://cacm.acm.org/magazines/2014/6/175173-implementing-distributed-shared-memory-for-dynamic-networks/fulltext 。
译文全文链接:http://blog.csdn.net/yizhu2000/article/details/37594703