各种虚拟化、效用计算、服务计算、网格计算、自动计算等概念的混合演进并集大成之结果
通俗的说:云计算像在每个不同地区开设不同的自来水公司,没有地域限制,优秀的云软件服务商,向世界每个角落提供软件服务——就像天空上的云一样,不论你身处何方,只要你抬头,就能看见!
专业的说:以互联网为中心,在网站上提供快速且安全的云计算服务与数据存储,让每一个使用互联网的人都可以使用网络上的庞大计算资源与数据中心。
云计算与集中计算的一个重要的区别是其面向的用户群体不同
按照用户实际使用的资源量对用户进行计费
云计算提供的这个“远程服务器”具有无限的计算能力、容量等
一组计算机来达到单个目的
软件即服务
个人计算机可以完成绝大部分的个人计算需求
多台计算机共同完成一个任务
针对复杂的科学计算
软件即服务.用户无需购买软件,转为租用
总体来看,云计算至少有以下四个优势:
通过对云计算方案的特征进行归纳和分析,可发现这些方案所提供的云服务有着显著的公共特征,这些特征也使云计算明显区别于传统的服务。
1.弹性伸缩
2.快速部署
3.资源抽象
4.按用量收费
5.宽带访问
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)
加快计算速度
面向服务体系结构
SOA是设计和开发软件的原则和方法
摆脱现实情况下物理资源所具有的各种限制
SaaS(软件即服务)、PaaS(平台即服务)和IaaS(基础设施即服务)
两种云体逻辑结构
数据中心
数据中心的功能划分
集中式计算与分布式计算
(1)集中式计算
集中式计算完全依赖于一台大型的中心计算机的处理能力,这台中心计算机称为主机(Host或mainframe),与中心计算机相连的终端设备具有各不相同非常低的计算能力。实际上大多数终端完全不具有处理能力,仅作为输入输出设备使用。
(2)分布式计算
与集中式计算相反,分布式计算中,多个通过网络互联的计算机都具有一定的计算能力,它们之间互相传递数据,实现信息共享,协作共同完成一个处理任务。
分布式计算就是在两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。
了解分布式计算
分布式计算比起其他算法具有以下几个优点。
分摊计算、划分子任务分配节点。
分布式计算就是将计算任务分摊到大量的计算节点上,一起完成海量的计算任务。而分布式计算的原理和并行计算类似,就是将一个复杂庞大的计算任务适当划分为一个个小任务,任务并行执行,只不过分布式计算会将这些任务分配到不同的计算节点上,每个计算节点只需要完成自己的计算任务即可,可以有效分担海量的计算任务。而每个计算节点也可以并行处理自身的任务,更加充分利用机器的CPU资源。最后再将每个节点的计算结果汇总,得到最后的计算结果。
一副扑克帮你理解分布式计算基本原理
分布式计算一般分为以下几步:
ACID是数据库事务正常执行的四个原则,分别指原子性、一致性、独立性及持久性。
A(Atomicity)—原子性
C(Consistency)—一致性
I(Isolation)—独立性
D(Durability)—持久性
一个分布式系统最多只能同时满足一致性、可用性和分区容错性这三项中的两项
2000年7月,加州大学伯克利分校的埃里克·布鲁尔(Eric Brewer)教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的塞思·吉尔伯符(Seth Gilbert)和南希·林奇(Nancy Lynch)从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。 一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项,如图2.1所示
一致性:在所有节点的数据保持一致
一致性指“All nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。对于一致性,可以分为从客户端和服务端两个不同的视角来看。
可用性:即使是严重的网络错误,每个请求也必须终止
分区容错性:某节点故障,仍然能够对外提供满足一致性、可用性的服务
在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可
再细谈一下这个数据一致性:
随着业务的扩展,从单机架构到分布式架构。对于共享资源的访问再也不像单机时那么容易控制互斥访问了。我们就需要用到分布式锁来解决这个问题。
实现分布式锁的三种方式:
- 基于数据库实现分布式锁;
- 基于缓存(Redis等)实现分布式锁;
- 基于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都属于此类。
基本可用(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又会结合使用。
强一致性、弱一致性、最终一致性
因果一致性、 Read-your-writes consistency、Session consistency、Monotonic read consistency、Monotonic write consistency
下面以上面的场景来描述下不同程度的一致性。
还有一些最终一致性的变体如下。
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位无符号整形),整个散列空间环如图所示。
(1)容错性
现假设Node C不幸宕机,可以看到此时对象A、B、D不会受到影响,只有C对象被重定位到Node D。一般来说,在一致性散列算法中,如果一台服务器不可用,则受影响的数据仅仅是此服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间的数据,其他不会受到影响,如图所示。
(2)扩展性
如果在系统中增加一台服务器Node X,如图所示。
此时对象A、B、D不受影响,只有对象C需要重定位到新的Node X。一般来说,在一致性散列算法中,如果增加一台服务器,则受影响的数据仅仅是新服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间数据,其他数据也不会受到影响。
(3)虚拟节点
一致性散列算法在服务节点太少时,容易因为节点分布不均匀而造成数据倾斜问题。例如系统中只有两台服务器,其环分布如图所示。
分布式系统(distributed system)是建立在网络之上的软件系统。
一个著名的分布式系统的例子是万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(Web页面)一样。
分布式系统的特性包括容错性、高可扩展性、开放性、并发处理能力和透明性。
分布式存储系统实例 : Hadoop
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模型:
分布式存储系统
结构化存储
结构化存储的历史非常古老,典型的场景就是事务处理系统或者关系型数据库(RDBMS)。传统的结构化存储都是从单机做起的,例如大家耳熟能详的MySQL。MySQL的成长史就是互联网的成长史。除了MySQL之外,PostgreSQL也是近年来势头非常强劲的一个RDBMS。传统的结构化存储系统强调以下内容。
非结构化存储
与结构化存储不同的是,非结构化存储强调的是高可扩展性,典型的系统就是分布式文件系统。分布式文件系统也是一个很老的研究话题,例如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在超大规模数据中心上融合的可能性。不过由于这些系统大都过于复杂,没有工业界大公司的支持还是很难做出来的。
分布式计算和并行计算一样吗?
可以这样认为:
分布式计算概念
传统基于消息的系统
这类系统里比较有代表性的就是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)发展而来的,流处理模式包括两种:连续查询处理模式、可扩展数据流模式。
从支持离线处理的MapReduce,到支持在线处理的Storm,从迭代式计算框架Spark到流式处理框架S4,各种框架诞生于不同的公司或者实验室,它们各有所长,各自解决了某一类应用问题。而在大部分互联网公司中,这几种框架可能都会采用,例如对于搜索引擎公司,可能的技术方案如下:网页建索引采用MapReduce框架,自然语言处理/数据挖掘采用Spark(网页PageRank计算、聚类分类算法等),对性能要求很高的数据挖掘算法用MPI等。考虑到资源利用率、运维成本、数据共享等因素,公司一般希望将所有这些框架部署到一个公共的集群中,让它们共享集群的资源,并对资源进行统一使用,这样,便诞生了资源统一管理与调度平台,典型的代表是Mesos和YARN。
资源统一管理和调度平台具有以下特点:
1.支持多种计算框架
2.扩展性
3.容错性
4.高资源利用率
5.细粒度的资源分配
Hadoop核心组件系列-YARN工作流程详解
网格是一种能够将多组织拥有和管理的计算机、网络、数据库和科学仪器综合协同使用的基础设施。网格应用程序大多涉及需要跨越组织界限的可安全共享的大规模数据和/或计算资源。这使网格应用程序的管理和部署成为一项复杂的任务。在混杂的网格环境中,网格中间件为用户提供了无缝的计算能力和统一访问资源能力。目前,世界范围内已经发展有数个工具包和系统,其中大部分是学术研究项目的成果。
网格的概念
Globus定义网格为:一种能够整合的合作使用的由多家组织所拥有和管理的高端计算机、网络、数据库、实验设备的基础设施。
由Gridbus提出一种基于效能的网格定义:网格是一类并行、分布系统,能够在运行时动态分享、选择、聚合地理散布的自治资源,依据它们的可用性、能力、性能、代价以及用户对服务质量的需求。
网格的组成
Globus工具包
Globus是一种研究网格环境中互操作的中间件技术,为科学和工程上的网格计算应用程序提供基本的支撑环境。它定义了构建计算网格的一组基本服务和功能,包括安全、资源管理、通信、目录管理等基本服务,被许多应用网格项目采用。
对等网络系统(Peer-to-Peer),简称P2P系统,即媒体及公众所称的“点对点系统”,是一种应用在对等者(Peer)之间分配任务和工作负载的分布式应用架构的系统。对等网络的思想是:网络的所有参与者共享他们所拥有的一部分硬件资源,包括处理器资源、存储资源和网络资源等,这些共享资源可以通过网络被其他对等者直接访问并为之提供服务和内容。
P2P系统的性质
(1)高度分散化
(2)自组织性
(3)多管理域
P2P系统的特点
(1)部署低门槛
(2)有机增长
(3)对故障与攻击的恢复力
(4)资源的丰富性与多样性
对等网络应用
(1)共享及分发文件
(2)流媒体
(3)电话
(4)志愿计算
透明计算是一种用户无须感知计算机操作系统、中间件、应用程序和通信网络的具体所在,只需根据自己的需求,通过网络从所使用的各种终端设备(包括固定、移动及家庭中的各类终端设备)中选择并使用相应服务(例如计算、电话、电视、上网和娱乐等)的计算模式。
透明计算的核心技术
(1)透明云架构
区块链(Blockchain)是一种去中心化、不可篡改、可追溯、多方共同维护的分布式数据库系统,能够将传统单方维护的仅涉及自己业务的多个孤立数据库整合在一起,分布式地存储在多方共同维护的多个节点,任何一方都无法完全控制这些数据,只能按照严格的规则和共识进行更新,从而实现了可信的多方间的信息共享和监督,避免了烦琐的人工对账,提高了业务处理效率,降低了交易成本。
Web3.0 分布式存储(上集) 区块链的应用和新基建
区块链的核心特征
① 块链结构:每一块有时间戳,每一块都含有前面一块的散列加密信息,对每个交易进行验证。
② 多独立拷贝存储:区块链系统的每个节点都存储同样信息。
③ 拜占庭容错:容忍少于1/3 节点恶意作弊或被黑客攻击,系统仍然能够正常工作。
区块链模式
(1)模式1:①、②、③+ P2P + 挖矿。
(2)模式2:①、②、③+ P2P + 挖矿 + 默克尔-帕特里夏树(Merkel Patricia tree)