简介:Windows Azure Storage(WAS)是微软的一种分布式云存储系统,允许用户在上面存储数据,并且存储空间可以无限增长(表面上)。WAS中,数据存储在分布式系统中。WAS可以存储Blobs(文件),tables(结构化存储),Queues(消息队列),这篇文章主要总结了WAS的架构,全局定义和一些数据模型。
关键词:云计算,分布式存储系统,Windows Azure
第一部分:介绍
WAS是一种可扩展的的云存储技术,在2008年开始时上线,在微软的内部开始使用。WAS给出的格式是Blobs(文件),tables(结构化存储),Queues(消息队列),这三种格式的数据几乎提供了所有的存储形式,可以应用到大多数的应用中,最常见的一种存入取出的形式就是blobs,也就是各种形式的文件数据。queue提供了数据流的形式,最终也是以blob和tables的形式存储。
一个例子,构建在WAS中的一个引擎可以提供近乎实时的Facebook和Twitter的搜索服务。这种服务是一种大数据流水线计算的一部分,来提供可搜索的内容(15秒内用户的消息和状态更新),内容还是以blobs存储。引擎可以解析用户的各种信息记录等,分类。信息被分类整理好以后,交给bing引擎去搜索。这个解析引擎会使用queue来管理流数据,做索引以及发送给搜索引擎的耗时。在这篇论文发表的时候,FB和T已经存储了350TB在WAS中了。引擎的处理峰值达到40,000次处理每秒,2,3billion次每天。
WAS的构建过程中,内部和外部用户的反馈是驱动产品的发展的主要动力。一些关键的思路有:1.存储相容性,一些企业用户特别强调数据的读写删除操作的高并发性,WAS提供了三个CAP 定理链很难同时实现的三个属性:存储相容性,高可用性,平衡性。2.通用的可扩展的名字空间,WAS可以提供大规模数据存储的命名空间。3.灾难恢复,WAS把用户数据分别存储在距离上百公里的不同数据中心,以保证数据的可恢复性。4.多种租用协议,为了减轻用户的花费,WAS把许多用户的数据存储在一起。
第二部分:命名空间
目的是提供简单的通用命名空间,允许用户按照地址去查找他们所存储的数据,并且该命名空间必须可扩展,保证大规模的数据存储。我们使用一种杠杆DNS来作为命名空间的一部分,存储命名空间被分成三部分,账号名,分组名,文件名,这样的话,所有的文件都可以通过URI来访问。
例如,http(s)://AccountName.<service>.core.windows.net/PartitionName/ObjectName
把账户名加到DNS中,可以把用户迅速定位到他数据所在的存储中心,当请求到达数据中心的时候,分组名可以通过节点去定位数据,文件名则用来区分文件内容。
对于blobs来说,blobs名字就是partition name,对于表来说,表中的每一行数据的PK由PartitionName和ObjectName组成。允许用户把相同partitionName的自动分组,对于queue来书,queueName就是partitionName,每一条消息名字是objName
第三部分:高水平的体系架构
3.1云平台
云平台上运行着许多云服务,跨数据中心,跨地理位置。WAFC(windows azure组织控制器)是一个资源调度管理层提供资源分配调度以及管理。WAS就是运行在WAFC顶部的服务。WAFC给WAS提供节点管理,网络配置,状态监控,开启关闭云服务实例,以及调度。WAS网络拓扑信息,分布簇的物理层以及节点的硬件配置。WAS响应硬盘之间的数据移动,复制的管理,以及应用在存储簇上的下载平衡。
3.2WAS的架构组件
WAS的特点就是提供巨大的数据存储空间。现在有70P字节的存储,到2012年可以根据用户的需求提供上百P字节的空间。
StorageStamp 是一簇拥有N个存储节点的载体,每个载体都是单独的拥有冗余网络和电源的的错误保护机制。每个簇一般有10-20个载体,每个载体18个存储节点。我们第一代StorageStamp有大约2PB的存储空间,下一代会有30PB的空间。
为了能够提供低成本的存储服务,需要把存储空间高度利用起来,我们的目标是保持一个storage stamp大约70%的利用率,包括空间,处理,带宽。之所以避免高于80%是因为我们要保持20%的空间为了加快刺眼的寻道速度。当一个storage stamp利用率达到70%的时候,就利用inter-stamp转移到其他的stamp上。
Location Service 位置服务提供所有stamp的管理。同时也响应不同的stamp之间的名字空间的管理,把账户名分配到各个stamp上,管理stamp之间的灾难恢复和负载平衡,它自己也放在两个不同的地理位置来防止本身的灾难。
WAS在三个地域提供服务北美,欧洲,亚洲。每个地方都是一个拥有一栋或者数栋大楼的数据中心,每个数据中心有多个stamp。为了提供增加空间的能力,位置服务器可以很容易的增加新的区域,或者地点到地区,stamp到地点。因此在我们希望的数据的地方,增加更多的stamp来满足。LS可以分配新用户到一个stamp,也可以把用户从老的stamp移动到新的stamp。上面的表1显示了有2个stamp的情况。LS会追踪每个stamp的资源利用情况,指定stamp之间的关系。LS通过所有stamp的负载信息,带宽信息,处理能力来采用启发式的方法来分配用户。LS会让某个stamp接受用户的注册,然后增加该用户的路由信息。
3.3Storage Stamp的三层
数据流层:该层储存数据在硬盘上,负责分布,复制数据在许多的服务之间来保持storage stamp之中数据的可用性,这一层可以被想象成分布式文件系统层。它能够知道如何存储他们,如何复制他们。但是不能理解高级的数据结构和他们的语义。虽然是存储在该层,但是只能通过隔离层来访问他们。事实上,守护进程处于隔离层,数据流服务被定为在每个存储节点上。
隔离层:隔离层可以(a)管理和理解高层的数据结构(blob,table,queue),(b)提供一个可扩展的名字空间,(c)提供文件的处理顺序和存储一致性,(d)在数据流层之上管理存储(e)做cach来减少IO。该层的另一个责任是完成一个stamp之内的可扩展性。根据之前描述的,每个文件都有一个隔离层名,这一层管理有哪些隔离层的服务可以提供给什么样的隔离层名(blob,table,queue)。另外,提供服务器之间自动的负载平衡。
前端层:前端层由一系列的无状态服务器组成来处理请求。每当接收到一个请求,该层便会寻找用户账户,认证请求,把请求路由到隔离层服务器。这个系统主要保持一个隔离服务器的地图来追踪隔离名。前端服务器会缓存该信息来响应每个请求,有时候为了提高效率,也会直接请求数据流层的数据。
3.4两个响应引擎
简单介绍一下两个引擎,以及他们的不同职责。
Intra-stamp replication(stream layer)stamp内部的请求响应,提供同步的响应请求确保所有输入的数据被保存起来。根据不同的节点来提供足够的备份数据来保证数据的正确性和可用性(各种磁盘,节点出错)。这个引擎完全处于数据流层。当一个处理请求被成功执行完毕,成功信息被返回到用户。
Inter-stamp replication 这个系统提供异步的请求,负责跨stamp的数据处理。这种处理请求一般在后台,这种处理在目标层,也就是结构化的文件上,整个文件的处理,最近数据的处理。这种引擎 a。为了保存一个用户数据的备份信息,防止灾难 b。在不同的stamp之间迁移用户的数据。这个引擎在隔离层执行。
Inter-s-r是文件层的处理,Intra 是数据块的处理。之所以把他们分到两个层是因为,Intra操作可以专门为了硬件损坏而设计(大规模数据下硬件损坏的概率很大),inter操作可以提供分布式的备份等来防止地域的灾难,这种情况出现一般不多。这样就可以保证intra stamp之间的低延迟,inter操作也可以在网络带宽受限制的条件下提供一个用户可以接受的反馈。因此这两个问题被区别开。
另一个原因是这两层所维护的名字空间问题,数据流层的intra操作允许一系列的数据被当做单一的存储来看待,这样的话所有的单stamp操作都可以被缓存在内存中,来保证WAS提供快速的的健壮的存储响应。相对的,stamp之间的操作可以喝LS结合起来,来提供跨数据中心的数据处理。
第四部分:数据模型
WAS主要由三种数据模型构成:
Windows Azure Blob:存储大型数据。
Windows Azure Table:存储表数据,类似关系数据库中的数据表,但有所不同。
Windows Azure Queue:为异步工作提供分派消息服务,有点类似Windows系统的消息队列。
(1)Windows Azure Blob
在Windows Azure中使用存储服务最简单的方法是使用Windows Azure Blob。Blob存储二进制数据,如图像,XML文档,压缩文件和其它在容器内任意排列的字节。
Blob存储数据是通过一个简单的层级关系来实现的,每个账户Account下有一个容器,这个容器就是用户定义的一套只有一个属性的Blobs(Blob集合),容器不直接存储数据,每个Blobs包含了多个Blob。
(2)Windows Azure Table
Blobs只能针对大容量二级制数据存储,它真是太“不结构化”了。为了保存和使用云应用程序中具有紧密的数据,如在云存储服务中存储一个对象,这个对象是有些自己的属性,其实这样的对象我们可以看成是示例或者实体,于是Windows Azure Table就派上用场了。Windows Azure Table可以直接将实体类、实体对象存入表格结构当中。这里的表只是一种数据模型,而不能当做数据库中的表来处理。
(3)Windows Azure Queue
Windows Azure Blob和Windows Azure Table都是用来存储和访问数据的。Windows Azure 提供了第三种存储服务——Windows Azure Queue,为异步工作提供分派消息服务,最常见的一个应用就是作为Worker Role实例和Web Role实例之间通讯的消息队列。
总结:
Windows Azure Storage实现了基于云的解决方案开发必要的服务--存储问题。它有很强的一致性,可靠性,全局命名空间和灾难恢复的结合,这些都是一用户所要求的重要功能特征。在同一套硬件平台上执行多个用户的处理需求,这可以大大降低存储成本,因为要置备的资源量明显比在专门的硬件上运行所有这些工作负载资源的总和要少很多。
正如开始所说三中存储数据模型,blob,table和queue,提供的存储和数据流控制机制可以满足大部分应用。这些都被该系统方便的利用起来。例如,最初版本的Facebook/ Twitter搜索引擎了仅仅花了一位工程师的两个月时间,完成了从开始设计到可以提供服务。这方面的事实,都表明这个系统的服务能力,能够满足客户轻松地在云上开发和部署他们的应用程序。
参考文献:
Brad Calder, Ju Wang .etc “Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency”, in ACM ,October 23-26, 2011
来源:https://www.cnblogs.com/bingwenst/archive/2012/05/31/2528715.html