当我们想要把应用搬到云端的时候,首先要关注的便是数据的安全性。当然所有的云服务厂商都会对用户数据承诺一个非常高的安全性,但万一出现意外呢?我们是不是还要有适当的应对方案?比如今年的3月8日晚间,Azure 某个区域中的存储几乎全部不能访问,持续达两个多小时。当时最担心的是:用户的数据万一丢掉怎么办?同时,我们是不是可以根据云服务提供的数据服务的特点来优化程序的性能呢?基于如此种种的原因,我们需要了解云端数据服务的一些特性的详情,这将对我们很有帮助。本文将和大家一起探讨 Azure Storage 的冗余策略。

理解 Azure Storage 冗余策略的好处

微软针对不同的应用场景提供了不同的存储冗余策略。比如对可靠性要求很高的数据可以选择多个异地的备份,而对访问速度要求高的数据则可以使用高速的存储设备。当然,不同的方案成本也是不一样的。我们可以针对应用的特点使用不同的存储策略,这样可以节省成本。还可以指定对应的容灾备份以及灾难恢复方案。

Azure Storage Account

需要注意的是,Azure Storage 存储的冗余策略是绑定在 Azure Storage Account 上的。Azure Storage 当前一共有四种数据的冗余策略,分别是:

Locally Redundant Storage(LRS)

Zone Redundant Storage(ZRS)

Geo Redundant Storage(GRS)

Read-access Geo Redundant Storage(RA-GRS)

当我们创建 Storage Account 的时候就需要指定其对应的存储的相关类型和策略:

Performance 选项目前有两种选择,分别是 "Standard" 和 "Premium"。准确的说,下面的 Replication 选项才是 Storage Account 的冗余策略。可是,冗余策略和性能选项是有关联性的。比如,当 performance 为 "Standard" 时,Replication 可以选择 ZRS, LRS, GRS, RA-GRS:

而 performance 为 "Premium" 时,Replication 则只能选择 LRS:

下面我们将详细的介绍这四种冗余策略及常见用例。

Locally Redundant Storage

本地冗余存储(LRS),在单个数据中心里有多个同步的数据拷贝。数据在弹性存储单元中被复制三次,该弹性存储单元托管在创建存储帐户的区域中的数据中心内。 仅在写入所有三个副本后,才成功返回写入请求。 这三个副本驻留在同一弹性存储单元中的不同容错域和升级域中。

弹性存储单元是存储节点的机架的集合。 容错域 (FD) 是一组代表出错的物理单元的节点,可将其视为属于同一物理机架的节点。 升级域 (UD) 是一组在服务升级(推出)过程中一起升级的节点。 三个副本将分布在同一弹性存储单元中的 UD 和 FD 上,以确保即使在硬件故障影响单个机架时,或在推出期间升级节点时,数据也可用。

当看到这里时,相信你已经感受到了,即便是 Azure Storage 中最基础的 LRS 数据冗余策略也远高于我们自己维护的系统了!
LRS 的优点是成本最低,这里说的低是和其它类型的冗余策略相比。并且可以提高访问的性能,比如选择performance 为 “Premium” 时只能使用 LRS 策略。
但是它的缺点也很明显,就是无法应对整个数据中心都 crash 的情况(火灾、洪灾、地震、技术故障等)。

Zone Redundant Storage

区域冗余存储(ZRS),除了存储类似于 LRS 的三个副本外,还在一个或两个区域内的数据中心之间异步复制数据,从而提供比 LRS 更高的安全性。 在这种情况下,即使主数据中心不可用或不可恢复,存储在 ZRS 中的数据也安全的。

需要注意的是,ZRS 仅能应用于 blob 类型的存储。

Geo Redundant Storage

异地冗余存储(GRS),将数据复制到距主区域数百英里以外的辅助区域。如果 Storage Account 启用了 GRS,即使在遇到区域完全停电或导致主要区域不可恢复的灾难时,用户的数据也是安全的。

对于启用了 GRS 的 Storage Account,更新将首先提交到主要区域,并在其中复制三份。
然后,更新将异步复制到次要区域(也是在其中复制三份)。
使用 GRS 时,主要和次要区域在一个弹性存储单元内管理跨单独容错域和升级域的副本。

GRS 是一种性价比很高的选择,对数据安全要求较高的用户可以选择这种冗余策略。比如我们在一个 web 应用中保存了用户上传的数据(文档、图片、视频等)。为了保护用户的数据,我们可以把这些文件存放在设置为 GRS 的存储中。当主区域发生问题时,至少可以把用户的数据恢复回来。下面是笔者维护的一个使用了 GRS 的项目:

次区域是系统自动设置的,不支持用户自由选择。其实我们都没有必要知道它的存在,只需要知道数据是安全的就可以了。

Read-access Geo Redundant Storage

除了 GRS 所提供的在两个区域之间进行复制外,读取访问异地冗余存储 (RA-GRS) 还提供对辅助位置中的数据的只读访问权限,从而最大限度地提高了 Storage Account 的可用性。

当设置为 RA-GRS 时,除了 Storage Account 的主终结点外,还可以通过访问辅助终结点获取数据。辅助终结点与主终结点类似,但会在帐户名称后面追加后缀 –secondary。例如,如果 Blob 服务的主终结点是 myaccount.blob.core.windows.net,辅助终结点则是 myaccount-secondary.blob.core.windows.net。 Storage Account 的访问密钥对于主终结点和辅助终结点是相同的。

对于 RA-GRS, 看起来可能很高大上,但是我们却很难把这种能力加以应用。按照 Azure文档所说,这种策略主要的目的是高可用性。但是用户又不能自由的指定次区域的位置,所以十分怀疑是否可以达到真正的目的。

总结

数据的安全永远都是相对的,片面的追求数据安全肯定会为我们带来不可承受的成本压力。我们能做的就是针对不同类型的数据,寻找价格上可以接受的冗余方案。而 Azure Storage 提供的丰富选项,则给我们的选择带来了很大的灵活性。

细说 Azure Storage 的冗余策略的更多相关文章

  1. Azure Storage Client Library 重试策略建议

    有关如何配置 Azure Storage Library 重试策略的信息,可参阅 Gaurav Mantri 撰写的一篇不错的文章<SCL 2.0 – 实施重试策略>.但很难找到关于使用何 ...

  2. Windows Azure Storage (17) Azure Storage读取访问地域冗余(Read Access – Geo Redundant Storage, RA-GRS)

    <Windows Azure Platform 系列文章目录> 细心的用户会发现,微软在国外和国内的数据中心建设都是成对的,比如香港数据中心(Asia East)和新加坡的数据中心(Sou ...

  3. Windows Azure 存储的冗余存储选项和只读访问跨地域冗余存储

    我们很高兴地宣布,现在我们使客户可以获得对数据更高的读取可用性.该预览功能称为"只读访问- 跨地域冗余存储(RA-GRS)",使客户可以在存储帐户主要区域无法读取数据时,通过跨 ...

  4. Windows Azure Storage (18) 使用HTML5 Portal的Azure CDN服务

    <Windows Azure Platform 系列文章目录> Update:2015-04-15 如果读者使用的是国内由世纪互联运维的Azure China服务,请参考笔者的文档:Azu ...

  5. Windows Azure Storage 之 Retry Policy (用来处理短暂性错误-Transient Fault)

    在使用Windows Azure Storage Service 的时候, 通常会遇到各种各样的问题. 例如网络连接不稳定,导致请求没有发出去.删除一个Blob Container 之后又立刻创建同名 ...

  6. 直传文件到Azure Storage的Blob服务中

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:为了庆祝获得微信公众号赞赏功能,忙里抽闲分享一下最近工作的一点心得:如何直接从浏览器中上传文件到Azure ...

  7. Azure系列2.1 —— com.microsoft.azure.storage.blob

    网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习心得做下笔记,文中不正确地方请大家指正. Azure Blob ...

  8. Azure Storage 系列(一)入门简介

    一,引言 今天作为新的Azure 资源介绍的开篇,我们来学习一个新的服务,Azure Storage.众所周知,我们实际在开发过程中,会需要存储一些比如说日志,图片,等等,各种类型的数据.比如说存储图 ...

  9. Azure Queue Storage 基本用法 -- Azure Storage 之 Queue

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure File Storage 基 ...

随机推荐

  1. angularjs初窥门径

    貌似angularjs出来之后网上各种夸angularjs的好黑jquery. angularjs大致可以分为几个板块:作用域,控制器,指令(主要),路由,依赖注入. 1 作用域 作用域在angula ...

  2. 数位dp模板 [dp][数位dp]

    现在才想到要学数位dp,我是不是很弱 答案是肯定的 以一道自己瞎掰的题为模板 //题: //输入数字n //从0枚举到n,计算这n+1个数中含有两位数a的数的个数 //如12930含有两位数93 #i ...

  3. Collections 的 synchronized XXX方法

    摘要 static <T> Collection<T> synchronizedCollection(Collection<T> c) 返回指定 collectio ...

  4. (转)Java里的堆(heap)栈(stack)和方法区(method)(精华帖,多读读)

    [color=red][/color]<一> 基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收.   引用数据类型,需要用new来创建,既在栈 ...

  5. AI人工智能-Python实现人机对话

    [前言] AI 在人工智能进展的如火如荼的今天,我们如果不尝试去接触新鲜事物,马上就要被世界淘汰啦~ 本文拟使用Python开发语言实现类似于WIndows平台的“小娜”,或者是IOS下的“Siri” ...

  6. 用runtime封装归档(encoding)

    runtime一套比较基层的c语言的API(库) 归档(OC对象-->字典—>2进制—>写入沙盒 || 目的.数据持久化)   #import <UIKit/UIKit.h&g ...

  7. 初学安卓开发随笔之 Menu、toast 用法、活动的四种启动模式 以及 一个方便的Base活动类使用方法

    Toast toast 是安卓系统的一种非常棒的提醒方式 首先定义一个弹出Toast的触发点,比如可以是按钮之类 其中 Toast.LENGTH_SHORT是指显示时长 还有一个内置变量为Toast. ...

  8. HDOJ-2009 求数列的和

    Problem Description 数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和.   Input 输入数据有多组,每组占一行,由两个整数n(n<10000 ...

  9. OOP in Javascript

    写了几篇Vue入门的内容了,今天写点其它的放松一下,简单讲讲javascript中的面相对象. 在面向对象的语言中,都有类的概念,当然es6中开始javascript中也有类的概念了,这里以es5为基 ...

  10. 设计模式的征途—18.策略(Strategy)模式

    俗话说条条大路通罗马,很多情况下实现某个目标地途径都不只一条.在软件开发中,也会时常遇到这样的情况,实现某一个功能有多条途径,每一条途径都对应一种算法.此时,可以使用一种设计模式来实现灵活地选择解决途 ...