带你揭秘Azure Blob存储(上)

概述

Azure Blob存储是一个云对象存储系统,它为客户提供了在任何时间段内存储无限量的数据的能力。客户可以随时从任何地方访问他们的数据,并且只为他们使用和存储的数据付费。在Azure Blob中,数据可以选择本地和地理复制进行持久存储,以便于灾难恢复。在本文中,我们描述了Azure Blob存储的体系结构、全局名称空间和数据模型,以及它的资源调配、负载平衡和复制系统。

01、简介

Azure Blob 存储是一个可扩展的云存储系统,自2008年11月开始发布以来。它在Microsoft内部用于社交网络搜索、提供视频、音乐和游戏内容、管理医疗记录等应用程序。此外,有成千上万的微软以外的客户在使用 Azure Blob 存储,任何人都可以通过互联网注册使用该系统。在 Azure Blob的构建过程中,来自潜在内部和外部客户的反馈推动了许多设计决策。这些反馈产生的一些关键设计特性包括:

强一致性

许多客户需要强一致性:尤其是企业客户将其业务线应用程序移动到云端。他们还希望能够对强一致性数据执行条件读、写和删除,以实现乐观并发控制。为此,Azure Blob 尽可能提供了CAP定理声称难以同时实现的三个属性:强一致性、高可用性和分区容限。

全局和可扩展的命名空间

为便于使用,Azure Blob存储实现了一个全局命名空间,允许从世界上任何位置以一致的方式存储和访问数据。由于Blob的一个主要目标是支持存储大量数据,因此这个全局名称空间必须能够处理超过EB的数据。

容灾

Blob跨相距数百英里的多个数据中心存储客户数据。这种冗余为灾难(如地震、野火、龙卷风等)提供了必要的数据恢复保护。

多租户和存储成本

为降低存储成本,许多客户都使用相同的共享存储基础架构。Blob将具有不同资源需求的许多不同客户的工作负载组合在一起,因此在任何一个时间点所需的存储量都比在其专用硬件上运行的服务要少得多。

02、全局分区名称空间

我们存储系统的一个关键目标是提供一个单一的全局名称空间,允许客户端寻址云中的所有存储,并随时间扩展到所需的任意数量的存储。为了提供这一功能,我们利用DNS作为存储名称空间的一部分,并将存储名称空间分为三个部分:帐户名、分区名和对象名。因此,所有数据都可以通过入以下URI进行访问:http(s): //AccountName. blob.core.chinacloudapi.cn/PartitionName/ObjectName (国外的Azure Blob的domian name 略有区别)。

AccountName

是客户选择的用于访问存储的帐户名,是DNS主机名的一部分。AccountName DNS转换用于定位存储数据的主存储群集和数据中心。此主要位置是所有请求到达该帐户数据的位置。应用程序可以使用多个帐户名跨不同位置存储其数据。当请求到达存储集群时,

PartitionName(对于Blob存储来讲就是Container name)

与AccountName一起定位数据。PartitionName用于当数据需要跨存储节点扩展对数据的访问。

ObjectName

标识该分区中的各个对象。系统支持跨具有相同PartitionName值的对象的原子事务。

03、高层体系结构

Azure云平台

Azure云该平台跨不同的数据中心和不同的地理区域运行许多云服务。Azure Fabric 控制器是一个资源调配和管理层,它为Azure平台上的云服务提供资源分配、部署/升级和管理。Azure存储服务就是这样一个在Fabric控制器上运行的服务。Fabric控制器为Azure 存储系统提供节点管理、网络配置、运行状况监视、服务实例的启动/停止以及服务部署。此外,Azure 存储从Fabric控制器检索网络拓扑信息、群集的物理布局以及存储节点的硬件配置。Azure存储服务负责管理跨磁盘的复制和数据放置,并在存储群集中对数据和应用程序通信进行负载平衡。

Azure Blob 存储体系结构及其组件

Azure Blob存储的一个重要特性是能够存储和提供对大量存储(EB及以上)的访问。Azure Blob存储生产系统由存储stamp和位置服务组成(如下图所示)。

640 (2).png

存储stamp

存储stamp是由N个存储节点机架组成的群集,其中每个机架构建为具有冗余网络和电源的独立容错域。集群通常在20以上个机架之间,每个机架有N个磁盘密集型存储节点。为了提供低成本的云存储,我们需要使生产中配置的存储尽可能高利用率。我们的目标是使存储stamp在容量、事务和带宽方面的利用率保持在70%左右。我们尽量避免超过80%,因为我们希望保留20%的备用空间,以便支持(1)磁盘短行程,通过利用磁盘的外部磁道通过利用磁盘的外部磁道获得更好的寻道时间和更高的吞吐量,以及(2)在内存中出现机架故障时继续提供存储容量和可用性。当存储戳记的利用率达到70%时,位置服务使用戳记间复制将帐户迁移到不同的stamp。

位置服务(LS)

位置服务管理所有存储stamp。它还负责跨所有stamp管理帐户命名空间。LS将帐户分配给存储stamp,并跨存储stamp对其进行管理,以实现灾难恢复和负载平衡。一般来讲位置服务本身分布在两个地理位置上,用于自己的灾难恢复。Azure存储从多个地理区域(如中国的北一,北二,东一,东二,北美、欧洲和其他亚洲非洲国家)的多个位置提供存储。每个位置都是多个数据中心,在其中任意一个DC位置有一个或多个建筑物,每个位置都有多个存储stamp。为了提供额外的容量,LS能够轻松地向区域添加新区域、新位置或向位置添加新标记。因此,为了增加存储量,我们在所需位置的数据中心部署一个或多个存储stamp,并将它们添加到LS中。然后,LS可以为客户将新的存储帐户分配给这些新的stamp,并将现有存储帐户从旧的stamp负载平衡(迁移)到新的stamp。对于具有两个存储stmap的位置服务和存储stamp中的逻辑层,LS跨所有位置跟踪生产中每个存储stamp使用的资源。当应用程序请求一个新帐户来存储数据时,它会指定存储的位置相关性(例如,中国北二)。然后,LS使用基于所有stamp的负载信息的启发式算法(该算法考虑戳的完整性和其他度量,例如网络,事务利用率)选择该位置内的存储stamp作为帐户的主stamp。LS然后将帐户元数据信息存储在所选的存储stamp中,更新DNS以允许请求从https://. blob.core.chinacloudapi.cn /到该存储stamp的虚拟IP(VIP,存储stamp为外部通信公开的IP地址)。

存储stamp中的三层结构

自下而上,这些分别是:

1、stream层

这一层对于Blob存储的操作主要位在磁盘上,也相当于存储的最底层,并负责分布和复制跨许多服务器的数据,以保持数据持久性。stream层可以被认为是stamp中的分布式文件系统层。它是被称为“流”(即称为“扩展数据块”的大型存储块的有序列表)的文件、如何存储它们、如何复制它们等等,这一层他都理解,但它不理解更高级别的对象构造或它们的语义。数据存储在stream层,但可以从Partition层访问。事实上,Partition服务器(分区层中的守护进程)和stream服务器在一个stamp中共同位于每个存储节点上。

2、Partition层

Partition层用于(1)管理和理解更高级别的数据抽象,如Blob对象,(2)提供可伸缩的对象名称空间,(3)为对象提供事务排序和强一致性,(4)在stream层上存储对象数据,以及(5)缓存对象数据以减少磁盘I/O。该层的另一个职责是通过在一个stamp中划分所有数据对象来实现可伸缩性。

如前所述,所有对象都有一个PartitionName;基于PartitionName值,它们被分解为不相交的范围,并由不同的分区服务器提供服务。该层管理哪个分区服务器为blob的 PartitionName范围提供服务。此外,它还提供跨分区服务器的分区名称的自动负载平衡,以满足对象的流量需求。

3、前端(Front-End)层

前端(FE)层由一组接收传入请求的无状态服务器组成。在接收到请求后,FE查找AccountName,对请求进行身份验证和授权,然后将请求路由到分区层中的分区服务器(基于PartitionName)。系统维护一个分区映射,该映射跟踪分区名称范围以及哪个分区服务器为哪个分区名称提供服务。FE服务器缓存分区映射,并使用它来确定将每个请求转发到哪个分区服务器。FE服务器还直接从stream层stream化大型对象,并缓存频繁访问的数据以提高效率。

两个复制引擎

在详细描述Stream流和Partition层之前,我们首先简要概述系统中的两个复制引擎及其各自的职责。

1、内部stamp复制(stream层)

此系统提供同步复制,并侧重于确保写入stamp的所有数据在该stamp中保持持久性。它在不同故障域中的不同节点之间保留足够的数据副本,以便在磁盘、节点和机架出现故障时保持数据在stamp的持久性。stamp内复制完全由stream层完成,位于客户写请求的关键路径上。一旦通过内部stamp复制成功复制了事务,就可以将成功返回给客户。

2、Stamp间复制(Partition层)

此系统提供异步复制,重点是跨stamp复制数据。stamp间复制是在后台完成的,不在客户请求的关键路径上。此复制是在对象级别进行的,在该级别上,可以复制整个对象,也可以复制给定帐户的最近增量更改。stamp间复制用于(1)在两个位置保留帐户数据的副本以进行灾难恢复,以及(2)在stamp之间迁移帐户数据。stamp间复制由位置服务为帐户配置,并由Partition层执行。stamp间复制的重点是复制对象和应用于这些对象的事务,而stamp内复制的重点是复制用于组成对象的磁盘存储块。


stamp内复制提供了对硬件故障的持久性,这种故障在大规模系统中经常发生,而stamp间复制提供了对地理灾害的地理冗余,这种情况很少见。提供低延迟的stamp内复制是至关重要的,因为这是在用户请求的关键路径上;而stamp间复制的重点是在达到可接受的复制延迟水平的同时,优化利用stamp间的网络带宽。这两种复制方案解决的问题不同。创建这两个独立复制层的另一个原因是这两个层中的每个层都必须维护的名称空间。在stream层执行stamp内复制允许将需要维护的信息量限定为单个存储stamp的大小。


这一重点允许将所有stamp内复制的元状态缓存在内存中以提高性能, 从而使Azure Blob存储系统能够通过在单个stamp内快速提交事务以满足客户请求,从而提供具有强一致性的快速复制。与此相反,Partition层与位置服务相结合,控制并理解跨stamp的全局对象名称空间,从而允许它跨数据中心高效地复制和维护对象状态。

(未完待续)

我们是设计师、工程师、梦想者,是您扬帆出海的私人顾问专家


相关内容:
[亚马逊开店深圳办事处地址在哪里]
[亚马逊开店深圳办事处地址在哪里]
亚马逊开店深圳办事处地址揭秘:一站式开店服务,轻松拥抱财富!各位亲爱的创业者们,你们好!今天要给大家带来一个好消息——亚马逊开店深圳办事处地址终于揭开了神秘面纱!在这里,
亚马逊开店卖翡翠怎么样?
亚马逊开店卖翡翠怎么样?
亚马逊开店卖翡翠:珠宝行业的巨大商机等你来挖掘!在炎热的夏季,一杯清凉的饮料、一本好书和一个精美的翡翠饰品,想必是很多人的首选。翡翠作为中国传统文化中的瑰宝之一,以其晶莹

TG客服:@SSjiejie — 官方频道:@SSwangluo

三生网络 © 2009-2023 超15年出海经验,跨境项目专家