云计算技术与应用 -基础概念与分布式计算

云计算技术与应用

  • 0. 课程总览
  • 1. 云计算的定义
    • 1.1 计算模式的演进
      • 1.1.1 集中计算
      • 1.1.2 效用计算
      • 1.1.3 客户机/服务器模式
      • 1.1.4 集群计算
      • 1.1.5 服务计算
      • 1.1.6 个人计算机与桌面计算
      • 1.1.7 分布式计算
      • 1.1.8 网格计算
      • 1.1.9 SaaS
      • 1.1.10 云计算的出现
    • 1.2 云计算简史
    • 1.3 云计算的公共特征
      • 1.3.1 云计算的分类
      • 1.3.2 云计算相关技术
        • 1. 并行计算
        • 2.SOA
        • 3.虚拟化
    • 1.4 云计算三元认识论
      • 1.4.1 云计算作为一种商业模式
      • 1.4.2 云计算作为一种计算范式
      • 1.4.3 云计算作为一种实现方式
  • 2. 分布式计算
    • 2.1 分布式计算基本概念
    • 2.2 分布式计算的原理
    • 2.3 分布式计算理论基础
      • 2.3.1 ACID 原则
      • 2.3.2 CAP理论
      • 2.3.3 BASE理论
      • 2.3.4 最终一致性
      • 2.3.5 一致性散列
    • 2.4 容错性和扩展性
  • 3. 分布式系统的认识
    • 3.1 分布式系统的基础知识
      • 3.1.1 分布式存储系统
      • 3.1.2 分布式计算系统
      • 3.1.3 分布式资源管理系统
    • 3.2 典型的分布式系统
      • 1 网格系统
      • 2 P2P系统
      • 3 透明计算
      • 4 区块链系统

0. 课程总览

云计算技术与应用 -基础概念与分布式计算_第1张图片

  • 业界有一种很流行的说法,将云计算模式比喻为发电厂集中供电的模式。
  • 通过云计算,用户可以不必去购买新的服务器,更不用去部署软件,就可以得到应用环境或者应用本身。
  • 对于用户来说,软硬件产品也就不再需要部署在用户身边,这些产品也不再是专属于用户自己的产品,而是变成了一种可利用的、虚拟的资源

1. 云计算的定义

各种虚拟化、效用计算、服务计算、网格计算、自动计算等概念的混合演进并集大成之结果

  • 云计算是各种虚拟化、效用计算、服务计算、网格计算、自动计算等概念的混合演进并集大成之结果。
  • 它从主机计算开始、历经小型机计算、客户机/服务器计算、分布式计算、网格计算、效用计算进化而来,它既是技术上的突破(技术上的集大成),也是商业模式上的飞跃。
  • 对于用户来说,云计算屏蔽了IT的所有细节,用户无须对云端所提供服务的技术基础设施有任何了解或任何控制,甚至根本不用知道提供服务的系统配置和地理位置,只需要“打开开关”(接上网络),坐享其成即可。
  • 云计算在技术和商业模式两个方面的巨大优势,确定了其将成为未来的IT产业主导技术与运营模式
  1. 通俗的说:云计算像在每个不同地区开设不同的自来水公司,没有地域限制,优秀的云软件服务商,向世界每个角落提供软件服务——就像天空上的云一样,不论你身处何方,只要你抬头,就能看见!

  2. 专业的说:以互联网为中心,在网站上提供快速且安全的云计算服务与数据存储,让每一个使用互联网的人都可以使用网络上的庞大计算资源与数据中心。

1.1 计算模式的演进

云计算技术与应用 -基础概念与分布式计算_第2张图片

1.1.1 集中计算

云计算与集中计算的一个重要的区别是其面向的用户群体不同

  1. 1964年,世界上第一台大型主机System/360诞生,引发了计算机和商业领域里的一场革命。
    大型主机的一个特点就是资源集中,计算、存储集中,这是集中计算模式的典型代表。
  2. 其实主机系统就是最早的“云”,只不过这些云是面向专门业务、专用网络和特定领域的。
  3. 云计算与集中计算的一个重要的区别是其面向的用户群体不同。主机计算的用户通常是大型机构,并为关键应用所准备,如人口普查、消费统计、ERP、财务交易等;而云计算则面向普罗大众,可以运行各种各样的大、中、小型应用程序

1.1.2 效用计算

按照用户实际使用的资源量对用户进行计费

  1. 效用计算的目标是把服务器及存储系统打包给用户使用,按照用户实际使用的资源量对用户进行计费,类似于水、电、气和电话等服务的提供方式,使用户能够像把灯泡插入灯头一样来使用计算机资源。
  2. 效用计算的实际运用以IBM公司为主要代表。IBM公司将自己的主机资源按照时间租给不同的用户,主机仍然存放在IBM的数据中心,用户在远程或者IBM数据中心现场使用IBM的资源。
  3. 与云计算比较起来,效用计算仅规定了IT资产的计费模式,对IT资产的其他方面,如技术、管理、配置、安全等诸多方面并不做限定。
  4. 而付费模式仅仅是云计算所考虑的一个因素,云计算要考虑的因素还包括许多。

1.1.3 客户机/服务器模式

云计算提供的这个“远程服务器”具有无限的计算能力、容量等

  1. 客户机/服务器模型则泛指所有的能够区分某种服务提供者(服务器)和服务请求者(客户机)的分布式系统。
  2. 从服务的访问模式上看,云计算确实有客户机/服务器模式的影子,不过,在这种形似的背后,云计算提供的这个“远程服务器”具有无限的计算能力、无限的存储容量,且从来不会崩溃,几乎没有什么软件不能运行在其上。用户还可以发布自己的应用程序到这个“远程服务器”,而这个“远程服务器”可以为应用程序自动配置所需的资源,并随需变化。

1.1.4 集群计算

一组计算机来达到单个目的

  1. 服务器集群计算是用紧密耦合的一组计算机来达到单个目的,而云计算是根据用户需要提供不同支持来达到不同的目的。
  2. 服务器集群计算是有限度的分布式计算,其面临的挑战不如云计算所面临的分布式计算复杂。
    集群计算并不考虑交互式的终端用户,而云计算恰恰需要考虑。
  3. 显然,云计算包含了服务器集群计算的元素

1.1.5 服务计算

软件即服务

  1. 服务计算也称为面向服务的计算,其更为准确的名称是软件即服务(SaaS)。此种计算范式将所有的应用程序都作为服务来予以提供,用户或其他的应用程序则使用这些服务,而不是买断或拥有软件。
  2. 在服务计算模式下,不同服务之间相对独立,松散耦合,随意组合。对服务计算来说,服务的发现是重点。
  3. 云计算大量采用了服务计算的技术和思维方式,重要区别在于:
    • 虽然服务计算一般在互联网上实现,但服务计算不一定必须在云中提供,单台服务器、小规模集群、有限范围的网络平台就可以提供服务计算;
    • 服务计算一般仅限于软件即服务,而云计算将服务的概念推广到了硬件和运行环境,囊括了基础设施即服务、平台即服务的概念。也就是说,云计算的服务理念比传统的服务计算概念更加广泛。

1.1.6 个人计算机与桌面计算

个人计算机可以完成绝大部分的个人计算需求

  1. 个人计算机的出现极大地推动了软件产业的发展,各种面向终端消费者的应用程序涌现出来。个人计算机可以完成绝大部分的个人计算需求,这种模式也叫桌面计算。
  2. 在互联网出现之前,软件和操作系统的销售模式都是授权(License)模式,也就是通过软盘或者光盘,将软件代码复制到计算机之上,而每一次复制,都需要向软件开发商付费。
  3. 这种模式一些问题,例如费用太高、软件升级烦琐等。升级的目的是解决之前的一些问题,或是使用新的功能,但是升级的过程有时会很烦琐。对于一个大型企业来讲,它的IT部门可能需要管理上百种软件、上千个版本、上万台计算机,每个版本的软件都需要维护,包括问题追踪、补丁管理、版本升级和数据备份等,这绝非一项简单的工作。

1.1.7 分布式计算

多台计算机共同完成一个任务

  1. 分布式计算依赖于分布式系统。分布式系统由通过网络连接的多台计算机组成。每台计算机都拥有独立的处理器及内存。这些计算机互相协作,共同完成一个目标或者计算任务。
  2. 分布式计算是一个很大的范畴,它包含了很多人们熟悉的计算模式和技术,例如网格计算、P2P计算、客户机/服务器计算(C/S)和浏览器/服务器计算(B/S),当然也包括云计算。
  3. 在当今的网络时代,非分布式计算的应用已经很少了,只有部分单机运行的程序属于这一范畴,例如文字处理、单机游戏等。

1.1.8 网格计算

针对复杂的科学计算

  1. 网格计算出现于20世纪90年代。它是伴随着互联网而迅速发展起来的、专门针对复杂科学计算的新型计算模式。
  2. 这种计算模式利用互联网把分散在不同地理位置的计算机组织成一台“虚拟的超级计算机”,其中每一台参与计算的计算机就是一个“节点”,而整个计算是由成千上万个“节点”组成的“一堆网格”,所以这种计算方式叫网格计算。跨地区性(跨区域性)
  3. 为了进行一项计算,网格计算首先把要计算的数据分割成若干“小片”,然后将这些小片分发给分布的每台计算机。每台计算机执行它所分配到的任务片段,待任务计算结束后将计算结果返回给计算任务的总控节点。
  4. 网格计算更多地面向科研应用,云计算主要面向商业应用

1.1.9 SaaS

软件即服务.用户无需购买软件,转为租用

  1. SaaS全称为Software as a service,中文译为“软件即服务”。其实它所表达的也是一种计算模式,就是把软件作为服务。
  2. 它是一种通过Internet来提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己的实际需求,通过互联网向厂商订购所需的软件应用服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。
  3. 用户不用再购买软件,而改为向提供商租用基于Web的软件,来管理企业经营活动,且无须对软件进行维护,服务提供商会管理维护软件。
  4. 软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其订购的软件和服务。

1.1.10 云计算的出现

总体来看,云计算至少有以下四个优势:

  • 按需供应的无限计算资源;
  • 无须事先花钱就能使用的IT架构;
  • 基于短期的按需付费的资源使用;
  • 单机难以提供的事务处理环境。

1.2 云计算简史

云计算技术与应用 -基础概念与分布式计算_第3张图片

1.3 云计算的公共特征

通过对云计算方案的特征进行归纳和分析,可发现这些方案所提供的云服务有着显著的公共特征,这些特征也使云计算明显区别于传统的服务。
1.弹性伸缩
2.快速部署
3.资源抽象
4.按用量收费
5.宽带访问

1.3.1 云计算的分类

1.根据云的部署模式和云的使用范围进行分类
(1)公共云
(2)私有云(或称专属云)
(3)社区云
(4)混合云
(5)行业云
(6)其他云类型

2.针对云计算的服务层次和服务类型进行分类
(1)基础设施即服务(Infrastructure as a Service,IaaS)
(2)平台即服务(Platform as a Service,PaaS)
(3)软件即服务(Software as a Service,SaaS)

1.3.2 云计算相关技术

  • 从技术的角度看,云计算体现出分布式系统、虚拟化技术、负载均衡等各种技术有着千丝万缕的联系。
  • 在具体的技术实现上,云计算平台创新性地融合了多种技术的思想,通过不同的组合,解决在具体应用时遇到的不同问题。
  • 就技术而言,云计算在本质上源自超大规模分布式计算,是一种演进的分布式计算技术。
  • 云计算还延伸了SOA的理念,并融合了虚拟化、负载均衡等多种技术方法,形成了一套新的技术理念和实现机制。
    -云计算表现出的核心意义不仅在于技术的发展,还在于通过组织各种技术,使人们建立IT系统的思路和结构发生根本性的变化。

1. 并行计算

加快计算速度

  • 并行计算(Parallel Computing)是指同时执行多个指令的计算模式,其原理为一个“大”问题可以被分解为多个同时处理的“小”问题。
  • 并行计算的主要动力在于加快计算速度,因此确定问题分解的并行算法,对于并行计算而言至关重要,所以在结构上并行计算是紧耦合(Tight Coupling)的概念。
  • 在软件工程中,“耦合”指的是互相交互的系统彼此间的依赖。紧耦合表明模块或者系统之间关系紧密,存在明显的依赖关系。

2.SOA

面向服务体系结构
SOA是设计和开发软件的原则和方法

  • SOA是面向服务的体系结构(Service Oriented Architecture)的简称,依照结构化信息标准促进组织(OASIS)所给出的定义,“SOA是一种组织和利用可能处于不同所有权范围控制下的分散功能的范式。”
  • 通常所说的SOA是一套设计和开发软件的原则和方法,它将应用程序的不同功能单元(即“服务”)通过这些服务之间定义良好的接口和协议联系起来,以使实现服务的平台或系统中,所构建的各类服务可以通过一种统一和通用的方式进行交互。
  • 简而言之,SOA是一种理念,即给定一种标准接口和一个约束接口的服务协议,则任何业务应用,只要能满足服务协议,即可通过给定的标准接口进行通信和交互,实现对接。

3.虚拟化

摆脱现实情况下物理资源所具有的各种限制

  • 虚拟化(Virtualization)是为某些事物创造的虚拟(而非真实)版本,例如硬件平台、计算机系统、存储设备和网络资源等。
  • 其目的是为了摆脱现实情况下物理资源所具有的各种限制,即“虚拟化是资源的逻辑表示,它不受物理限制的约束。”
  • 云计算所涉及的虚拟化,是经过发展之后的更高层次的虚拟化,是指所有的资源——计算、存储、应用和网络设备等连接在一起,由云计算平台进行管理调度。
  • 借助于虚拟化技术,云计算平台可以对底层千差万别的资源进行统一管理,也可以随时方便地进行资源调度的管理,实现资源的按需分配,从而使大量物理分布的计算资源可以在逻辑层面上以一个整体的形式呈现,并支撑各类应用需求。

1.4 云计算三元认识论

1.4.1 云计算作为一种商业模式

SaaS(软件即服务)、PaaS(平台即服务)和IaaS(基础设施即服务)

  • 云计算服务代表一种新的商业模式,SaaS(软件即服务)、PaaS(平台即服务)和IaaS(基础设施即服务)是这种商业模式的表现形式。
  • 伴随着云计算服务理念的发展,云计算也形成了一整套的软件架构与技术实现机制,而常常听到的云计算平台就是这套机制的具体体现。
  • 对于任何一种商业模式而言,除了理论上可行之外,还要保证实践上可用。因此,伴随着云计算服务理念的发展,云计算也形成了一整套技术实现机制,而云计算平台则是这套机制的具体体现。

1.4.2 云计算作为一种计算范式

两种云体逻辑结构

  • 云计算作为一种计算范式,其计算边界既由上层的经济因素所决定,也由下层的技术因素所决定。经济因素自上而下决定这种计算范式的商业形态,实现技术自下而上决定这种计算范式的技术形态。作为云计算服务的计算范式又可以从两个角度来进一步理解:
    • 横向云体逻辑结构
      -云计算技术与应用 -基础概念与分布式计算_第4张图片

    • 纵向云栈逻辑结构

    • 云计算技术与应用 -基础概念与分布式计算_第5张图片

1.4.3 云计算作为一种实现方式

数据中心

  • 云计算最终的实现方式是需要新一代的软硬件技术推动,即目前流行的数据中心,并且朝着软件定义的数据中心(Software Defined Data Center,SDDC)所演进。
  • 数据中心是云计算实现的最终归属,包括全方位的计算、存储和通信需求。
  • 软件定义数据中心是一个比较新的概念,它将虚拟化概念(如抽象,集中和自动化)扩展到所有数据中心资源和服务,以实现IT即服务(ITaaS)。在软件定义的数据中心中,基础架构的所有元素(网络,存储,CPU和安全)都是被虚拟化并作为服务交付的。

数据中心的功能划分

云计算技术与应用 -基础概念与分布式计算_第6张图片


2. 分布式计算

2.1 分布式计算基本概念

集中式计算与分布式计算

(1)集中式计算
集中式计算完全依赖于一台大型的中心计算机的处理能力,这台中心计算机称为主机(Host或mainframe),与中心计算机相连的终端设备具有各不相同非常低的计算能力。实际上大多数终端完全不具有处理能力,仅作为输入输出设备使用。
(2)分布式计算
与集中式计算相反,分布式计算中,多个通过网络互联的计算机都具有一定的计算能力,它们之间互相传递数据,实现信息共享,协作共同完成一个处理任务。

分布式计算就是在两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。

了解分布式计算

分布式计算比起其他算法具有以下几个优点。

  1. 稀有资源可以共享;
  2. 通过分布式计算可以在多台计算机上平衡计算负载;
  3. 可以把程序放在最适合运行它的计算机上。

2.2 分布式计算的原理

分摊计算、划分子任务分配节点。

分布式计算就是将计算任务分摊到大量的计算节点上,一起完成海量的计算任务。而分布式计算的原理和并行计算类似,就是将一个复杂庞大的计算任务适当划分为一个个小任务,任务并行执行,只不过分布式计算会将这些任务分配到不同的计算节点上,每个计算节点只需要完成自己的计算任务即可,可以有效分担海量的计算任务。而每个计算节点也可以并行处理自身的任务,更加充分利用机器的CPU资源。最后再将每个节点的计算结果汇总,得到最后的计算结果。

一副扑克帮你理解分布式计算基本原理

分布式计算一般分为以下几步:

  1. 设计分布式计算模型
    首先要规定分布式系统的计算模型。计算模型决定了系统中各个组件应该如何运行,组件之间应该如何进行消息通信,组件和节点应该如何管理等。
  2. 分布式任务分配
    分布式算法不同于普通算法。普通算法通常是按部就班,一步接一步完成任务。而分布式计算中计算任务是分摊到各个节点上的。该算法着重解决的是能否分配任务,或如何分配任务的问题。
  3. 编写并执行分布式程序
    使用特定的分布式计算框架与计算模型,将分布式算法转化为实现,并尽量保证整个集群的高效运行,难点:
    (1)计算任务的划分
    (2)多节点之间的通信方式

2.3 分布式计算理论基础

2.3.1 ACID 原则

ACID是数据库事务正常执行的四个原则,分别指原子性、一致性、独立性及持久性。

  1. A(Atomicity)—原子性

    • 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
      例如银行转账,从A账户转100元至B账户,分为两个步骤:①从A账户取100元;②存入100元至B账户。
    • 这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。
  2. C(Consistency)—一致性

    • 一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
    • 例如现有完整性约束a + b = 10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a + b = 10,否则事务失败。
  3. I(Isolation)—独立性

    • 所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
    • 例如交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。
  4. D(Durability)—持久性

  • 持久性是指一旦事务提交后,它所做的修改将会永久保存在数据库上,即使出现宕机也不会丢失。
    这些原则解决了数据的一致性、系统的可靠性等关键问题,为关系数据库技术的成熟以及在不同领域的大规模应用创造了必要的条件。

2.3.2 CAP理论

一个分布式系统最多只能同时满足一致性、可用性和分区容错性这三项中的两项

2000年7月,加州大学伯克利分校的埃里克·布鲁尔(Eric Brewer)教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的塞思·吉尔伯符(Seth Gilbert)和南希·林奇(Nancy Lynch)从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。 一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项,如图2.1所示

云计算技术与应用 -基础概念与分布式计算_第7张图片

一致性:在所有节点的数据保持一致

  1. 一致性指“All nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。对于一致性,可以分为从客户端和服务端两个不同的视角来看。

    • 从客户端来看,一致性主要指多并发访问时更新过的数据如何获取的问题。
    • 从服务端来看,则是如何将更新复制分布到整个系统,以保证数据的最终一致性问题。

可用性:即使是严重的网络错误,每个请求也必须终止

  1. 可用性是指“Reads and writes always succeed”,即服务一直可用,而且是在正常的响应时间内。对于一个可用性的分布式系统,每一个非故障的节点必须对每一个请求作出响应。也就是该系统使用的任何算法必须最终终止。
    • 当同时要求分区容错性时,这是一个很强的定义:即使是严重的网络错误,每个请求也必须终止。好的可用性主要是指系统能够很好地为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。通常情况下可用性和分布式数据冗余、负载均衡等有着很大的关联。

分区容错性:某节点故障,仍然能够对外提供满足一致性、可用性的服务

  1. 分区容错性指“The system continues to operate despite arbitrary message loss or failure of part of the system”,也就是指分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
    • 分区容错性和扩展性紧密相关。在分布式应用中,可能因为一些分布式的原因导致系统无法正常运转。好的分区容错性要求应用虽然是一个分布式系统,但看上去却好像是一个可以运转正常的整体。
    • 例如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,或者是机器之间有网络异常,将分布式系统分隔为独立的几个部分,各个部分还能维持分布式系统的运作,这样就具有好的分区容错性。

在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可

再细谈一下这个数据一致性:
随着业务的扩展,从单机架构到分布式架构。对于共享资源的访问再也不像单机时那么容易控制互斥访问了。我们就需要用到分布式锁来解决这个问题。

实现分布式锁的三种方式:

  1. 基于数据库实现分布式锁;
  2. 基于缓存(Redis等)实现分布式锁;
  3. 基于Zookeeper实现分布式锁;

数据库使用排他锁处理,而redis内置了分布式锁且性能较高,zookeeper有封装好的框架,以及等待锁的队列实现,不过性能低。
具体如何实现,就不在这里展开。

如何取舍

通过CAP理论,知道无法同时满足一致性、可用性和分区容错性这三个特性,那应该如何取舍呢?
(1)CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但其实分区始终会存在,因此CA的系统更多的是允许分区后各子系统依然保持CA。
(2)CP without A:如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。
(3)AP without C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。

2.3.3 BASE理论

基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventual Consistency)

丹·普里切特(Dan Pritchett)在对大规模分布式系统的实践总结过程中,提出了BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consistency)。
BASE是指基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventual Consistency)。

基本可用

基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。

软状态

软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。
分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。例如MySQL replication的异步复制就是这种体现。

最终一致性

最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。
弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
BASE和ACID的区别与联系是什么呢?ACID是传统数据库常用的设计理念,追求强一致性模型。BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。ACID和BASE代表了两种截然相反的设计哲学。在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此ACID和BASE又会结合使用。

2.3.4 最终一致性

强一致性、弱一致性、最终一致性
因果一致性、 Read-your-writes consistency、Session consistency、Monotonic read consistency、Monotonic write consistency

下面以上面的场景来描述下不同程度的一致性。

  1. 强一致性(即时一致性):假如A先写入了一个值到存储系统,存储系统保证后续A、B、C的读取操作都将返回最新值。
  2. 弱一致性:假如A先写入了一个值到存储系统,存储系统不能保证后续A、B、C的读取操作能读取到最新值。此种情况下有一个“时间窗口”的概念,它特指从A写入值,到后续操作A、B、C读取到最新值这一段时间。“时间窗口”类似时空穿梭门,不过穿梭门是可以穿越到过去的,而一致性窗口只能穿越到未来,方法很简单,就是“等会儿”。
  3. 最终一致性:是弱一致性的一种特例。假如A首先“写”了一个值到存储系统,存储系统保证如果在A、B、C后续读取之前没有其他写操作更新同样的值的话,最终所有的读取操作都会读取到A写入的最新值。此种情况下,如果没有失败发生的话,“不一致性窗口”的大小依赖于以下的几个因素:交互延迟,系统的负载,以及复制技术中复本的个数。最终一致性方面最出名的系统可以说是DNS系统,当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看到最新的值。

还有一些最终一致性的变体如下。

  • Causal consistency(因果一致性):如果Process A通知Process B它已经更新了数据,那么Process B的后续读取操作则读取A写入的最新值,而与A没有因果关系的C则可以最终一致性。
  • Read-your-writes consistency:如果Process A写入了最新的值,那么Process A的后续操作都会读取到最新值。但是其他用户可能要过一会才可以看到。
  • Session consistency:此种一致性要求客户端和存储系统交互的整个会话阶段保证Read-your- writes consistency。Hibernate的session提供的一致性保证就属于此种一致性。
  • Monotonic read consistency:此种一致性要求如果Process A已经读取了对象的某个值,那么后续操作将不会读取到更早的值。
  • Monotonic write consistency:此种一致性保证系统会序列化执行一个Process中的所有写操作。

2.3.5 一致性散列

1.基本概念
一致性散列算法(Consistent Hashing)最早在论文Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web中被提出。简单来说,一致性散列将整个散列值空间组织成一个虚拟的圆环。假设某散列函数H的值空间为0~2^32-1(即散列值是一个32位无符号整形),整个散列空间环如图所示。
云计算技术与应用 -基础概念与分布式计算_第8张图片

2.4 容错性和扩展性

(1)容错性

现假设Node C不幸宕机,可以看到此时对象A、B、D不会受到影响,只有C对象被重定位到Node D。一般来说,在一致性散列算法中,如果一台服务器不可用,则受影响的数据仅仅是此服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间的数据,其他不会受到影响,如图所示。

云计算技术与应用 -基础概念与分布式计算_第9张图片

(2)扩展性

如果在系统中增加一台服务器Node X,如图所示。
此时对象A、B、D不受影响,只有对象C需要重定位到新的Node X。一般来说,在一致性散列算法中,如果增加一台服务器,则受影响的数据仅仅是新服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间数据,其他数据也不会受到影响。
云计算技术与应用 -基础概念与分布式计算_第10张图片

(3)虚拟节点

一致性散列算法在服务节点太少时,容易因为节点分布不均匀而造成数据倾斜问题。例如系统中只有两台服务器,其环分布如图所示。
云计算技术与应用 -基础概念与分布式计算_第11张图片

3. 分布式系统的认识

3.1 分布式系统的基础知识

分布式系统(distributed system)是建立在网络之上的软件系统。

一个著名的分布式系统的例子是万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(Web页面)一样。

分布式系统的特性包括容错性、高可扩展性、开放性、并发处理能力和透明性。

3.1.1 分布式存储系统

分布式存储系统实例 : Hadoop

  1. Hadoop是由Apache基金会开发的分布式存储与计算框架。用户不需要了解底层的分布式计算原理就可以轻松开发出分布式计算程序,可以充分利用集群中闲置的计算资源,将集群的真正威力调动起来。
  2. Hadoop由两个重要模块组成。一个是Hadoop分布式文件系统(Hadoop Distributed File System),顾名思义,就是一个分布式的文件系统,可以将文件数据分布式地存储在集群中的不同节点上。另一个是MapReduce系统,是一个针对大量数据的分布式计算系统。

Hadoop特性

(1)高可靠性:Apache Hadoop可以可靠地将数据存储到节点上。
(2)高可扩展性:Apache Hadoop的存储和计算节点可以快速扩展,并自动进行负载均衡。
(3)高效性:一方面Apache Hadoop会自动在各个节点之间动态调动数据,保证每个节点存储均衡,另一方面读取数据时我们可以从不同节点并行读取,提高数据读取的速度。
(4)高容错性:Apache Hadoop会将数据冗余存储在不同节点上,保证数据容错性,计算任务失败时也会自动重新分配任务。
(5)低成本:Apache Hadoop是开源软件,可以节省商业软件的购买成本。同时,Apache Hadoop可以用廉价节点组成的集群取代昂贵的超级计算机,从而可以节省硬件成本。

Hadoop 分布式文件系统 HDFS

Hadoop分布式文件系统(HDFS)是一个主从式的分布式文件系统,是GFS的一种开源实现。HDFS可以利用大量廉价存储器组成分布式存储集群,取代昂贵的集中式磁盘存储阵列。而HDFS集群由一个NameNode和多个DataNode组成,除此之外还有用于热备份的Secondary NameNode,防止集群出现单点故障。

HDFS介绍

HDFS架构概述

NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。
DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。
Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份。

MapReduce模型:

  1. MapReduce既是Hadoop中的模块,也是一个计算模型。用户需要自己将算法划分成Map和Reduce两个阶段。首先将数据划分为小块的数据,将数据分配到不同计算节点的Map任务中计算,然后将计算结果汇总到Reduce节点中进行合并,得出最终结果。
  2. MapReduce系统也是主从式的计算系统。在使用YARN后,每个集群有一个Resource-Manager,用于管理整个集群。集群中每个计算节点都有一个NodeManager,负责管理某个节点的容器并监视其资源使用。每个应用程序由一个MRAppMaster进行管理。

分布式存储系统

  1. 分布式存储系统大致可分为5个子方向:结构化存储、非结构化存储、半结构化存储、In-memory 存储及NewSQL。
  2. 除了这5个子方向之外,分布式存储系统还有一系列的理论、算法、技术作为支撑,例如 Paxos、CAP理论、一致性散列、时钟技术、2PC、3PC等。

结构化存储

结构化存储的历史非常古老,典型的场景就是事务处理系统或者关系型数据库(RDBMS)。传统的结构化存储都是从单机做起的,例如大家耳熟能详的MySQL。MySQL的成长史就是互联网的成长史。除了MySQL之外,PostgreSQL也是近年来势头非常强劲的一个RDBMS。传统的结构化存储系统强调以下内容。

  1. 结构化的数据(例如关系表);
  2. 强一致性(例如银行系统,电商系统等场景);
  3. 随机访问(索引、增删查改、SQL)。

非结构化存储

与结构化存储不同的是,非结构化存储强调的是高可扩展性,典型的系统就是分布式文件系统。分布式文件系统也是一个很老的研究话题,例如20世纪70年代的Xerox Alto,80年代的NFS、AFS,90年代的xFS等。然而,这些早期的分布式文件系统只是起到了网络磁盘的作用,其最大的问题就是不支持容错和错误恢复。而Google在2003年SOSP会议上推出的GFS(Google File System)则走出了里程碑的一步,其开源实现对应为HDFS。

半结构化存储

半结构化存储的提出是为了解决结非结构化存储系统随机访问性能差的问题。我们通常会听到一些流行的名词,例如NoSQL、Key-Value Store,包括对象存储等。这些都属于半结构化存储研究的领域,其中以NoSQL的发展势头最为强劲。NoSQL系统既有分布式文件系统所具有的可扩展性,又有结构化存储系统的随机访问能力(例如随机操作),系统在设计时通常选择简单键值(K-V)进行存储,抛弃了传统RDBMS里复杂SQL查询及ACID事务。

In-memory存储

随着业务的并发越来越高,存储系统对低延迟的要求也越来越高。同时由于摩尔定律以及内存的价格不断下降,基于内存的存储系统也开始普及。顾名思义,In-memory存储就是将数据存储在内存中,从而获得读写的高性能。比较有名的系统包括Memcached和Redis。这些基于K-V键值系统的主要目的是为基于磁盘的存储系统做缓存。还有一些偏向于内存计算的系统,例如Distributed shared memory、RamCloud、Tachyon(Alluxio)项目等。

NewSQL

前面介绍结构化存储时提到,单机RDBMS系统在可扩展性上面临着巨大的挑战,然而NoSQL不能很好的支持关系模型。那有没有一种系统能兼备RDBMS的特性(例如,完整的SQL支持、ACID事务支持),又能像NoSQL系统那样具有强大的可扩展能力呢?2012年Google在OSDI会议上发表的Spanner,以及2013年在SIGMOD会议上发表的F1,让业界第一次看到了关系模型和NoSQL在超大规模数据中心上融合的可能性。不过由于这些系统大都过于复杂,没有工业界大公司的支持还是很难做出来的。

3.1.2 分布式计算系统

分布式计算和并行计算一样吗?
可以这样认为:

  1. 传统的并行计算的要求:投入更多机器,数据大小不变,计算速度更快。
  2. 分布式计算的要求:投入更多的机器,能处理更大的数据。

分布式计算概念

  1. 一个分布式系统包括若干通过网络互联的计算机。这些计算机互相配合以完成一个共同的目标(共同的目标称为“项目”)。
  2. 具体的过程是:将需要进行大量计算的项目数据分割成小块,由多台计算机分别计算,再上传运算结果后统一合并得出数据结论。
  3. 在分布式系统上运行的计算机程序称为分布式计算程序;分布式编程就是编写上述程序的过程。简单的来说,采用分布式计算的一组计算机组成的系统,叫做分布式计算系统。
  4. 分布式计算系统通常根据计算方式的不同,分为计算机集群系统和计算机网格系统。

传统基于消息的系统

这类系统里比较有代表性的就是MPI(Message Passing Interface)。目前比较流行的两个MPI实现是MPICH2和OpenMPI。MPI这个框架非常灵活,对程序的结构几乎没有太多约束,以至于人们有时把MPI称为一组接口API,而不是系统框架。MPI除了提供消息传递接口之外,其框架还实现了资源管理和分配,以及调度的功能。除此之外,MPI在高性能计算里也被广泛使用,通常可以和 Infiniband 这样的高速网络无缝结合。

MapReduce家族系统

这一类系统又称作Dataflow系统,其中以Hadoop MapReduce和Spark为代表。其实在学术界有很多类似的系统,例如Dryad、Twister等。这一类系统的特点是将计算抽象成为高层操作,例如像Map、Reduce、Filter这样的函数式算子,将算子组合成有向无环图DAG,然后由后端的调度引擎进行并行化调度。其中,MapReduce系统属于比较简单的DAG,只有Map和reduce两层节点。MapReduce这样的系统之所以可以扩展到超大规模的集群上运行,就是因为其完备的容错机制。在Hadoop社区还有很多基于MapReduce框架的衍生产品,例如Hive(一种并行数据库OLAP)、Pig(交互式数据操作)等。

Hadoop MapReduce核心思想与工作过程

图计算系统

图计算系统是分布式计算的另一个分支,这些系统都是把计算过程抽象成图,然后在不同节点分布式执行,例如PageRank这样的任务,很适合用图计算系统来表示。
大数据图是无法使用单台机器进行处理的,如果对大图数据进行并行处理,对于每一个顶点之间都是连通的图来讲,难以分割成若干完全独立的子图进行独立的并行处理。即使可以分割,也会面临并行机器的协同处理,以及将最后的处理结果进行合并等一系列问题。这需要图数据处理系统选取合适的图分割以及图计算模型来迎接挑战并解决问题。

基于状态的系统

这一类系统主要包括2010年在OSDI会议上推出的Piccolo,以及后来2012年在NIPS会议上 Google推出的开源机器学习系统DistBelief,再到后来被机器学习领域广泛应用的参数服务器(Parameter Server)架构。

实时流处理系统

实时流处理系统是为高效实时地处理流式数据而提供服务的,更关注数据处理的实时性,能够更加快速地为决策提供支持。流处理是由复杂事件处理(CEP)发展而来的,流处理模式包括两种:连续查询处理模式、可扩展数据流模式。

3.1.3 分布式资源管理系统

从支持离线处理的MapReduce,到支持在线处理的Storm,从迭代式计算框架Spark到流式处理框架S4,各种框架诞生于不同的公司或者实验室,它们各有所长,各自解决了某一类应用问题。而在大部分互联网公司中,这几种框架可能都会采用,例如对于搜索引擎公司,可能的技术方案如下:网页建索引采用MapReduce框架,自然语言处理/数据挖掘采用Spark(网页PageRank计算、聚类分类算法等),对性能要求很高的数据挖掘算法用MPI等。考虑到资源利用率、运维成本、数据共享等因素,公司一般希望将所有这些框架部署到一个公共的集群中,让它们共享集群的资源,并对资源进行统一使用,这样,便诞生了资源统一管理与调度平台,典型的代表是Mesos和YARN。

资源统一管理和调度平台具有以下特点:

1.支持多种计算框架
2.扩展性
3.容错性
4.高资源利用率
5.细粒度的资源分配

Hadoop核心组件系列-YARN工作流程详解

3.2 典型的分布式系统

1 网格系统

网格是一种能够将多组织拥有和管理的计算机、网络、数据库和科学仪器综合协同使用的基础设施。网格应用程序大多涉及需要跨越组织界限的可安全共享的大规模数据和/或计算资源。这使网格应用程序的管理和部署成为一项复杂的任务。在混杂的网格环境中,网格中间件为用户提供了无缝的计算能力和统一访问资源能力。目前,世界范围内已经发展有数个工具包和系统,其中大部分是学术研究项目的成果。

网格的概念

Globus定义网格为:一种能够整合的合作使用的由多家组织所拥有和管理的高端计算机、网络、数据库、实验设备的基础设施。
由Gridbus提出一种基于效能的网格定义:网格是一类并行、分布系统,能够在运行时动态分享、选择、聚合地理散布的自治资源,依据它们的可用性、能力、性能、代价以及用户对服务质量的需求。

网格的组成

云计算技术与应用 -基础概念与分布式计算_第12张图片

Globus工具包

Globus是一种研究网格环境中互操作的中间件技术,为科学和工程上的网格计算应用程序提供基本的支撑环境。它定义了构建计算网格的一组基本服务和功能,包括安全、资源管理、通信、目录管理等基本服务,被许多应用网格项目采用。

云计算技术与应用 -基础概念与分布式计算_第13张图片

2 P2P系统

对等网络系统(Peer-to-Peer),简称P2P系统,即媒体及公众所称的“点对点系统”,是一种应用在对等者(Peer)之间分配任务和工作负载的分布式应用架构的系统。对等网络的思想是:网络的所有参与者共享他们所拥有的一部分硬件资源,包括处理器资源、存储资源和网络资源等,这些共享资源可以通过网络被其他对等者直接访问并为之提供服务和内容。

P2P系统的性质

(1)高度分散化
(2)自组织性
(3)多管理域

P2P系统的特点

(1)部署低门槛
(2)有机增长
(3)对故障与攻击的恢复力
(4)资源的丰富性与多样性

对等网络应用

(1)共享及分发文件
(2)流媒体
(3)电话
(4)志愿计算

3 透明计算

透明计算是一种用户无须感知计算机操作系统、中间件、应用程序和通信网络的具体所在,只需根据自己的需求,通过网络从所使用的各种终端设备(包括固定、移动及家庭中的各类终端设备)中选择并使用相应服务(例如计算、电话、电视、上网和娱乐等)的计算模式。

云计算技术与应用 -基础概念与分布式计算_第14张图片

透明计算的核心技术

(1)透明云架构

云计算技术与应用 -基础概念与分布式计算_第15张图片
(2)元操作系统(Meta OS)
(3)客户端实现
云计算技术与应用 -基础概念与分布式计算_第16张图片

4 区块链系统

区块链(Blockchain)是一种去中心化、不可篡改、可追溯、多方共同维护的分布式数据库系统,能够将传统单方维护的仅涉及自己业务的多个孤立数据库整合在一起,分布式地存储在多方共同维护的多个节点,任何一方都无法完全控制这些数据,只能按照严格的规则和共识进行更新,从而实现了可信的多方间的信息共享和监督,避免了烦琐的人工对账,提高了业务处理效率,降低了交易成本。

Web3.0 分布式存储(上集) 区块链的应用和新基建

区块链的核心特征

① 块链结构:每一块有时间戳,每一块都含有前面一块的散列加密信息,对每个交易进行验证。
② 多独立拷贝存储:区块链系统的每个节点都存储同样信息。
③ 拜占庭容错:容忍少于1/3 节点恶意作弊或被黑客攻击,系统仍然能够正常工作。

区块链模式

(1)模式1:①、②、③+ P2P + 挖矿。
(2)模式2:①、②、③+ P2P + 挖矿 + 默克尔-帕特里夏树(Merkel Patricia tree)
云计算技术与应用 -基础概念与分布式计算_第17张图片

你可能感兴趣的