云计算涵盖了分布式计算,并行计算和网格计算,分布式用于存储,并行用于处理,网格用于共享。

云计算就是一群服务器用于保存数据并处理数据。

云计算的商业模式就是通过出租存储空间及数据处理服务给用户来获取利润,云计算的好处就是成本低,资源集中可共享。云计算存储数据更多地注重数据的可靠性,一般会增加数据冗余来保证数据的可靠性,例如有多个数据备份。

云计算模型是一种生产者-消费者模型,网格计算模型是资源共享模型,可以从下面的图看出它们的区别:

1、云计算结构图

对云计算的认识

2、网格计算结构图

对云计算的认识

 

云计算的数据存储技术常用的有Google开发的GFS(Google File System)和Hadoop开发的HDFS(Hadoop Distributed File System。

1、GFS:管理大型分布式数据密集型计算且可扩展的分布式文件系统。它使用廉价商用硬件搭建系统,并且提供容错的高性能服务。它与普通的分布式文件系统区别见下图,

对云计算的认识

GFS由一个Master和大量块服务器组成,Master存放元数据,GFS中文件被切成64MB的块来存储。GFS通过数据冗余来保证数据的可靠性,每个数据会被备份至少3份,为了保证数据的一致性,当数据进行修改时会对所有备份都进行修改,通过版本号来保持备份的一致性。读操作不在Master上进行,读取数据时只是从Master上获取目标数据块的位置,然后去块服务器上读取。写操作首先在Master上获取授权,然后把需要写入的数据分发给所有数据备份,每个数据备份获得写入数据后发信号告诉主备份已获得,当所有数据备份获取写入数据后,主数据备份将这一信号告诉用户端,用户端发出写入信号给主备份,主备份把信号发给所有备份,每个数据备份写入完成后发信号告诉主备份,当所有数据备份写入完成后,主备份发送信号告诉用户端数据写入完毕。

云计算的数据管理技术有名的有Google开发的BigTable。

1、BigTable:管理结构化数据的分布式存储系统,它可以管理数千台商用服务器上PB规模的数据。它对读操作进行了优化,采用列存储方式,它的数据存储格式为<row: string, column: string, time: int64> -> string,基本元素即行,列,时间戳,记录板,记录板是一段行的集合体。BigTable中的数据项按照行的字典序排列,每一行会动态划分到不同的记录板中,每个节点管理大约100个记录板,时间戳是一个64位的整数,用于表示数据项的版本。BigTable在执行时有三个主要组件,链接到客户端的库,主服务器,记录板服务器。主服务器用来分配记录板到记录板服务器,做负载均衡和垃圾回收等。记录板服务器用来管理记录板,处理读写请求等。BigTable使用三层来存储数据位置信息,第一层叫Chubby file,存储Root Tablet的位置信息;第二层是Root Tablet,存储MetaData Tablet的位置信息,第三层就是MetaData Tablet,包含了许多User Table的位置信息,而User Table就是具体存储数据的地方。

云计算的编程模型大多数是基于Map-Reduce的,所谓Map-Reduce就是把一个大的任务分解成多个小任务,然后由多台服务器并行处理,最后再把结果归纳整合得出最终结果。它是一种并行计算的编程模型,用于任务调度及执行。主要实现两个函数,Map函数和Reduce函数,Map函数定义处理分块数据的方法,Reduce函数定义对Map函数处理后的中间结果进行归纳和整合。Map-Reduce程序会自动将数据分块,将Map作业和Reduce作业分配到各个工作进程并调度各个工作进程,同时还会自动处理异常和出错。Map-Reduce的工作流程如下图:

对云计算的认识

 1、Map-Reduce库把输入数据分成N份,把用户程序进程拷贝成M份,分别放入不同的服务器中,其中一个拷贝的进程是Master,其他是worker,Master用于调度管理worker,比如给空闲的worker分配Map或者Reduce作业。Map和Reduce作业是由用户自己实现的。数据分块数和进程拷贝数可以由用户进行配置。

2、被分配Map作业的worker进程,会读取相对应的输入数据块,每份输入数据块都有一个键值对,当Map作业处理完分块数据后,会把中间结果存入一个新的键值对中,并把这个新的键值对先缓存在内存中,并定期写入本地磁盘中,这些新键值对会被放入不同的区,每个区有一个执行Reduce作业的工作进程对应。这些新键值对的位置信息会被通报给Master,并由Master把位置信息发送给对应的执行Reduce作业的工作进程。执行Reduce作业的工作进程会把这些键值对先排序然后再作整合,并把结果输出到一个结果文件里。最终会产生多个输出文件,用户可以把这些文件作为输入再调用另一个Map-Reduce程序,也可以作合并处理。

需要注意的是,Map和Reduce作业会调用多次Map和Reduce函数来处理数据。

Map-Reduce程序对于错误处理有

1、worker发生错误时,屏蔽该worker,并将上面的程序移至其它worker上执行,该过程由Master控制。

2、Master发生错误时,根据检查点来更换Master。

云计算这三大技术目前主要由Google和Hadoop做了实现,Map-Reduce的实现Google用的是C++,Hadoop用的是Java。两者三大技术结构差不多,Google是GFS+BigTable+Map-Reduce,Hadoop是HDFS+HBase+Map-Reduce。

云计算可以解决的问题:

1、大数据的快速处理及分析

2、降低普通用户使用高性能计算能力的门槛,即可以提供廉价的高性能计算能力

3、使普通用户可以接触到海量数据并根据自己的需求进行处理

云计算现有的问题:

1、云计算提供商接口不一致,没有一个接口的统一标准,导致服务提供商无法将服务统一部署在不同的云计算提供商处以避免DDoS(Distributed Denial of Service)攻击。

2、安全性

3、数据传输瓶颈

Shared nothing架构是一种分布式计算架构,架构中每个节点都是独立自主的与其它节点不共享,没有单点竞争。BigTable和Map-Reduce都采用了这种架构。

云计算有三种服务模式,即IaaS,PaaS和SaaS:

1、IaaS(Infrastructure as a Service,基础架构即服务)是通过云计算提供一些基础的数据和软硬件服务,例如提供服务器、操作系统、磁盘存储和数据库等,具体例子有Amazon的AWS,腾讯也推出了IaaS服务模式的云计算。

2、PaaS(Platform as a Service,平台即服务)是提供一个基础软件架构即平台,然后允许开发人员基于这样一个平台来构建自己的应用,具体例子有Google的App Engine,微软的Azure,国内的百度,阿里也提供了这样的平台服务。

3、SaaS(Software as a Service,软件即服务)是最成熟,应用最广的服务模式,即通过软件或者应用来提供云计算服务,比如Google的Gmail,Google地图等。

使用云计算需要注意什么?

1、自己的需求

2、网络带宽

3、安全性

4、云计算提供商能否提供稳定持久的服务,他们的服务发展方向是否和你的需求吻合。