Windows Azure 存储

40
Windows Azure 存存 存存存 存存 存存 Version: November, 2012

description

Windows Azure 存储. 演讲者 职位 公司. Version: November, 2012. Windows Azure 存储. 在云中的存储 高扩展,高可靠和高可用性 在任何地方任何时间访问 只为使用付费 通过 RESTful 的 Web Service 从 Windows Azure Compute 使用 从互联网上的任何地点使用. Azure 存储与服务总线. .NET. Java. Ruby. 其他 REST 客户端. Azure 虚拟机. Python. Node.js. PHP. REST 接口. Blobs - PowerPoint PPT Presentation

Transcript of Windows Azure 存储

Page 1: Windows  Azure 存储

Windows Azure 存储演讲者职位公司

Version: November, 2012

Page 2: Windows  Azure 存储

Windows Azure 存储在云中的存储高扩展,高可靠和高可用性在任何地方任何时间访问只为使用付费通过 RESTful 的 Web Service从 Windows Azure Compute 使用从互联网上的任何地点使用

Page 3: Windows  Azure 存储

TablesNoSQL 数据表 Queues消息队列Blobs二进制文件存储

Azure 存储与服务总线

数据高可用:本地三份拷贝同步复制容灾:本区域异地异步复制

可扩展性(性能 /容量):数据切分安全性:认证授权

REST接口

.NET Java Ruby

Python Node.js

PHP

Service Bus消息总线

支持事务、保证顺序、重复检测、支持阻塞

其他REST 客户端

Azure 存储 Azure 服务总线

队列主题

Azure 虚拟机

Page 4: Windows  Azure 存储

Windows Azure 存储账户使用特殊的全球唯一账户名

北美中心 北欧西欧

东亚东南亚

美洲 欧洲 亚洲可以选择地理位置来存储

南美中心

美西 美东

Page 5: Windows  Azure 存储

Azure 存储天然具备高可用和异地灾备能力• 存储虚拟机磁盘、文件、队列消息、表• 提供 99.9% 的 SLA 保证• 数据永不丢失

• 本地 3 份拷贝,实时复制,自动容错• 数据实时复制到灾备中心, 0 管理

写入

上海北京

读取 异地读取

实时复制

Page 6: Windows  Azure 存储

存储后台架构• 单集群 20 柜,每柜 36 服务器• 每服务器 18 磁盘,每磁盘 2T• 单集群规模: 20 多 PB

• 单 Blob 吞吐量: 60MB/s• 单 Blob IOPS : 500 ,延迟

5ms• 单 Blob 大小: 1T• 单 partition 2000 对象 /s• 单存储账号容量: 200T

Page 7: Windows  Azure 存储

如何使用 Azure 存储C#/.NETPythonRubyPerlJavaScript (Node)JavaPHPErlangCommon LISPObjective-CC#/VB on Windows Phone 7

1. 虚拟机磁盘 -Blob

2. 存储管理工具,如 Storage Explorer

3. 利用 SDK 开发程序4. 直接封装 REST 协议

存储 SDK

Page 8: Windows  Azure 存储

在 Development Fabric 中的存储提供本地“ Mock” 存储模拟在云中的存储允许离线开发需要 Express 2005/2008 或更新

http://msdn.microsoft.com/en-us/gg433135

Page 9: Windows  Azure 存储

存储安全性Windows Azure 存储提供了简单的安全性来调用存储服务HTTPS 端口对于授权的操作需要数字签名请求每个账户有两个 512bit 对称密钥能够独立生成通过共享的访问签名实现更多颗粒的安全性

Page 10: Windows  Azure 存储

Windows Azure Storage 抽象

Tables结构化的存储。一张表是实体的集合,一个实体是属性的集合。

Queues可靠的消息存储和发送Blobs简单命名的文件和元数据

Page 11: Windows  Azure 存储

Blob 存储

Page 12: Windows  Azure 存储

Blob Storage 概念BlobContainer账户

http://<account>.blob.core.windows.net/<container>/<blobname>

Pages/ Blocks

contoso

PIC01.JPG

Block/Page

Block/Page

PIC02.JPGimages

VID1.AVIvideos

Page 13: Windows  Azure 存储

Blob 细节主要 Web

Service 操作PutBlobGetBlobDeleteBlobCopyBlobSnapshotBlob LeaseBlob

Page 14: Windows  Azure 存储

Blob Containers每个账户多个 Containers特殊的 $root container

Blob Container一个 container 包含 blob 的集合在 container 级别设置访问策略和 Container 相关的元数据列出 container 里面所有的 blob包括 Blob Metadata 和 MD5 没有查询 . i.e. 没有 WHERE MetadataValue = ?

Blobs 带宽目标是 60MB/s 每个 Blob

Page 15: Windows  Azure 存储

GET http://.../products?comp=list&prefix=Tents&delimiter=/

<Blob>Tents/PalaceTent.wmv</Blob><Blob>Tents/ShedTent.wmv</Blob>

遍历 Blobs

获取 Blob 的操作需要参数前缀分隔符包括 = (snapshots, metadata etc…)

http://adventureworks.blob.core.windows.net/ Products/Bikes/SuperDuperCycle.jpg Products/Bikes/FastBike.jpg Products/Canoes/Whitewater.jpg Products/Canoes/Flatwater.jpg Products/Canoes/Hybrid.jpg Products/Tents/PalaceTent.jpg Products/Tents/ShedTent.jpg

Page 16: Windows  Azure 存储

http://.../products?comp=list&prefix=Canoes&maxresults=2

&marker=MarkerValue

<Blob>Canoes/Hybrid.jpg</Blob>

分页Blob 的列表可以分页要么设置 maxresults 或者 ;超过默认值maxresults (5000)

http://.../products?comp=list&prefix=Canoes&maxresults=2

<Blob>Canoes/Whitewater.jpg</Blob><Blob>Canoes/Flatwater.jpg</Blob><NextMarker>MarkerValue</NextMarker>

Page 17: Windows  Azure 存储

Blob 服务之旅演示

Page 18: Windows  Azure 存储

两种类型的 Blob

块 Blob用于流访问每个 blob由一个块的序列组成每个块通过块 Id区分每个 blob最大 200GB

通过 Etags优化并发

页 Blob用于随机读写访问每个 blob由页的数组组成每个页通过 offset 来区分每个 blob最大 1TB

通过租用 (leases)优化

Page 19: Windows  Azure 存储

TheBlob.wmv

上传 Block Blob上传一个大的 blob

10 GB Movie

Bloc

k Id

1Bl

ock

Id 2

Bloc

k Id

3

Bloc

k Id

N

blobName = “TheBlob.wmv”;PutBlock(blobName, blockId1, block1Bits);PutBlock(blobName, blockId2, block2Bits);…………PutBlock(blobName, blockIdN, blockNBits);PutBlockList(blobName,

blockId1,…,blockIdN);

TheBlob.wmv

好处有效延续和重试并行,顺序无关

THE BLOB

Windows AzureStorage

Page 20: Windows  Azure 存储

页 Blob – 随机读 / 写创建MyBlob定义 Blob 大小 = 10 Gbytes稀疏存储 - 只为存储的页付费固定页大小 = 512 bytes随机访问操作

PutPage[512, 2048)PutPage[0, 1024)ClearPage[512, 1536)PutPage[2048,2560)

GetPageRange[0, 4096) 返回有效数据范围 :[0,512) , [1536,2560)

GetBlob[1000, 2048) 返回All 0 for first 536 bytesNext 512 bytes are data stored in [1536,2048)

0

10 GB

5121024153620482560

10 GB Address Space

Page 21: Windows  Azure 存储

增强的安全性:共享访问签名良好的访问权限 blobs 和 containers和存储 Key 一起签名的 URL– 允许提升权限废止使用短时间和重新提交使用可删除的 container 级别的策略2种方法Ad-hoc基于策略 App

存储服务

Server 端应用1. 申请图片地址

2. 利用密钥申请签名

4. 返回签名

5. 访问图片

Page 22: Windows  Azure 存储

Ad Hoc 签名创建短时间的共享访问签名Signedresource Blob or ContainerAccessPolicy Start, Expiry and PermissionsSignature HMAC-SHA256 of above fields

用例Single use URLsE.g. 提供一个 URL给 Silverlight 客户端来上传文件

http://...blob.../pics/image.jpg?sr=c&st=2009-02-09T08:20Z&se=2009-02-10T08:30Z&sp=w

&sig= dD80ihBh5jfNpymO5Hg1IdiJIEvHcJpCMiCMnN%2fRnbI%3d

Page 23: Windows  Azure 存储

创建 Container 级别的策略 定义 StartTime, ExpiryTime, Permissions

创建共享访问签名 URLSignedresource Blob or ContainerSignedidentifier Optional pointer to container policySignature HMAC-SHA256 of above fields

用例提供可撤销的权限给特殊的用户 /组撤销 : 删除或更新 container 策略

http://...blob.../pics/image.jpg?sr=c&si=MyUploadPolicyForUserID12345

&sig=dD80ihBh5jfNpymO5Hg1IdiJIEvHcJpCMiCMnN%2fRnbI%3d

基于策略的签名

Page 24: Windows  Azure 存储

内容分发网络 (CDN)高带宽的全球 blob内容分发24 全球位置 ( 美国,欧洲,亚洲,澳大利亚和南美 ), 还在增加无论用户在地球的什么地方,无论存储账户在哪里,体验完全相同Blob 服务 URL vs. CDN URL:Windows Azure Blob URL: http://images.blob.core.windows.net/Windows Azure CDN URL: http://<id>.vo.msecnd.net/ CDN 自定义域名 : http://cdn.contoso.com/

Page 25: Windows  Azure 存储

pic1.jpg

Windows Azure CDN

开始 CDN:通过 Dev Portal注册 CDN将 Contaner 设置为公共

pic1.jpg

GEThttp://guid01.vo.msecnd.net/images/pic.1jpg

http://sally.blob.core.windows.net/images/pic1.jpg

http://sally.blob.core.windows.net/ http://guid01.vo.msecnd.net/

pic1.jpg

404

TTL 内容分发网络

Windows Azure Blob 服务

EdgeLocation

EdgeLocation

EdgeLocation

Page 26: Windows  Azure 存储

Page 27: Windows  Azure 存储

表存储概念实体表账户

contoso

Name =…Email = …

Name =…EMailAdd=

customers

Photo ID =…Date =…

photos

Photo ID =…Date =…

Page 28: Windows  Azure 存储

Table 细节

InsertUpdate Merge – 部分更新Replace – 更新全部实体UpsertDeleteQueryEntity Group Transaction多个 CUD 操作在一个原子事务中

Create, Query, Delete表可以有元数据不是 RDBMS! Table

实体

Page 29: Windows  Azure 存储

Entity 属性实体可以拥有最多 255 个属性每个实体 1MB

对每个实体的强制属性PartitionKey & RowKey ( 只有索引的属性 )唯一实体区分定义排序顺序时间戳优化并发作为 Etag暴露对其他属性没有固定的 schema每个属性存为 <name, typed value> 对没有表的 schema属性可以是标准 .NET 类型String, binary, bool, DateTime, GUID, int, int64, and double

Page 30: Windows  Azure 存储

没有固定 Schema

FIRST LAST BIRTHDATE

Wade Wegner 2/2/1981

Nathan Totten 3/15/1965

Nick Harris May 1, 1976

FAV SPORT

Canoeing

Page 31: Windows  Azure 存储

查询FIRST LAST BIRTHDAT

E

Wade Wegner 2/2/1981

Nathan Totten 3/15/1965

Nick Harris May 1, 1976

?$filter=Last eq ‘Wegner’

Page 32: Windows  Azure 存储

PartitionKey 的目的本地实体相同 partition 的实体会存储在一起有效地查询和本地缓存所有查询中包含 partition key

Entity Group Transactions相同 Partition 中的多个 Insert/Update/Delete 操作在一个事务中Table 扩展性目标流量 – 500 tps/partition, 几千个 tps/accountWindows Azure 监控分区的模式自动负载均衡每个分区能在不同的存储节点上操作满足表的扩展需求

Page 33: Windows  Azure 存储

PARTITIONKEY(CATEGORY)

ROWKEY(TITLE) TIMESTAMP MODELYEAR

Bikes Super Duper Cycle … 2009

Bikes Quick Cycle 200 Deluxe … 2007

… … … …Canoes Whitewater … 2009Canoes Flatwater … 2006

PARTITIONKEY(CATEGORY)

ROWKEY(TITLE) TIMESTAMP MODELYEAR

Rafts 14ft Super Tourer … 1999

… … … …

Skis Fabrikam Back Trackers … 2009

… … … …Tents Super Palace … 2008

PARTITIONKEY(分类 )

ROWKEY(标题 ) 时间戳 模型年份

Bikes Super Duper Cycle … 2009

Bikes Quick Cycle 200 Deluxe … 2007

… … … …Canoes Whitewater … 2009Canoes Flatwater … 2006Rafts 14ft Super Tourer … 1999… … … …

Skis Fabrikam Back Trackers … 2009

… … … …Tents Super Palace … 2008

分区和分区范围

Server ATable = Products

Server BTable = Products

[Canoes - MaxKey)

Server ATable = Products

[MinKey - Canoes)

Page 34: Windows  Azure 存储

队列

Page 35: Windows  Azure 存储

Queue Storage 概念消息表账户

customer ID order ID http://…

adventureworks

order processing

customer ID order ID http://…

Page 36: Windows  Azure 存储

利用队列实现松耦合的工作流在角色之间完成工作流从队列中载入工作生产者可以在放入队列后忘记它的存在多个工作者可以消费队列极端流量 (>500 tps) 使用多个队列批读取消息每个消息多个工作

队列输入队列 ( 工作项 )

Web Role

Web Role

Web Role

Worker Role

Worker Role

Worker Role

Worker Role

Page 37: Windows  Azure 存储

队列细节简单的异步分发队列不限制队列长度每个消息 64kb ListQueues - 列出账户下所有的队列队列操作CreateQueue DeleteQueueGet/Set MetadataClear Messages

Page 38: Windows  Azure 存储

队列细节消息操作PutMessage– 写入消息GetMessages – 读取一条或多条消息并且隐藏他们PeekMessages – 读取一条或多条消息但不隐藏他们DeleteMessage – 永久从队列删除一条消息UpdateMessage – 客户端更新租用和内容

Page 39: Windows  Azure 存储

队列的可靠分发保证分发 /处理消息( 2步处理)工作者读取消息并且标记为不可见,在一定的“不可见时间”工作者在处理完成后删除消息如果工作角色崩溃,消息重新变成可见

Page 40: Windows  Azure 存储

© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a

commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Translated to Chinese Simplified Version by Shanghai Yungoal Info Tech Co., Ltd.