Windows Azure 除了针对云计算基础建设、营运与管理部份特别设计并支持外,它也必须要具有应用程序及其他为基础开发服务的相关支持,以一个操作系统来说,除了硬件与运算资源的分配与控管外,对软件最直接最基本的支持,非存储功能莫属。本文介绍了Windows Azure存储服务的安全和性能指标。
性能指标
用户在选择使用数据存储服务之前需要关心的一个方面是它的性能指标,也就是说,该数据存储服务是否能够满足用户日常的使用需求,同时是否能够满足用户访问峰值的情况。以下是微软官方公布的一个数据存储账号***的性能指标。
- 一个数据存储账号的***数据存储量是100TB。
- ***的处理交易率是每秒钟处理5000个交易(每个交易可以是对记录实体、消息或Blob的);
- ***的带宽是每秒钟传输3GB数据。
需要注意的是,以上性能指标是当前Windows Azure数据存储服务所能提供的***性能指标,所以在应用程序运行过程中,用户实际上能获得的性能指标会低于该指标。而且由于对象数据大小的不同,应用程序设计和访问方式的不同,以及实际网络流量的变化,用户实际上能获得的性能指标也会不同。如果应用程序已经达到一个数据存储账号的***性能指标了,则需要考虑使用多个数据存储账号以获得更高的性能指标。
对于性能来讲用户应该尽量使用数据划分来把数据分散存储到多个服务器上以获得尽可能高的数据访问性能。每个数据划分的***性能指标如下:
- 对于Blob,每秒钟可以传输60MB数据;
- 对于表格,每秒钟可以处理500个实体记录;
- 对于消息队列,每秒钟可以处理500个消息。
如果应用程序已经达到单个数据划分的***性能指标,则可以考虑以下策略来进一步提高性能。
- 对于Blob,可以考虑使用CDN将最经常访问的数据缓存到最靠近用户的地区来减少数据传输的时间;
- 对于表格,可以考虑更细化的分区键来尽量把数据分散存储到多个地方;
- 对于消息队列,可以考虑把多个消息集中到一个消息中或使用多个消息队列。
安全性
Windows Azure数据存储服务提供了基于云的数据存储服务系统,所以它不仅仅是按需使用、按使用付费、弹性伸缩和高可用性的,而且它也支持各种各样的应用程序随时随地访问。应用程序可以是运行在Windows Azure上的云技术应用程序,也可以是运行在用户公司内部的本地应用程序,甚至可以是运行在用户移动设备(比如笔记本、智能手机等)上的应用程序。所以在这种情况下,数据访问的安全性就尤为重要,以确保只有通过验证的数据访问请求才可以访问数据。Windows Azure数据存储服务使用简单但是又非常有效的方式来保证数据的安全性,那就是使用访问密钥。
我们在前面申请存储账号时提到,Windows Azure数据存储服务会分配给用户两个访问密钥。访问密钥是256个字节的字符串,用户使用该访问密钥来验证每一个对Windows Azure 数据存储服务的数据访问请求。它的工作流程如下:
- 用户首先构建数据访问请求,该数据访问请求可以是读Blob、写实体记录到表格或者使用消息队列等;
- 用户使用访问密钥通过加密算法对数据访问请求进行数字签名;
- 该数字签名包含在数据访问请求的标头部分(HTML Header),然后数据访问请求发送到Windows Azure数据存储服务;
Windows Azure数据存储服务收到数据访问请求后进行同样的操作:
它首先使用访问密钥通过加密算法对数据访问请求进行数字签名,然后把该数字签名和包含在标头部分的用户生成的数字签名进行比对。如果数字签名一致,系统则授权该访问,否则拒绝该访问。所以即使有黑客在网络上截获了用户的数据访问请求并加以修改,但是因为生成的数字签名不同从而该访问也会被拒绝。
访问密钥对于存储的数据安全性来说至关重要,用户必须非常小心地妥善保管。一旦访问密钥被泄露给其他人,他就可以使用访问密钥来访问用户数据账号中的任何数据,而且因访问而产生的费用也记到用户的账号上。确保访问密钥安全的另外一个***实践是定期重新生成一个新的访问密钥,同时把旧的访问密钥失效。
需要注意的是,我们在申请存储账号时系统生成了两个访问密钥:一个是主访问密钥,另一个是辅访问密钥。两个访问密钥的功能相同都可以访问数据。之所以有两个是为了方便用户切换访问密钥。比如,在通常情况下用户使用主访问密钥,如果一旦主访问密钥被泄露,用户可以把主访问密钥在最短的时间内失效(重新生成一个新的主访问密钥),然后切换到使用辅访问密钥。用户不需要为此修改代码,而只需要更改服务配置文件即可,同时更新服务配置文件也没有宕机时间。此外,另外一种有效的做法是应用程序代码可以先使用主访问密钥来访问数据,如果验证失败,代码自动使用辅访问密钥,这样用户在切换访问密钥时就不会有宕机时间了。
用户对表格和消息队列的每一个数据访问请求,无论是读操作还是写操作,都必须通过验证。但是对Blob的数据访问要稍微灵活一些。我们在前面的使用Blob的例子中提到,在创建Blob容器后需要对Blob容器设置访问权限,该访问权限可以是公有的(Public)或私有的(Private)。如果Blob容器是私有的,则对该容器内所有Blob的任何操作访问请求都必须通过验证;如果Blob容器是公有的,则对该容器内所有Blob的读操作数据访问请求将不需要通过验证,可以直接访问,但是对该容器内Blob的写操作访问还是需要通过验证的。
为了进一步提高对Blob数据访问控制的灵活度,Windows Azure数据存储服务还提供了另外一种叫做Shared Access Signature的数据访问控制方式。使用Shared Access Signature,管理员可以为其他用户生成一个临时的数据访问请求,该临时数据访问请求包含有效的数字签名,所以它可以通过数据验证。该临时数据访问请求也包含该用户可以访问哪些数据和操作权限等信息,而且该临时数据访问请求只会在指定时间内有效。这样管理员既可以允许其他用户访问数据,又不会泄露访问密钥。