云计算主流解决方案主流解决方案厂商的发展策略及现状主流解决方案——Google云计算•数据存储在“云”中•数据访问不受地理位置限制•数据能够很方便的共享Google云计算技术具体包括:•Google文件系统海量数据分布存储技术(GFS)、•分布式计算编程模型MapReduce、•分布式锁服务Chubby•分布式结构化数据存储系统Bigtable等。主流解决方案——Google云计算Google需要一个支持海量存储的文件系统购置昂贵的分布式文件系统与硬件?Google设计GFS的动机是否可以在一堆廉价且不可靠的硬件上构建可靠的分布式文件系统?5为什么不使用当时现存的文件系统?Google所面临的问题与众不同不同的工作负载,不同的设计优先级(廉价、不可靠的硬件)需要设计与Google应用和负载相符的文件系统Google设计GFS的动机6一个适用于大规模分布式数据处理相关应用的,可扩展的分布式文件系统。它基于普通的不算昂贵的硬件设备,实现了容错的设计,并且为大量客户端提供极高的聚合处理性能。GFSGFS的假设与目标硬件出错是正常而非异常系统应当由大量廉价、易损的硬件组成必须保持文件系统整体的可靠性主要负载是流数据读写主要用于程序处理批量数据,而非与用户的交互或随机读写数据写主要是“追加写”,“插入写”非常少需要存储大尺寸的文件存储的文件尺寸可能是GB或TB量级,而且应当能支持存储成千上万的大尺寸文件7将文件划分为若干块(Chunk)存储每个块固定大小(64M)通过冗余来提高可靠性每个数据块至少在3个数据块服务器上冗余数据块损坏概率?通过单个master来协调数据访问、元数据存储结构简单,容易保持元数据一致性无缓存GFS的设计思路8GFS将容错的任务交给文件系统完成,利用软件的方法解决系统可靠性问题,使存储的成本成倍下降。GFS将服务器故障视为正常现象,并采用多种方法,从多个角度,使用不同的容错措施,确保数据存储的安全、保证提供不间断的数据存储服务。GFS架构是怎样的?GFS系统架构Client(客户端):应用程序的访问接口Master(主服务器):管理节点,在逻辑上只有一个,保存系统的元数据,负责整个文件系统的管理ChunkServer(数据块服务器):负责具体的存储工作。数据以文件的形式存储在ChunkServer上控制流状态流IO并行需要存储的数据种类繁多:Google目前向公众开放的服务很多,需要处理的数据类型也非常多。包括URL、网页内容、用户的个性化设置在内的数据都是Google需要经常处理的海量的服务请求:Google运行着目前世界上最繁忙的系统,它每时每刻处理的客户服务请求数量是普通的系统根本无法承受的商用数据库无法满足Google的需求:一方面现有商用数据库设计着眼点在于通用性,根本无法满足Google的苛刻服务要求;另一方面对于底层系统的完全掌控会给后期的系统维护、升级带来极大的便利设计动机分布式结构化数据表Bigtable设计动机与目标基本目标高可用性Bigtable设计的重要目标之一就是确保几乎所有的情况下系统都可用广泛的适用性Bigtable是为了满足系列Google产品而非特定产品存储要求简单性底层系统简单性既可减少系统出错概率,也为上层应用开发带来便利很强的可扩展性根据需要随时可以加入或撤销服务器数据模型Bigtable是一个分布式多维映射表,表中的数据通过一个行关键字(RowKey)、一个列关键字(ColumnKey)以及一个时间戳(TimeStamp)进行索引Bigtable对存储在其中的数据不做任何解析,一律看做字符串Bigtable的存储逻辑可以表示为:“内容:”“锚点:cnnsi.com”“锚点:my..look.ca”“com.cnn.”“html…”“html…”“html…”“CNN.com”“CNN”t3t5t6t8t9Bigtable数据模型(row:string,column:string,time:int64)→string数据模型行Bigtable的行关键字可以是任意的字符串,但是大小不能超过64KB。Bigtable和传统的关系型数据库有很大不同,它不支持一般意义上的事务,但能保证对于行的读写操作具有原子性(Atomic)表中数据都是根据行关键字进行排序的,排序使用的是词典序。一个典型实例,其中com.cnn.就是一个行关键字。不直接存储网页地址而将其倒排是Bigtable的一个巧妙设计。这样做至少会带来以下两个好处同一地址域的网页会被存储在表中的连续位置,有利于用户查找和分析倒排便于数据压缩,可以大幅提高压缩率“内容:”“锚点:cnnsi.com”“锚点:my..look.ca”“com.cnn.”“html…”“html…”“html…”“CNN.com”“CNN”t3t5t6t8t9由于规模的问题,单个的大表不利于数据处理,因此Bigtable将一个表分成了多个子表,每个子表包含多个行。子表是Bigtable中数据划分和负载均衡的基本单位。数据模型列Bigtable并不是简单地存储所有的列关键字,而是将其组织成所谓的列族(ColumnFamily),每个族中的数据都属于同一个类型,并且同族的数据会被压缩在一起保存。引入了列族的概念之后,列关键字就采用下述的语法规则来定义:族名:限定词(family:qualifier)族名必须有意义,限定词则可以任意选定图中,内容(Contents)、锚点(Anchor)都是不同的族。而cnnsi.com和my.look.ca则是锚点族中不同的限定词族同时也是Bigtable中访问控制(AccessControl)基本单元,也就是说访问权限的设置是在族这一级别上进行的“内容:”“锚点:cnnsi.com”“锚点:my..look.ca”“com.cnn.”“html…”“html…”“html…”“CNN.com”“CNN”t3t5t6t8t9数据模型时间戳为了简化不同版本的数据管理,Bigtable目前提供了两种设置:一种是保留最近的N个不同版本,图中数据模型采取的就是这种方法,它保存最新的三个版本数据。另一种就是保留限定时间内的所有不同版本,比如可以保存最近10天的所有不同版本数据。失效的版本将会由Bigtable的垃圾回收机制自动处理Google的很多服务比如网页检索和用户的个性化设置等都需要保存不同时间的数据,这些不同的数据版本必须通过时间戳来区分。系统架构Bigtable主服务器Bigtable客户端Bigtable客户端程序库Bigtable子表服务器Bigtable子表服务器Bigtable子表服务器处理数据处理数据处理数据GoogleWorkQueueGFSChubby执行Open()操作负责故障处理及监控保存子表数据及日志负责元数据存储及主服务器的选择执行元数据操作及负载平衡一个分布式的任务调度器,主要被用来处理分布式系统队列分组和任务调度Bigtable主服务器Bigtable客户端Bigtable客户端程序库Bigtable子表服务器Bigtable子表服务器Bigtable子表服务器处理数据处理数据处理数据GoogleWorkQueueGFSChubby执行Open()操作负责故障处理及监控保存子表数据及日志负责元数据存储及主服务器的选择执行元数据操作及负载平衡系统架构在Bigtable中Chubby主要有以下几个作用:(1)选取并保证同一时间内只有一个主服务器(MasterServer)(2)获取子表的位置信息(3)保存Bigtable的模式信息及访问控制列表另外在Bigtable的实际执行过程中,Google的MapReduce等技术也被用来改善其性能Bigtable主服务器Bigtable客户端Bigtable客户端程序库Bigtable子表服务器Bigtable子表服务器Bigtable子表服务器处理数据处理数据处理数据GoogleWorkQueueGFSChubby执行Open()操作负责故障处理及监控保存子表数据及日志负责元数据存储及主服务器的选择执行元数据操作及负载平衡系统架构Bigtable主要由三个部分组成:客户端程序库(ClientLibrary)、一个主服务器(MasterServer)和多个子表服务器(TabletServer)客户访问Bigtable服务时,首先要利用其库函数执行Open()操作来打开一个锁(实际上就是获取了文件目录),锁打开以后客户端就可以和子表服务器进行通信和许多具有单个主节点分布式系统一样,客户端主要与子表服务器通信,几乎不和主服务器进行通信,这使得主服务器的负载大大降低主服务主要进行一些元数据操作以及子表服务器之间负载调度问题,实际数据是存储在子表服务器上主流解决方案——IBM云计算IBM在IaaS(基础架构即服务)、PaaS(平台即服务)、SaaS(软件即服务)三个层面都有方案推出,公有云、私有云、混合云一个不落主流解决方案——Amazon云计算Amazon提供了弹性虚拟平台,采用Xen虚拟化技术作为核心,提供了包括弹性计算云EC2、简单存储服务S3、数据库服务SimpleDB在内的企业服务,系统是开源的。EC2基本架构Amazon提供的云计算服务:主流解决方案——Amazon云计算弹性计算云EC2简单存储服务S3简单队列服务SQS简单数据库服务SimpleDB内容推送服务CloudFront灵活支付服务FPS电子商务服务DevPay弹性MapReduce服务主流解决方案——微软云计算解决方案微软提供两种云计算部署类型,即公共云和私有云。公共云:由微软自己运营,为客户提供部署和应用服务。在公共云中,WindowsAzurePlatform是一个高度可扩展的服务平台,提供基于微软数据中心的随用随付费的灵活的服务模式。私有云:部署在客户的数据中心内部,基于客户个性化的性能和成本要求、面向服务的内部应用环境。这个云平台基于成熟的WindowsServer和SystemCenter等系列产品,并且能够与现有应用程序兼容。