【IT168技术】Windows Azure数据存储系统由多个层次组成,如图5.1所示,每层包含多个服务器协同完成专门的职责。
前端层(Frontend layer):前端层负责对用户访问数据请求进行授权和验证。如果用户没有通过验证,则直接返回给用户访问错误信息;如果通过验证,前端层把访问请求转到分区层上相应的分区服务器上。前端服务器上有一个分区对照表,该对照表跟踪每个分区服务器所控制的分区,所以前端服务器可以根据用户访问请求中的分区信息决定转到哪一个分区服务器上。
分区层(Partition layer):分区层管理系统中所有数据对象的分区,比如每个分区应该在哪一个分区服务器上。每个数据对象都有一个分区键,该键值决定了该数据对象应该在哪一个分区服务器上。此外,分区层还对访问分区提供自动负载均衡的功能。
分布式文件系统层(Distributed and Replicated File System (DFS ) layer):以下简称DFS层,该层负责把数据保存到磁盘上。它把数据分布复制到不同的服务器上以保证数据的持久和容错。每个分区服务器可以访问任意一个分布式文件系统服务器(以下简称DFS 服务器)。
对于每一个来自用户的访问数据的请求,数据存储系统通过以上三层结构来处理。我们来看一下处理用户数据访问请求的具体流程。
第1步:域名查找。
用户从客户端使用URL请求访问数据,该URL通过域名服务器转换成IP地址,通过Internet 到达前端层。
第2步:前端层处理。
前端层收到数据访问请求后,会做如下处理。

▲图Windows Azure 数据存储服务多层次体系结构
首先对用户请求进行身份验证。如果没有通过身份验证,则直接返回用户错误信息。
在通过身份验证后,前端层根据数据访问请求中的分区信息查对分区对照表来找到相应的分区服务器,然后把数据访问请求发送到该分区服务器。
然后前端层等待分区服务器返回结果数据。
第3步:分区服务器处理。
分区服务器收到数据访问请求后,会根据数据访问请求的类型进行不同的操作。
读操作:如果数据已经缓存在分区服务器上,则直接返回结果数据;否则把数据访问请求发送到存放该数据的其中一个DFS服务器上。
写操作:把数据访问请求发送到存放该数据的主DFS服务器上。
第4步:DFS服务器处理。
DFS 服务器收到数据访问请求后,会根据数据访问请求的类型进行不同的操作。
读操作:从磁盘上读取数据,然后返回结果数据。
写操作:把数据写到磁盘上,并且把数据复制到多个DFS服务器上,然后返回“写成功”状态。
数据分割和复制
Windows Azure 数据存储系统使用数据分割和复制机制来保证数据的高可用性和高性能访问。保存在DFS层的所有数据都会被复制存放到多个DFS服务器上。由于数据被分割存放到多个服务器上,所以系统可以有效地利用并行读磁盘的方式,从而大大提高读数据的速度。
DFS层把数据以“扩展块”为单元存储到磁盘上。每个数据包括一个或多个“扩展块”,一个“扩展块”是数据存储和复制的最小单元。每个“扩展块”都被随机复制多次到不同的DFS服务器上。比如一个10GB的数据,如果每个“扩展块”是1GB的话,它会有10个“扩展块”。而每个“扩展块”又被复制多次(比如3次),则总共有30个“扩展块”,该30个“扩展块”会被随机地分散存储到30个不同的DFS服务器上。很显然通过数据复制、分割和分散存储,可以提高I/O和网络带宽的并行处理能力,从而大大加快了读数据的速度。
在写数据方面,每个“扩展块”都有一个主服务器和多个辅服务器。所有写操作先送到主服务器,然后主服务器再送到辅服务器。只有当数据保存到最少3个DFS服务器上后,主服务器才把“写成功”的状态返回给客户。
DFS层为数据复制还提供了另外两个重要的功能:动态重复制和检查数据一致性。如果有一个DFS宕机或磁盘坏掉了,那么在该DFS服务器上的所有“扩展块”会自动再复制到别的DFS服务器上,从而保证每个“扩展块”有至少3个拷贝。因为丢失的“扩展块”还有另外两个分散的拷贝,所以再复制会非常的快。每个数据都有一个检查和(checksum),系统会不断地使用检查和来验证数据的一致性。如果发现数据有问题,它会丢弃该数据,然后从其他拷贝再快速地复制一次。
访问负载均衡
为保证弹性伸缩和用户访问数据请求的响应时间,Windows Azure 数据存储系统会在分区层和DFS层自动负载均衡用户的访问数据请求。
(1)分区层负载均衡
一个分区服务器会处理多个分区,分区控制器会不断地监控每个分区服务器的负荷量,如果某个分区服务器的负荷量过多,它会自动把分区从该分区服务器上均衡到其他负荷量低的分区服务器上。
(2)DFS层负载均衡
用以负载均衡DFS服务器的读写和网路带宽。
读负载均衡:因为数据是分散存储在多个DFS服务器上的,所以读负载均衡很容易实现。系统跟踪监控DFS服务器的处理请求量,如果某个DFS服务器的负荷量太大,系统会自动把发送到该DFS服务器的数据访问请求重新发送到存有该分区的其他DFS服务器上。如果所有的DFS服务器负荷量都很大,系统可以自动增加拷贝的数量来增加DFS服务器的数量,从而可以继续保证系统的读数据响应速度。
写负载均衡:所有的写操作都是发送到主DFS服务器上的,然后由它来与辅服务器协调完成写操作。如果某个DFS服务器负荷量太大,系统会自动转到其他DFS服务器上。