截止目前累计成功为5,000,000 用户成功查重检测

CNCNKI学术不端文献查重检测系统 多语种 图文 高校 期刊 职称 查重 抄袭检测系统

分布式存储编码设计与实现

时间:2016-11-03 12:00:00 编辑:知网 阅读:

摘要

分布式系统并不能称得上是一种新技术,在上个世纪七八十年代就已经有各种分布式系统出现。随着大数据时代的到来,面对日益增长的数据量,分布式系统因其强大的计算存储能力开始大放异彩,尤其是Google更是把分布式系统运用到了极致。

笔者出于对分布式系统的强烈兴趣,在学习了分布式系统的相关基础概念并研读了分布式系统领域的一些经典论文之后,设计并实现了一个面向键值对的分布式存储系统。此系统以键值对的方式提供分布式数据存储服务,可以支持高并发数据访问,具有较好的容错性、可用性与可扩展性。

为了实现更优的系统性能,本系统采用了“碎片化”存储,或“分区”存储的形式,即将所存储的所有键值对划分成不相交的子集(称为“碎片”),并将每个碎片存储在一个“碎片”集群或分区中。本系统主要包括两个组成部分。首先,一个由碎片集群构成的集合。每个碎片集群负责处理对一个或几个碎片的请求,并由若干台服务器组成,这若干台服务器之间利用Paxos协议实现一致性与容错性。第二个组成部分为“管理集群”,其作用为确定哪个碎片集群负责某个碎片,此信息以下称为“集群配置”。集群配置可以随时间推移而改变。客户端可以询问管理集群来确定对某个特定的键,需要向哪个碎片集群发起请求。整个系统只包含一个管理集群。同样,管理集群由若干台服务器组成,且这若干台服务器之间利用Paxos协议实现一致性与容错性,以防止单点故障。

知网论文查重

知网论文查重

Paxos是由分布式系统领域的知名学者Leslie Lamport提出的用于解决分布式系统中各节点如何达成一致性状态的算法。在本分布式数据库系统的设计中,需要保证每个分布式存储结点所存储的数据保持一致。由于每个存储节点初始存储数据是一致的,因此当它们执行了相同的数据操作序列后,它们所存储的数据内容应当也是一致的。为了保证每个存储结点所执行的数据操作序列是一致的,需要对每一个操作执行一个“一致性算法”以保证每个节点执行的操作是一致的。Paxos算法基于消息传递模型的一种一致性算法,即节点之间通过传递消息来相互通信。由于系统底层依赖于Paxos算法来实现集群一致性,为适应特定的定制需求,本系统对底层Paxos算法进行了实现。

碎片集群与管理集群实际上就是基于Paxos维护了一个具有一致性的操作日志的服务器集群。集群中包含若干台服务器,服务器端需要实现相同远程函数调用处理函数(RPC Handler),以响应客户端发起的请求。其中,对于碎片集群来说,操作日志描述的是客户端对数据库的操作序列;对管理集群来说,操作日志描述的是碎片集群加入或离开的动作序列。

最后,为保证本系统每个组件实现的正确性以及能处理高并发、网络传输丢包、节点故障等情形,进行了相关性能与正确性测试。

第一章 引言

分布式系统并不能称得上是一种新技术,最早兴起于上世纪七八十年代。进入到大数据时代,面对日益增长的数据量,分布式系统因其强大的计算与存储能力开始受到大量关注。Google在分布式计算与存储方面提出的三大技术(GFS、MapReduce、BigTable)则为近年来兴起的各种分布式文件系统、分布式计算框架与分布式数据库的设计与实现奠定了基础。Google依靠自身强大的分布式技术,保证了其能够响应高并发请求以及处理海量数据。此外,各种开源的分布式计算与存储框架(如Hadoop、Spark、HBase等)则使得更多人能够接触并研究分布式技术。

出于对分布式系统的兴趣,笔者学习了分布式系统的基础概念和设计理念并实现了一个面向键值对的分布式存储系统。本章将介绍一些分布式系统的相关概念与设计理念,下文将介绍此分布式存储系统的设计与实现。

分布式系统可以被定义为由多个计算机节点组成的、节点之间仅仅通过网络消息传递进行通信与协调的系统。根据此定义,分布式系统通常有如下特征:

  • 并发性。由于一个分布式系统包含了多个分布于网络中的计算机节点,因此每个计算机节点上的应用程序可以并发执行,因此可以处理单机无法处理的数据量,并提升系统整体的计算能力。
  • 依赖于网络通信。由于计算机节点分布在网络中,在分布式应用程序需要协作时,它们只能通过消息传递来相互协调(而无法利用共享内存的方式)。通过网络进行消息传递作为唯一的通信方式的弊端在于,由于网络状况的不稳定性,分布式应用程序之间无法获得一个统一的全局时钟,这给应用程序间的动作协调带来了新的挑战。
  • 节点故障相互独立。由于每个计算机节点在不同的网络位置上独立运行,仅通过网络消息传递进行通信,因此每个节点都可能独立地发生故障。应用程序无法检测不响应的节点是由于网络通信故障导致还是节点故障导致,这也造成了分布式应用程序编写的困难。

实现分布式系统的好处在于:一方面,通过冗余的手段联结物理上隔离的计算机实体可以实现系统的容错性;另一方面,由于系统中的计算机实体的CPU、内存与磁盘等资源得到并行的利用,系统性能可以得到极大的提升。同时,分布式系统的设计与实现有其独特的困难之处:系统涉及了多个计算机实体,这使得系统变得十分复杂且难以检查故障之所在,正如上文中分布式系统的故障独立性所述。

在分布式系统的设计与实现中,我们通常关注的问题点有如下几个:

  1. 系统架构。设计者需要考虑如何设计系统中计算机实体的组织方式,如客户端-服务器模型、Peer-To-Peer模型等来实现更好的系统性能;同时设计者需要考虑哪些系统组件需要暴露给客户端,哪些系统组件需要隐藏,即系统透明性设计。
  2. 系统性能。理想情况下,分布式系统的性能由于处理器等资源的并行利用可以按照计算机实体的数量线性增长。然而,由于网络带宽与时延的限制,实际状况中线性增长的目标几乎不可能达到。此外,为了达到最佳性能,系统需要实现良好的负载均衡,即动态分配系统负载至不同的计算机实体,以防止计算资源的闲置。中国知网学术不端文献检测系统
  3. 容错性。由于分布式系统涉及大量的计算机实体与复杂的网络通信状况,期望故障不发生是不现实的,因此,分布式系统应当能在故障出现的情况下依然能够正常工作。实现容错性的基本机制是冗余,即将各种资源(如文件资源、系统状态等)在多台计算机上进行备份,当一台运行中的计算机发生故障时,由另一台备份计算机继续工作。如何设计冗余的机制也是分布式系统设计的关键问题之一。中国知网学术不端文献检测系统
  4. 一致性。一致性是因为有并发读写才有的问题,分布式系统中的一致性模型包括强一致性、弱一致性与最终一致性等。强一致性指更新过的数据能被所有后续的访问读到;弱一致性指容忍后续访问读不到之前的更新;最终一致性指更新后的数据在一段时间后能被访问。分布式系统设计者需要根据系统需求来选择合适的一致性模型。
  5. 可扩展性。指分布式系统能够通过增加节点数量来提升系统整体的处理计算能力的特点。

针对上述分布式系统的设计与实现中所关注的问题,目前较为成熟的设计理念与工程实践如下:

  1. 分布式系统单机处理能力不必太高。由于分布式系统的可扩展性,系统整体的处理能力可以通过增加计算机节点的方式来提升,因此对每个计算机节点,可以选择使用廉价的性能平庸的服务器,以降低系统整体实现成本。中国知网学术不端文献检测系统
  2. 分布式系统不允许单点故障。单点故障是指,分布式系统提供的某项服务由于系统中某个特殊的计算机节点的故障而导致系统整体无法提供相应服务。例如,一个网站后端应用程序如果只在一台服务器上运行,则如果这台服务器发生故障,该网站服务必然无法提供正常服务。这种情况是分布式系统设计时要极力避免的。通常的避免单点故障的做法是冗余,即将应用程序运行在多个计算机节点上,当其中一个节点失效时由其余节点进行接管。中国知网学术不端文献检测系统
  3. 尽量减少网络通信开销。提出这点工程实践是基于这样一个事实:当前网络传输的速度远不及CPU读取内存或硬盘的速度。因此,制约分布式系统的整体性能的因素在于网络通信开销。提高分布式系统性能的关键在于让CPU尽可能处理本地数据(内存或硬盘的)。

根据上述分布式系统设计理念及工程实践原则,笔者设计并实现了一个基于键值对的分布式存储系统。此外,本系统实现源代码已经托管至笔者的Github仓库: https://github.com/NickYoungFDU/Distributed-System-Lab.

返回