CNCNKI学术不端文献查重检测系统 多语种 图文 高校 期刊 职称 查重 抄袭检测系统
分布式系统并不能称得上是一种新技术,在上个世纪七八十年代就已经有各种分布式系统出现。随着大数据时代的到来,面对日益增长的数据量,分布式系统因其强大的计算存储能力开始大放异彩,尤其是Google更是把分布式系统运用到了极致。
笔者出于对分布式系统的强烈兴趣,在学习了分布式系统的相关基础概念并研读了分布式系统领域的一些经典论文之后,设计并实现了一个面向键值对的分布式存储系统。此系统以键值对的方式提供分布式数据存储服务,可以支持高并发数据访问,具有较好的容错性、可用性与可扩展性。
为了实现更优的系统性能,本系统采用了“碎片化”存储,或“分区”存储的形式,即将所存储的所有键值对划分成不相交的子集(称为“碎片”),并将每个碎片存储在一个“碎片”集群或分区中。本系统主要包括两个组成部分。首先,一个由碎片集群构成的集合。每个碎片集群负责处理对一个或几个碎片的请求,并由若干台服务器组成,这若干台服务器之间利用Paxos协议实现一致性与容错性。第二个组成部分为“管理集群”,其作用为确定哪个碎片集群负责某个碎片,此信息以下称为“集群配置”。集群配置可以随时间推移而改变。客户端可以询问管理集群来确定对某个特定的键,需要向哪个碎片集群发起请求。整个系统只包含一个管理集群。同样,管理集群由若干台服务器组成,且这若干台服务器之间利用Paxos协议实现一致性与容错性,以防止单点故障。
Paxos是由分布式系统领域的知名学者Leslie Lamport提出的用于解决分布式系统中各节点如何达成一致性状态的算法。在本分布式数据库系统的设计中,需要保证每个分布式存储结点所存储的数据保持一致。由于每个存储节点初始存储数据是一致的,因此当它们执行了相同的数据操作序列后,它们所存储的数据内容应当也是一致的。为了保证每个存储结点所执行的数据操作序列是一致的,需要对每一个操作执行一个“一致性算法”以保证每个节点执行的操作是一致的。Paxos算法基于消息传递模型的一种一致性算法,即节点之间通过传递消息来相互通信。由于系统底层依赖于Paxos算法来实现集群一致性,为适应特定的定制需求,本系统对底层Paxos算法进行了实现。
碎片集群与管理集群实际上就是基于Paxos维护了一个具有一致性的操作日志的服务器集群。集群中包含若干台服务器,服务器端需要实现相同远程函数调用处理函数(RPC Handler),以响应客户端发起的请求。其中,对于碎片集群来说,操作日志描述的是客户端对数据库的操作序列;对管理集群来说,操作日志描述的是碎片集群加入或离开的动作序列。
最后,为保证本系统每个组件实现的正确性以及能处理高并发、网络传输丢包、节点故障等情形,进行了相关性能与正确性测试。
分布式系统并不能称得上是一种新技术,最早兴起于上世纪七八十年代。进入到大数据时代,面对日益增长的数据量,分布式系统因其强大的计算与存储能力开始受到大量关注。Google在分布式计算与存储方面提出的三大技术(GFS、MapReduce、BigTable)则为近年来兴起的各种分布式文件系统、分布式计算框架与分布式数据库的设计与实现奠定了基础。Google依靠自身强大的分布式技术,保证了其能够响应高并发请求以及处理海量数据。此外,各种开源的分布式计算与存储框架(如Hadoop、Spark、HBase等)则使得更多人能够接触并研究分布式技术。
出于对分布式系统的兴趣,笔者学习了分布式系统的基础概念和设计理念并实现了一个面向键值对的分布式存储系统。本章将介绍一些分布式系统的相关概念与设计理念,下文将介绍此分布式存储系统的设计与实现。
分布式系统可以被定义为由多个计算机节点组成的、节点之间仅仅通过网络消息传递进行通信与协调的系统。根据此定义,分布式系统通常有如下特征:
实现分布式系统的好处在于:一方面,通过冗余的手段联结物理上隔离的计算机实体可以实现系统的容错性;另一方面,由于系统中的计算机实体的CPU、内存与磁盘等资源得到并行的利用,系统性能可以得到极大的提升。同时,分布式系统的设计与实现有其独特的困难之处:系统涉及了多个计算机实体,这使得系统变得十分复杂且难以检查故障之所在,正如上文中分布式系统的故障独立性所述。
在分布式系统的设计与实现中,我们通常关注的问题点有如下几个:
针对上述分布式系统的设计与实现中所关注的问题,目前较为成熟的设计理念与工程实践如下:
根据上述分布式系统设计理念及工程实践原则,笔者设计并实现了一个基于键值对的分布式存储系统。此外,本系统实现源代码已经托管至笔者的Github仓库: https://github.com/NickYoungFDU/Distributed-System-Lab.