在动态网络下实现分布式共享存储

摘要:本文介绍了分布式环境下实现共享内存模型会遇到的各种问题和挑战,并针对不同问题介绍多种算法的优劣性。本文是对现阶段该领域研究现状的总体介绍,通过本文能了解动态分布式共享内存研究的前沿状况、挑战与机遇。

共享内存系统是普通单机程序开发人员熟悉的开发范式,通过简单的使用读、写命令,就能确保将我们需要的值在内存中进行输入和读取。数据的一致性等问题,在单机系统中,开发人员根本不需要考虑。然而在分布式环境下,由于数据出现多个副本,且副本的数量有可能动态增加或减少,要实现同样的功能,又要保证读写性能,就需要新的算法和实现。本文介绍了分布式环境下实现共享内存模型会遇到的问题和挑战,针对不同问题,介绍多种算法,并比较其优劣性。本文是对现阶段该领域研究现状的总体介绍,通过阅读该文,我们能了解动态分布式共享内存研究的前沿状况,了解该领域的挑战与机遇。

所谓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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集合拷贝通用方法、list<A> 转换成 list<B> (属性相同)

拷贝2个拥有相同属性的集合实现: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 package com.hydbest.app.lbd.marketing.common.utils;import com.alibaba.fastjson.JSON…

Linkedln技术高管Jay Kreps:Lambda架构剖析

摘要:Jay Kreps是Linkedln的一名在线数据架构技术高管,在日常工作中,Jay Kreps经常被问及有关Lambda架构的问题,为此他结合实际经验和个人体会,针对Lambda架构进行深度剖析,分析了它的优缺点以及采用的替代…

JWT ( JSON Web Token ) 入门教程

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后&#x…

优秀程序员必备的15大技能

编程是个很复杂的玩意,但是成就优秀程序员的很多因素和我们在学校中早期学到的相差无几。本文灵感来源于Robert Fulghum的《All I Really Need to Know I Learned in Kindergarten》。 1.分享 尽可能地使用开源,并且如果有能力的话也可以把自己的成果分…

注解 @Target 用法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Target: Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚…

软件开发者如何准备未来?

摘要:现今,科技领域技术更新非常迅速,作为该领域幕后勤恳劳作的软件开发者要想在其中永远保持领先,跟得上时代,就需要时刻面向未来做好准备。但面对各种技术各种开发语言,软件开发者该如何做? …

java 并发包之 LongAdder 源码分析

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 LongAdder是java8中新增的原子类,在多线程环境中,它比AtomicLong性能要高出不少,特别是写多的场景。…

JAVA 内存模型 (Java Memory Model,JMM)

JAVA内存模型 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Java内存模型(Java Memory Model,JMM) 是在硬件内存模型基础上更高层的抽象&#xf…

解决:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 报错如下: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.…

解决:Command line is too long. In order to reduce its length classpath file can be used.

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 原本可以正常运行的项目,突然出现这个错: Command line is too long. In order to reduce its length class…

性能提升利器之固态硬盘和序列化漫谈

摘要:假设我们已经构建了下一个杀手级应用,而且变得越来越受欢迎,突破负载极限,以我们目前的增长的速度,需要在3个月内将需要将性能提升10倍。我们该怎么做? 【编者按】当面对一个性能扩展问题时&#xff…

查看本机IP的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 打开网络和共享中心 2.更改适配器设置 3. 右键选择 状态 4.选择详情 5.找到IP

来自前苹果高管Heidi Roizen的经验之谈

摘要:Heidi Roizen曾是T/Maker的联合创始人兼CEO;此后Heidi Roizen加入苹果公司担任开发者关系的高级副总裁。本文她分享了8条箴言,希望能为各位开发者带来启迪,体会生活与工作上的人生感悟。 【编者按】Heidi Roizen曾是T/Maker的…

解决:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408,

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.只是想启动elasticsearch,报错如题: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c…

Docker CEO Ben Golub:Docker借助开源、天时走向成功

摘要:Docker CEO Ben Golub接受了Gigaom专访,他表示,Docker正是借助开源、天时走向了成功。而作为Docker前身,现任CTO Hykes在运作dotCloud过程中,发现多平台的需求越来越受到用户关注,于是Docker孕育而生。…

linux系统/opt目录和/usr/local目录有什么区别

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 在学习linux的时候,看到/opt目录和/usr/local目录都是安装软件的目录,那这两个目录有什么区别呢? 一…

果断Mark!Searchcode——源代码搜索利器

摘要:Searchcode是一款免费的源代码/文档搜索引擎,汇聚Github、Codeplex、Sourceforge等多家开源站点,拥有超过20万个项目、180亿行源代码,能以特殊字符、语言、仓库和源方式从90多种语言找到函数、API的真实代码。 Searchcode是…

elasticsearch 安装( 阿里云ECS )、远程访问、启动报错处理

附另 2 文章: elasticsearch-head 安装 kibana 安装 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 从网上下载到 linux 版本的 tar 包:elasticsearch-6.7.…

解决:git: command not found、apt-get: command not found、git 安装

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 运行 git 失败,因为没有安装 git。 于是就安装:apt-get install git,于是得到后一个报错。 原来 a…

为什么程序员要尽量少写代码

软件开发的一个最基本的事实是写代码,但是最大的误区之一就是把写代码当做工作。当我作为一个程序员第一次参加工作的时候,就犯了这样的错误。老实说,写代码真的是一件特有意思的事,它的强大功能,它的多种作用等等都让…