Windows Azure Storage解析一之整体架构

303 阅读4分钟
原文链接: zhuanlan.zhihu.com

Windows Azure Storage(WAS)是微软Azure云计算的基础存储设施,为Azure上层产品提供包括Blob、Table、Queue在内的统一存储服务,命名缩写WAS倒是与AWS有几分相似,乍看起来很容易混淆。

该专栏接下来的几篇将根据WAS发表的论文对WAS做较为详细的解读,由于论文信息量比较大,我会将其拆解为四个部分分别介绍,包括:

  • 整体架构:主要介绍WAS的整体架构以及对各个模块作简要说明
  • 模块解析:主要介绍以下几个子模块:
    • StreamLayer解析:介绍WAS的文件存储层架构极其相关技术
    • PartitionLayer解析:介绍WAS的逻辑存储层架构极其相关技术
    • FrontEnd解析:介绍WAS的前端接入层的设计


WAS作为Azure云计算的底层存储设施已经在2008年左右便开始在生产环境提供服务,迄今已10年有余,其架构的合理性应该得到了较为充分的验证,同时作为公有云的核心设施,不太可能发生大的架构调整,因此,该论文虽然发表时间已经较长,但是仍值得仔细研读(个人还是对Microsoft的工程能力挺叹服的)。

好了,话不多说,我们直入主题,本文主要介绍WAS的整体架构。我们就不再介绍WAS到底是个什么产品以及扮演什么角色了,这些信息均可以在论文中找到相关介绍。

整体架构

首先,用户很多时候不太会直接与WAS打交道,而是通过其包装的其他云产品来使用WAS(如ECS、对象存储、表格存储、消息队列等)。通过URL来访问WAS服务。URL形式为:

https://AccountName.service.core.windows.net

这里面几个关键的部分:

  • AccountName:使用公有云服务的账号名称,这由客户通过控制台创建,一旦创建,该账号的存储位置便确定好,因此,通过AccountName,Azure的DNS服务便可以将流量定位至特定的存储区域
  • service:Azure服务名称

我们从底之上梳理WAS架构:

  • Storage Stamp:我们可以称之为存储单元,一般是位于同一个数据中心内的一堆存储节点构成的存储集群
  • LocationService:顾名思义,WAS的位置服务,管理全局所有StorageStamp,统计StorageStamp的负载等信息,创建Account时根据负载决定将Account创建至哪个StorageStamp,LocationService也是多级集群以实现服务高可用
  • DNS:根据AccountName查找其所在的StorageStamp,LocationService决定了AccountName所属的StorageStamp后会将该信息同步至DNS

接下来重点分析下StorageStamp架构。

Storage Stamp

存储单元,一般是位于同一个数据中心内的一堆存储节点构成的存储集群。而Azure作为一个全球云服务,形成了Region、DataCenter、Storage Stamp一个树形结构的存储拓扑结构:

按照论文描述,每个Storage Stamp由10~20个Rack(机架)构成,每个Rack内放置18个高密度存储节点,总的存储容量约为2PB左右,时至今日,恐怕早已突破10PB大关。因此,每个Storage Stamp内便是一个独立自治的分布式存储系统,通过StorageStamp的横向扩展来实现系统容量的进一步提升。

作为一个功能完备的统一存储单元,Storage Stamp又按照功能层次划分为以下几个组件:

  • Stream Layer:文件存储层
  • PartitionLayer:负责为统一存储提供更高层次的语义抽象
  • Fronts-End:前端接入层,无状态,负责路由请求至特定节点
  • VIP:虚拟ip层,负责将请求负载均衡至各前端接入层节点

同样,我们逐一简单介绍这几个组件,由于篇幅关系,本文不作深究。

Stream Layer

该层提供数据存取服务,之所以成为Stream Layer,是因为其不解释数据语义,仅仅将上层数据当做字节流,但需要提供数据存储格式组织、数据可靠性。可用性等一些列分布式存储系统该有的功能。

Partition Layer

WAS作为统一存储平台,其提供各种存储产品形态,有Blob存储、表格存储、消息队列等,Partition Layer

便是设计作为统一的存储抽象层,将所有的产品统一为通用存储需求并与Stream Layer对接。

Frons-End

前端接入层,无状态,负责路由请求至Partition Layer特定节点

VIP

虚拟ip层,负责将请求负载均衡至各前端接入层节点