所谓分布式系统简单来说就是通过一些手段将计算能力以及存储能力分散到多台服务器上面,随之带来了一些问题涉及数据分布、数据复制、一致性、容错等。
分布式系统面临的第一个问题就是数据分布,即将数据均匀地分布到多个存储节点。另外,为了保证可靠性和可用性,需要将数据复制多个副本,这就带来了多个副本之间的数据一致性问题。
分布式系统中的服务器故障率很高,要求系统能够在软件层面实现自动容错。比如当存储节点出现故障时,系统能够自动检测出来,并将原有的数据和服务迁移到集群中其他正常工作的节点。
一些概念
性能
主要指系统的吞吐能力以及系统的响应时间。
其中,系统的吞吐能力指系统在某一段时间可以处理的请求总数,通常用每秒处理的读操作数(QPS,Query Per Second)或者写操作数(TPS,Transaction Per Second)来衡量;
系统的响应延迟,指从某个请求发出到接收到返回结果消耗的时间,通常用平均延时或者tp99以上请求的最大延时来衡量。
这两个指标往往是矛盾的,追求高吞吐的系统,往往很难做到低延迟;追求低延迟的系统,吞吐量也会受到限制。因此,设计系统时需要权衡这两个指标。
可扩展性
系统的可扩展性(scalability)指系统通过扩展集群服务器规模来提高系统存储容量、计算量和性能的能力。随着业务的发展,对底层存储系统的性能需求不断增加,比较好的方式就是通过自动增加服务器提高系统的能力。理想的系统实现了“线性可扩展”,也就是说,随着集群规模的增加,系统的整体性能与服务器数量呈线性关系。
可用性
系统的可用性(availability)是指系统在面对各种异常时可以提供正常服务的能力。系统的可用性可以用系统停服务或者服务与预期不符的时间与正常服务的时间的比例来衡量,例如某系统的可用性为4个9(99.99%),相当于系统一年服务不可用的时间不能超过365×24×60*(1-99.99%)=52.56分钟。系统可用性往往体现了系统的整体代码质量以及容错能力。
比较通用的标准
系统多不可靠,多长时间坏一次;一旦坏了,恢复服务的时间需要多长
分区容错
理解为在存在网络分区的情况下,仍然可以接受请求(满足一致性和可用性)。这里的网络分区是指由于某种原因,网络被分成若干个孤立的区域,而区域之间互不相通。
CAP定理
它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
一致性(Consistency)(等同于所有节点访问同一份最新的数据副本,通常指强一致性)
可用性(Availability)(对数据更新具备高可用性)
容忍网络分区(Partition tolerance)(Partition Tolerance的意思是,在网络中断,消息丢失的情况下,系统照样能够工作。以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。)
实例分析
关系型数据库设计选择了C(一致性)与A(可用性),NoSQL数据库设计则不同。其中,HBase选择了C(一致性)与P(分区可容忍性),Cassandra选择了A(可用性)与P(分区可容忍性)。
面对的挑战
在分布式存储系统中,往往将一台服务器或者服务器上运行的一个进程称为一个节点,节点与节点之间通过网络互联。于自动容错。然而,服务器节点是不可靠的,网络也是不可靠的。
服务器宕机
引发服务器宕机的原因可能是内存错误、服务器停电等。服务器宕机可能随时发生,当发生宕机时,节点无法正常工作,称为“不可用”(unavailable)。服务器重启后,节点将失去所有的内存信息,那么带来的问题:我们是否需要恢复内存信息,是否需要做持久化,如何做持久化,持久化带来的性能损失是否可以容忍。
网络异常
引发网络异常的原因可能是消息丢失、消息乱序或者网络包数据错误。有一种特殊的网络异常称为“网络分区”,即集群的所有节点被划分为多个区域,每个区域内部可以正常通信,但是区域之间无法通信。例如,某分布式系统部署在两个数据中心,由于网络调整,导致数据中心之间无法通信,但是,数据中心内部可以正常通信。
设计容错系统的一个基本原则是:网络永远是不可靠的,任何一个消息只有收到对方的回复后才可以认为发送成功,系统设计时总是假设网络将会出现异常并采取相应的处理措施。
磁盘故障
包括磁盘损坏和磁盘数据错误。磁盘损坏时,将会丢失存储在上面的数据,因而,分布式存储系统需要考虑将数据存储到多台服务器,即使其中一台服务器磁盘出现故障,也能从其他服务器上恢复数据。对于磁盘数据错误,往往可以采用校验和(checksum)机制来解决,这样的机制既可以在操作系统层面实现,又可以在上层的分布式存储系统层面实现。
三种状态
“成功”、“失败”、“超时”(未知状态),也称为分布式存储系统的三态。设计分布式存储系统时可以将操作设计为“幂等”的,也就是说,操作执行一次与执行多次的结果相同,例如,覆盖写就是一种常见的幂等操作。如果采用这种设计,当出现失败和超时时,都可以采用相同的处理方式,即一直重试直到成功。
一致性
由于异常的存在,分布式存储系统设计时往往会将数据冗余存储多份,每一份称为一个副本(replica/copy)。这样,当某一个节点出现故障时,可以从其他副本上读到数据。可以这么认为,副本是分布式存储系统容错技术的重要手段。由于多个副本的存在,如何保证副本之间的一致性是整个分布式系统的理论核心。
可以从两个角度理解一致性:1)用户,或者说是客户端,即客户端读写操作是否符合某种特性;2)存储系统,即存储系统的多个副本之间是否一致,更新的顺序是否相同。
假设以下场景:
- 客户端A:客户端A主要实现从存储系统write和read操作。
- 客户端B和客户端C:客户端B和C是独立于A,并且B和C也相互独立的,它们同时也实现对存储系统的write和read操作
从客户端的角度来看,一致性包含如下三种情况:
-
强一致性:假如A先写入了一个值到存储系统,存储系统保证后续A,B,C的读取操作都将返回最新值。当然,如果写入操作“超时”,那么成功或者失败都是可能的,客户端A不应该做任何假设。
-
弱一致性:假如A先写入了一个值到存储系统,存储系统不能保证后续A,B,C的读取操作是否能够读取到最新值。
- 最终一致性:最终一致性是弱一致性的一种特例。假如A首先写入一个值到存储系统,存储系统保证如果后续没有写操作更新同样的值,A,B,C的读取操作“最终”都会读取到A写入的最新值。“最终”一致性有一个“不一致窗口”的概念,它特指从A写入值,到后续A,B,C读取到最新值的这段时间。“不一致性窗口”的大小依赖于以下的几个因素:交互延迟,系统的负载,以及复制协议要求同步的副本数。
协议
分布式系统中有两个重要的协议,包括Paxos选举协议以及两阶段提交协议。
- Paxos协议用于多个节点之间达成一致,往往用于实现主节点选举以及分布式锁。
- 两阶段提交协议用于保证跨多个节点操作的原子性,这些操作要么全部成功,要么全部失败。
相关推荐
《Hadoop分布式系统基础架构 v3.3.6》 Hadoop是一个开源的分布式计算框架,由Apache基金会开发,主要用于处理和存储大规模数据。在Hadoop 3.3.6版本中,它继续提供了一个可靠的、可扩展的、分布式的环境,支持大...
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,主要用于处理大规模数据集,并提供高可靠性、高可扩展性和高效性等特性。以下是对Hadoop的详细介绍: 一、Hadoop的概述 定义:Hadoop是一个开源的分布式...
本书分为三大部分,即分布式系统基础理论、分布式系统常用技术以及经典的分布式系统案例分析。第一部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,...
1. **分布式系统基础**:分布式系统是由多个独立的计算机节点通过网络连接,共同协作完成任务的系统。这些节点之间通过通信协议进行交互,共享数据和计算资源。理解分布式系统的基石,如CAP理论(一致性、可用性和...
1. **分布式系统基础**:分布式系统由多个独立的组件构成,它们之间通过网络进行通信。这些组件可以是服务器、数据库、缓存或其他服务。设计的目标是提供透明性,即用户感觉系统是一个整体,而不是多个部分。 2. **...
本书分为三大部分,即分布式系统基础理论、分布式系统常用技术以及经典的分布式系统案例分析。第一部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,...
通过以上总结可以看出,《分布式系统小书》不仅是一本理论丰富的教材,也是一份实践指南,适合希望深入了解分布式系统基础知识的学习者。书中涵盖了许多关键概念和技术,可以帮助读者建立起坚实的分布式系统设计和...
分布式系统设计是现代...这份PDF将帮助学习者构建扎实的分布式系统基础知识,理解其背后的原理,并为实际开发提供指导。无论是想要提升职业能力,还是解决现有项目中的问题,这份资源都是值得深入研究的宝贵资料。
为您提供Hadoop分布式系统基础架构下载,Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个...
1. **分布式系统基础**: 分布式系统是由多个节点通过网络连接组成的,每个节点可以执行独立的计算任务,并通过网络交换信息。这些节点之间共享资源,协同工作,提供透明性,使用户感觉像是在操作单个系统。 2. **...
一、分布式系统基础 分布式系统的核心目标是透明性,即用户应能感知到系统是一个整体,而不会意识到其背后的分布式特性。这包括位置透明性、复制透明性、并发透明性和失败透明性等。系统设计时需要考虑网络延迟、...
1. **分布式系统基础**:介绍分布式系统的定义、特征、架构和目标,包括性能、可用性、容错性和可扩展性等方面。 2. **进程间通信(IPC)**:讲解不同类型的进程间通信机制,如管道、套接字、消息队列和远程过程...
本书的内容比较全面,涵盖分布式系统基础理论、常用技术以及经典的案例分析。全书篇幅较多,对分布式系统中的线程、通信、一致性、容错性、CAP理论、安全性、并发、RESTful风格架构、微服务、容器技术,以及分布式...
总之,《分布式系统:概念与设计》第五版是一本全面介绍分布式系统基础知识和技术细节的经典著作,适合IT专业人士、研究人员以及学生阅读。通过对本书的学习,读者不仅能掌握分布式系统的基本原理和技术,还能深入...
为您提供Hadoop分布式系统基础架构下载,Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个...
Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File ...
1. 分布式系统基础: - 定义:分布式系统是由多台计算机通过网络互相连接,共享资源,协同工作,以实现单一系统的行为。 - 特性:包括透明性(如位置透明性、复制透明性)、高可用性、可扩展性和容错性等。 2. ...
1. **Chapter 2 - 分布式系统基础** 这一章可能涵盖了分布式系统的定义和基本特征,例如并发性、透明性、容错性和可扩展性。还会讨论分布式系统与并行系统、网络系统之间的区别,并介绍一些经典的分布式系统模型。...