当我们想要把应用搬到云端的时候,首先要关注的便是数据的安全性。当然所有的云服务厂商都会对用户数据承诺一个非常高的安全性,但万一出现意外呢?我们是不是还要有适当的应对方案?比如今年的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. 前端页面——Cookie与Session有什么区别

    我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...

  2. CSS预编译与PostCSS以及Webpack构建CSS综合方案

    CSS全称Cascading Style Sheets(层叠样式表),用来为HTML添加样式,本质上是一种标记类语言.CSS前期发展非常迅速,1994年哈肯·维姆·莱首次提出CSS,1996年12月W ...

  3. 20170717_python爬虫之requests+cookie模拟登陆

    在成功登陆之前,失败了十几次.完全找不到是什么原因导致被网站判断cookie是无效的. 直到用了firefox的httpfox之后才发现cookie里还有一个ASP.NET_SessionId 这个字 ...

  4. 开源个.NetCore写的 - 并发请求工具PressureTool

    本篇和大家分享的是一个 并发请求工具,并发往往代表的就是压力,对于一些订单量比较多的公司这种情况很普遍,也因此出现了很多应对并发的解决方案如:分布式,队列,数据库锁等: 对于没有遇到过或者不可能线上来 ...

  5. (转)Dom4J解析

    xml文档: <?xml version="1.0" encoding="UTF-8"?> <书架> <书 出版社="清 ...

  6. eclipse 打包 jar 到 Linux上运行

    1.选择需要打包的项目,右键 Export 2.选择Runnable JAR file,然后点击 Next 3.选择jar包运行的main类,以及定义jar包的名字,保存的地方 4.将 导出来的 ja ...

  7. nopcommerce 开源商城

    http://www.nopchina.net/  中文网 http://www.nopcommerce.com/downloads.aspx  源码下载  如果要在数据库中添加一个新的数据表,需要按 ...

  8. common js CMD/AMD 是什么 和他们之间的联系区别

    知道JS有模块化开发的说法,也偶尔听过requireJs,AMD,CMD等等名字,甚至使用node的时候,还用过require之类的方法,但是对这些一直没有一个明确的认识和概念.想必这就是许多新手刚接 ...

  9. 初学Python(八)——迭代

    初学Python(八)——迭代 初学Python,主要整理一些学习到的知识点,这次是迭代. # -*- coding:utf-8 -*- from collections import Iterabl ...

  10. jsp 之 解决 Mysql net start mysql启动,提示发生系统错误 5 拒绝访问的问题

    在dos下运行net start mysql时 !!!提示发生系统错误 5:拒绝访问!只要切换到管理员模式就可以启动了. 所以我们要以管理员身份来运行cmd程序来启动mysql. 1.在开始菜单的搜索 ...