云计算里AWS和Azure的探究
全球领先的云的计算平台主要有两个,一个是Amazon Web Service,另外一个则是Microsoft Windows Azure,他们都同时提供了大量的和云计算相关的资源,包括计算、存储、网络等等。云计算其实并不是像我们看到的学校或者地方政府买很多很多机器就称为云计算,也不是我们看到的网盘、虚拟机等等。云计算的最大原则是弹性,也就是按需使用,用多少买多少,把所有的计算、存储和带宽资源有效地利用起来。网上这部分内容其实已经很多了,我这里也就不再多说了。近两年来我带了好几个项目,都是在Amazon AWS或者在Microsoft Azure上的,为总结这几年在云计算上的经验,我准备写一个专栏,讨论一下Amazon AWS和Windows Azure具体的一些功能、特色和性能上的区别。两个东西都是以A开头的,所以我把它叫做双A的比较。
第一篇里,我先谈谈AWS和Azure提供的不同的功能,大同小异的地方以及各自的特色。后续的文章会更深入地讨论不同的功能细节。
下图就是Amazon AWS提供的管理界面,包含计算和网络、存储和内容分发、数据库、部署和管理以及应用服务。
Amazon提供功能非常丰富,也很强大,在计算和网络这一块,包含了Amazon Elastic Compute Cloud(EC2),也就是我们最常用的虚拟机资源,还有Amazon Elastic MapReduce, Direct Connect, Route 53以及Amazon Virtual Private Cloud(VPC)。Amazon Elastic MapRedouce主要用于大数据的处理。Direct Connect其实是一个VPN,可以让局域网的机器和Amazon云里的机器直接连在一起。Route 53是一个可扩展的DNS,也可以用做负载均衡。VPC主要用于把AWS的资源创建在一个私有的,独立的云里。
在存储上,Amazon提供了CloudFront, Glacier, Simple Storage Service (S3), Storage Gateway,分别用于内容分发,低成本的存储服务,著名的S3存储服务和集成混合云的IT数据备份网关。
在数据库层,Amazon提供了DynamoDB, ElastiCache以及Relational Database Service(RDS)。DynamoDB是一个NoSQL的数据存储结构。ElastiCache提供了一套in-memory系统,RDS也就是关系型数据库,主要通过MySQL实现。
在部署和管理层,Amazon分别提供了CloudFormation, CloudWatch, Data Pipeline, Elastic Beanstalk和AWS Identity and Access Management(IAM)。用于创建云服务的模板,云系统的监控,轻量级的数据流服务,部署和管理应用程序(PaaS),以及用户管理。
在应用层,Amazon有Cloud Search, Elastic Transcoder, Simple Email Service(SES), Simple Notification Service(SNS), Simple Queue Service(SQS), Simple Workflow(SWF), 分别用于搜索,媒体编解码,通知,队列,工作流等服务。
Amazon从底层到应用层都提供了全系列的服务和基础设施,帮助用户能够快速地,低成本地创建高扩展性的应用。
类似的,Microsoft Windows Azure也提供了丰富的云服务,下面就是微软提供的云服务系统。
在管理界面里面,Azure可以看到的东西没有Amazon那么细节,只包含了一些大块, 包括Web Sites, Virtual Machine, Mobile Service, Cloud Service, SQL Database, Storage, Networks, Service Bus, Media Service, Active Directory以及一些Add-Ons等。此外由于微软针对其自有产品开发,还提供了像Azure SQL Reporting, SQL Sync等服务。
在Azure中,可以直接创建网站,申请虚拟机,申请移动服务和云服务,还有数据库服务、网络、服务总线、媒体服务、活动目录。看上去就是微软的那一套,和Amazon完全不一样。其实,这些东西也无非是换汤不换药,大体没什么太大区别,接下去我们来具体比较一下这两个东西在功能上的异同。
Amazon Web Service |
Microsoft Windows Azure |
Elastic Compute Cloud (EC2) |
Virtual Machine (Preview) |
Amazon Elastic MapReduce |
Hadoop on Azure (Preview) |
Direct Connect |
Virtual Network (Preview) |
Route 53 |
Azure Load Balancer or Traffic Manager |
Amazon Virtual Private Cloud(VPC) |
Virtual Network(Preview) |
CloudFront |
Azure CDN |
Glacier |
N/A |
Simple Storage Service(S3) |
Blob Storage |
Gateway |
N/A |
DynamoDB |
Table Storage |
ElastiCache |
Cache Worker Role |
Relational Database Service(RDS) |
Azure SQL Database |
CloudFormation |
Web Site/Custom Images,不完全相同 |
CloudWatch |
Monitoring Service,还没有完全实现 |
Data Pipeline |
SQL Data Sync实现了一部分,但不完全相同 |
Elastic Beanstalk |
Cloud Service(Web Role/Worker Role) |
AWS Identity and Access Management(IAM) |
Access Control(不完全相同) |
Cloud Search |
无 |
Elastic Transcoder |
Azure Media service |
Simple Email Service(SES) |
无,第三方有类似 |
Simple Notification Service(SNS) |
Service Bus |
Simple Queue Service(SQS) |
Queue Storage |
Simple Workflow(SWF) |
N/A |
无 |
SQL Data Sync |
无 |
SQL Reporting |
无 |
Active Directory |
可以通过CloudFormation实现 |
Mobile Service |
Auto Scale |
无 |
在接下去的文章里,我会对Amazon AWS和Widows Azure作更进一步深入的研究,基本上会以一篇Amazon,一篇Azure的结构讨论IT或者App开发者在向云迁移的过程中,经常会遇到的问题和系统架构的选择。
Amazon EC2 和 Windows Azure Virtual Machine
Amazon EC2是Elastic Compute Cloud的简称,翻译成中文就是弹性计算云。它是Amazon云里面最基础的内容,也是发展到今天最成熟的部分,通过EC2, 你可以在Amazon的云里面申请任意台机器,选择不同配置的机器,选择不同的操作系统,完成你所有的工作。类似的,Windows Azure Virtual Machine提供了一样的功能。之前Azure提供过一种不伦不类的东西叫做VM Role,是从他以前的PaaS里面的Web Role和Worker Role里面发展而来的,好在现在已经全面被Virtual Machine所取代了。
数据中心
要了解EC2和Azure VM,我们需要首先看看他们的数据中心到底有多少个不同的地方。AWS在全球主要部署了8个数据中心,包括美东的弗吉尼亚,美西的俄勒冈和加州,欧洲的爱尔兰,亚洲的新加坡和东京,澳洲的悉尼以及南美洲的巴西圣保罗。Azure从2010年开始推出,主要有6个数据中心,包括美国的芝加哥、圣安东尼奥,欧洲的爱尔兰都柏林和荷兰阿姆斯特丹,亚洲的新加坡和香港。这里要强调的一点是,一个数据中心不是一个机房,而是多个机房,他们之间也会备份数据,实现灾难恢复和高可用性。
AWS |
Azure |
US East(N.Virginia) |
East US (Chicago) |
US West(Oregon) |
West US(San Antonio) |
US West(N. California) |
|
EU(Ireland) |
North Europe(Ireland) |
|
West Europe(Amsterdam) |
Asia Pacific(Singapore) |
Southeast Asia(Singapore) |
Asia Pacific(Tokyo) |
East Asia(Hong Kong) |
Asia Pacific(Sydney) |
|
South America(San Paulo) |
下图就是在创建虚拟机的时候,AWS和Azure可以选择的不同数据中心。
AWS |
Azure |
|
|
实例类型和价格
当然,创建数据中心的位置只是第一步,接下来还要选择机器的配置,比如核的数量、内存大小、机器硬件环境等,在这一点上,AWS可以说是远远走在了Azure的前面。AWS提供了丰富的实例类型(Instance Type),具体可以参考以下表格:
|
名称 |
内存(GB) |
计算单元(核) |
存储(GB) |
价格每小时(Linux/Windows) |
标准第一代 |
M1 Small |
1.7 |
1 |
160 |
$0.065/$0.115 |
M1 Medium |
3.75 |
2 |
410 |
$0.130/$0.230 |
|
M1 Large |
7.5 |
4 |
850 |
$0.260/$0.460 |
|
M1 Extra Large |
15 |
8 |
1690 |
$0.520/$0.920 |
|
标准第二代 |
M3 Extra Large |
15 |
13 |
仅EBS |
$0.580/$0.980 |
M3 Double Extra Large |
30 |
26 |
仅EBS |
$1.160/$1.960 |
|
微型 |
Micro |
613MB |
最多2个 |
仅EBS |
$0.020/$0.020 |
内存增强型 |
High-Memory Extra Large |
17.1 |
6.5 |
420 |
$0.450/$0.570 |
High-Memory Double Extra Large |
34.2 |
13 |
850 |
$0.900/$1.140 |
|
High-Memory Quadruple Extra Large |
68.4 |
26 |
1690 |
$1.800/$2.280 |
|
CPU 增强型 |
High-CPU Medium |
1.7 |
5 |
350 |
$0.165/$0.285 |
High-CPU Extra Large |
7 |
20 |
1690 |
$0.660/$1.140 |
|
群集计算 |
Cluster Compute Eight Extra Large |
60.5 |
88 |
3370 |
$2.400/$2.970 |
高内存集群 |
High Memory Cluster Eight Extra Large |
244 |
88 |
240(SSD) |
$3.500/$3.831 |
GPU集群 |
Cluster GPU Quadruple Extra Large |
22 |
33.5 |
1690 |
$2.100/$2.600 |
高I/O |
High I/O Quadruple Extra Large |
60.5 |
35 |
2 SSD盘,每个1024 GB |
$3.100/$3.580 |
高存储 |
High Storage Eight Extra Large |
117 |
35 |
24个盘,每个2T |
$4.600/$4.931 |
AWS非常绚烂地提供了从内存,计算,集群,GPU,I/O以及存储都能够充分定制的计算资源,能够让用户非常简单地选择各种各样不同的服务器类型。比如GPU集群,上面的机器都提供了33.5个计算单元,等价于2块Intel至强4核X5570的CPU,还包含了2块NVIDIA Tesla “Fermi” M2050 显卡,用于使用到GPU的计算任务。
AWS对一些机器还提供EBS优化的实例,可以自己定义EBS卷的IOPS,确定磁盘的性能,也优化了云中的存储资源。对于不同的应用,可以选择完全不同的实例。
在价格上,不同数据中心的计算资源价格会有所不同,比如弗吉尼亚和东京的价格就略有不同,上面参考的是弗吉尼亚的价格。
对于不同的数据中心,能够提供的实例类型也稍有不同,有些数据中心提供GPU集群,而有些数据中心则不提供。
相比较而言,Azure提供的实例类型就比较寒碜了,只有5种不同的实例可以选择。从超小,小,中,大到超大,基本上对应于Amazon的Micro, M1 Small, M1 Medium, M1 Large和M1 Extra Large。对于一些简单的应用基本上也够用,但是如果要涉及到超大内存或者GPU,就无法实现了。
在具体价格比较上,除了微型实例,AWS Linux比Windows要便宜43%。而Azure Windows和Linux的价格一致,比AWS Linux贵了23%,比AWS Windows要便宜30%。这也符合微软的特点,Windows对微软来说本来就是不要购买的,而Amazon则需要向微软购买Windows。具体可以参考下表。
|
AWS Linux |
AWS Windows |
Azure Linux & Windows |
微型 |
$0.020 |
$0.020 |
$0.013 |
小 |
$0.065 |
$0.115 |
$0.080 |
中 |
$0.130 |
$0.230 |
$0.160 |
大 |
$0.260 |
$0.460 |
$0.320 |
超大 |
$0.520 |
$0.920 |
$0.640 |
当然,上面列出的价格只是按需使用时候的价格,AWS还提供了预留实例的价格,1年期和3年期,根据使用率的不同,价格都有所不同。此外还有竞价实例,根据当时的价格竞争,以一个较低的价格获取实例。AWS提供了一系列的组合来帮助提高机器使用率,也降低了云的成本。Azure也是类似,有6个月预付和12个月预付的方法,在标准价格上可以打一个折扣,如果用量更大,可以和微软签署EA,获得更加优惠的价格。
操作系统和软件
AWS提供的操作系统很多,把主要包括Linux和Windows,主要有Red Hat Enterprise Linux,Windows Server,Oracle Enterprise Linux,SUSE Linux Enterprise,Amazon Linux AMI,Ubuntu,Fedora,Gentoo Linux,Debian。
数据库软件有Microsoft SQL Server Standard,MongoDB,含 Apache Cassandra 的 Acunu Storage Platform Standard Edition,TurnKey PostgreSQL,Couchbase Server – 企业标准版。
应用程序服务器有IBM WebSphere Application Server, Tomcat Java Web 应用程序部署, Apache – Java Servlet 和 JSP 平台上的 Tomcat,Zend Server(群集式)。
至于内容管理和商业智能,AWS也提供了一系列软件,包括WordPress,Drupal 6,MediaWiki Wiki System,SAP BusinessObjects 10 Named User License,JasperReports Server Community Edition等等。
Azure在这点上和Amazon进行了争锋相对的竞争,微软把很多自有的软件都放了出来,还提供了许多开源的软件,当然在Linux上,Azure还是没有办法和AWS竞争。具体的比较如下:
AWS |
Azure |
|
操作系统 |
Red Hat Enterprise Linux |
|
Windows Server |
Windows Server 2008/2012 |
|
Oracle Enterprise Linux |
||
SUSE Linux Enterprise |
SUSE Linux Enterprise Server 11 SP2 |
|
Amazon Linux AMI |
||
Ubuntu |
Ubuntu Server 12.04.1 TLS/12.10 |
|
Fedora |
||
Gentoo Linux |
||
Debian |
||
OpenLogic CentOS 6.3 |
||
数据库 |
Microsoft SQL Server Standard |
Microsoft SQL Server 2012 |
MongoDB |
||
Acunu Storage Platform Standard Edition |
||
TurnKey PostgreSQL |
||
Couchbase Server |
||
应用程序服务器 |
IBM WebSphere Application Server |
|
Tomcat |
||
Zend Server |
||
内容管理 |
WordPress/Drupal 6/ MediaWiki Wiki System |
WordPress/Drupal 7/MediaWiki/BlogEngine.NET/Composite C1 CMS/DasBlog/DotNetNuke/Galery Server Pro/Incentive/Joomla.Kentico CMS/mojoPortal/Orchard CMS/phpBB/razorC.net/Umbraco CMS |
商业智能 |
SAP BusinessObjects 10 Named User License |
BizTalk Server 2013 |
JasperReports Server Community Edition |
当然,在AWS EC2和Azure Virtual Machine的具体使用上,还有很多不同,关于这些我们会放到下一节讨论。
EC2和Azure VM磁盘性能分析
在虚拟机创建完成之后,CPU和内存的配置等等基本上是一目了然的。如果不考虑显卡性能,一台机器最重要的性能瓶颈就是硬盘。由于无论是EC2还是Azure VM都使用了虚拟机,而存储盘也是以某种形式存放在磁盘阵列或者NAS设备中,所以磁盘的读写性能成为使用云计算虚拟服务器里最重要的考虑因素。这一节我们先不去考虑EC2里面的Elastic Block Store或者Azure里面的Azure Drive的具体实现,而使用免费的HD Tuner,对EC2/Azure里虚拟机的磁盘进行性能分析。
EC2 EBS定义
首先在EC2中,我们创建了一台Large的服务器,上面运行的是Windows Server 2012。同时在服务器上附加了4块磁盘,分别如下:
|
大小 |
类型 |
备注 |
C |
30GB |
Standard |
Auto-Enable Volume IO = ON,系统盘 |
D |
50G |
Standard |
Auto-Enable Volume IO = OFF |
E |
100G |
Provisioned IOPS |
IOPS = 1000 |
F |
200G |
Provisioned IOPS |
IOPS = 2000 |
在这里要选择Large的原因是因为在EC2的文档中提到,如果使用Provisioned IOPS卷,最好要使用EBS优化的实例。EBS优化的实例使用优化的配置,提供了专用的EBS吞吐的能力。这种优化通过最小化EBS IO和你的EC2实例其他流量之间的内容来达到最佳的性能。EBS优化可以让实例完全用到EBS卷上的IOPS,流量大概在500Mbps到1000Mbps,取决于你使用的实例类型。提供的IOPS卷被设计为一年中99.9%的时间可以提供10%以内的性能。
EBS优化的实例其实只有M1 Large, M1 Extra Large和高内存四倍超大(M2.4xlarge),所以这里我们选择了Large类型。
另外一个要了解的概念是EBS的类型,EBS有两种类型,Standard和Provisioned IOPS:
标准卷提供了轻量级或者间隔的IO需求,这些卷大概平均大约提供100 IOPS,在爆发的时候大概到几百个IOPS,适用于引导盘。
Provisioned IOPS卷设计用于满足IO需求大的应用,特别是数据库,在随机IO访问时,对存储性能和一致性非常敏感。你可以在创建卷的时候定义IOPS的数值,当前最大支持到2000 IOPS每个卷。你可以创建多个卷,为应用程序实现成千上万的IOPS。Provisioned IOPS卷最小10GB,IOPS的值最大为卷大小的十倍。比如1000 IOPS的卷最小是100GB。
这里有一点需要注意的是,要满足IOPS卷的SLA,需要有一些条件
1,这个卷附加到EBS优化的实例上。
2,平均的队列长度至少为1/200 IOPS。
3,读写操作块为16KB或更小。例如1000 IOPS每秒可以发送1000个16KB的写,500个32KB的写,250个64KB的写等等。
和标准卷一样,第一次访问数据时最多大约有50%的IOPS下降,当访问之后性能会恢复,所以如果要最大化性能,最好在访问数据前先把访问一遍所有的块。此外快照也会降低IOPS的性能。更详细的内容可以参考EBS的文档。
另外还有一个地方需要注意的是Auto-Enable Volume IO,这个东西其实和磁盘性能关系不大,这个意思是如果当磁盘状态变成”损害”(impaired),那么不要禁止IO操作,自动允许磁盘仍然可以进行IO操作。
Azure VM 定义
在Azure VM中,我们会创建2块Azure Drive,加上Azure VM自带的2个驱动器,一台机器上也有4个驱动器如下:
|
大小 |
缓存 |
备注 |
C |
30GB |
ReadWrite |
系统盘 |
D |
140G |
ReadWrite |
自带存储 |
E |
100G |
None |
|
F |
100G |
ReadWrite |
Azure VM由于依然是Preview,所以对磁盘的类型和性能分析的文档和AWS没有办法比。我们所能得知的是,C, E, F盘都是以VHD的形式存储在Azure的存储账户中,并且附加到虚拟机上。D盘是服务器在创建虚拟机是默认添加的一块磁盘,可以用于临时数据的存储。其中C, E, F都是持久化的存储,可以创建快照,还可以跨地域备份,而D盘则没有这些优点。当然,D盘是白送的,EC2上没有这种D盘可以使用。
接下来,我们将使用HD Tune这个工具对Azure和EC2的磁盘性能进行一个简单的比较,主要包括磁盘读写性能,不同大小文件的读写以及随机读写进行比较。首先是将EC2的不同类型磁盘进行比较,接着对Azure VM的磁盘性能进行比较,最后将EC2和Azure的磁盘进行横向比较。
EC2磁盘性能比较
1, Benchmark
磁盘 |
最小传输速率(MB/s) |
最大传输速率(MB/s) |
平均速率(MB/s) |
访问时间(ms) |
爆发率(MB/s) |
图例 |
C |
42.0 |
56.0 |
50.9 |
6.62 |
57.0 |
图1 |
D |
12.2 |
58.9 |
52.8 |
8.00 |
51.2 |
图2 |
E |
31.7 |
35.2 |
33.5 |
20.3 |
40.8 |
图3 |
F |
32.7 |
40.8 |
33.6 |
19.4 |
40.8 |
图4 |
图 1 Benchmark - EC2 - C – System
图 2 BENCHMARK - EC2 - D - Standard
图 3 BENCHMARK - EC2 - E - 1000 IOPS
图 4 BENCHMARK - EC2 - F - 2000 IOPS
从表中的4个驱动器性能可以看出,Standard类型的驱动器明显要比Provisioned IOPS驱动器传输速率要高出许多。标准驱动器的平均传输速率在50MB/s左右,而IOPS驱动器只有33MB/s。所以对于要进行短暂快速传输的数据,还是使用标准类型会比较好。
2, File Benchmark
磁盘 |
顺序读(KB/s) |
顺序写(KB/s) |
4KB随机读IOPS |
4KB随机写IOPS |
32个4KB随机读IOPS |
32个4KB随机写IOPS |
图例 |
C |
102176 |
42056 |
1828 |
1046 |
16409 |
4316 |
图5 |
D |
98794 |
38097 |
2142 |
1301 |
15569 |
4440 |
图6 |
E |
41631 |
40365 |
1020 |
1020 |
1019 |
1019 |
图7 |
F |
41890 |
34581 |
2040 |
1869 |
2057 |
2040 |
图8 |
图 5 File BENCHMARK - EC2 - C – System
图 6 FILE BENCHMARK - EC2 - D – Standard
图 7 FILE BENCHMARK - EC2 - E – 1000 IOPS
图 8 FILE BENCHMARK - EC2 - F – 2000 IOPS
从上表可以看出,标准类型的磁盘在读的性能上要远远好于IOPS的磁盘读性能,对于4KB的随机读写,性能也是远远好于IOPS类型,但是它的读写性能受到外在的影响和干扰严重,波动非常巨大。此外标准类型数据的顺序读速度是顺序写速度的将近2倍,读的速度大约是100MB/s,而写却只有35MB/s左右,这和刚才的测试结果也大体一致,不过标准盘号称的是100IOPS,测试的结果却远远好于他声称的数据。对于IOPS盘而言,它的读写性能比较平均,速度都在40MB/s左右,不过IOPS却非常美好地达到了我们设置的要求。对于1000 IOPS的磁盘,读写基本上是1020 IOPS,对于2000 IOPS的盘,读写基本上是2040。虽然速度上和标准类型的盘在峰值上无法相比,但是由于性能稳定,可以靠谱地实现许多例如数据库这样的需求。
Azure VM磁盘性能比较
1, Benchmark
磁盘 |
最小传输速率(MB/s) |
最大传输速率(MB/s) |
平均速率(MB/s) |
访问时间(ms) |
爆发率(MB/s) |
图例 |
C |
8.3 |
36.1 |
15.2 |
30.7 |
208.1 |
图9 |
D |
304.9 |
1012.9 |
922.6 |
0.059 |
744.5 |
图10 |
E |
9.7 |
15.8 |
15.0 |
3.44 |
10.9 |
图11 |
F |
26.0 |
40.5 |
31.5 |
0.962 |
77.4 |
图12 |
图 9 BENCHMARK - Azure - C – System
图 10 BENCHMARK - AZURE - D – Temp
图 11 BENCHMARK - AZURE - E – No Cache
图 12 BENCHMARK - AZURE - F - ReadWrite Cache
Azure的磁盘有一个盘非常有亮点,就是附赠的D盘,这个盘的最小传输速率是304.9MB/s,最大速率甚至达到了1012.9MB/s,平均速率居然能达到922.6MB/s,这是2块SSD Raid 0阵列才能达到的速度啊,这一点上完全秒杀EC2。可惜的是这个盘上的数据不是可持久化的,只能作为临时的存储。另外三个盘就真让人有点捉摸不透了。首先是用作操作系统的C盘,最小传输速率只有8.3MB/s,最大也只有36.1MB/s,平均速率是15.2MB/s,这和没有打开Cache的E盘速度是一致的。也就是说,在Azure storage account里面的VHD文件的访问性能居然只有可怜的15MB/s。另外C盘的访问时间居然达到了破天荒的30.7ms,这样的速度在很多情况下完全无法满足应用的要求。即使在打开了读写缓存的F盘上,速度只有31.5MB/s。
2, File Benchmark
磁盘 |
顺序读(KB/s) |
顺序写(KB/s) |
4KB随机读IOPS |
4KB随机写IOPS |
32个4KB随机读IOPS |
32个4KB随机写IOPS |
图例 |
C |
24003 |
12249 |
2944 |
5910 |
0 |
2041 |
图13 |
D |
2353760 |
1911305 |
18938 |
17802 |
70883 |
67622 |
图14 |
E |
58760 |
39056 |
188 |
164 |
4688 |
1519 |
图15 |
F |
21846 |
13701 |
1059 |
156 |
1227 |
1470 |
图16 |
图 13 File BENCHMARK - AZURE - C - System
图 14 File BENCHMARK - AZURE - D - Temp
图 15 File BENCHMARK - AZURE - E - No Cache
图 16 File BENCHMARK - AZURE - F - ReadWrite Cache
基本上性能和之前benchmark的也没有太大出入,最快的D盘顺序读和顺序写达到了惊人的2353760KB/s和1911305KB/s,2GB/s左右的读写速度是我看到过最快的硬盘读写了,如果不是SSD,那么肯定是类似于Memory Cache的技术了。不过用于持久化存储的数据盘速度都非常平平,系统盘只有23MB/s的读和11MB/s的写,IOPS的数据还凑合,但是有一个很令人惊讶的数据是32个随机4KB读的IOPS居然是0。我测试了好几遍,都是0。也就是说当我们进行32个4KB随机读写时,这个磁盘应该是hang住了。我不知道这是由于操作系统的原因还是测试软件的原因,但是事实就是磁盘不工作了。这种状态很容易导致操作系统失去响应,程序被拖死。希望在Azure的这个feature正式release之后,不会出现这种恐怖的事情。
另外有一点需要注意的是,对于没有Cache的磁盘,顺序读和顺序写的速度都还可以接受,大概在50MB/s和40MB/s左右,不过IOPS只有可怜的188和164,性能非常一般。对于带缓存的磁盘,读写速度由于需要缓存验证,也降低到了20M和10M左右。
EBS和Azure Drive磁盘性能比较
根据上面的数据,我们得到了下面的总表:
所谓成也萧何,败也萧何。在所有的磁盘中,性能最好最优异的,就是Azure中的那块临时盘。而除此之外,包括系统盘,不带Cache和带Cache的磁盘性能,Azure的盘都比EBS要弱,甚至还出现磁盘卡死,IOPS=0的情况。
要让Azure VM离开Preview的阶段,磁盘的性能必须的得到解决。否则在实际应用中,一定会出现大量的问题。
Amazon Simple Storage Service 和 Microsoft Azure Blob Storage
这几天Nasuni公司出了一份报告,分析了各个云厂商的云存储的性能,包括Amazon S3,Azure Blob Storage, Google Drive, HP以及Rackspace。其中性能上Azure排名第一,在各种大小的文件读写上性能都很优秀,有兴趣可以参考他们完整的白皮书。
今天我们来看一下Azure Blob Storage和Amazon Simple Storage Service的一些功能和指标上的不同。
Amazon Simple Storage Service (S3):
Amazon Simple Storage Service (S3)是Amazon的王牌存储服务,提供了强大的可扩展性,高可用性和灾难恢复。它主要提供以下功能:
1,读,写,删除数据对象,从1个字节到5TB都可以,数据对象数量没有限制。
2,每个数据对象被放在一个数据块(bucket)中,通过唯一的密钥访问。
3,数据块存储在亚马逊不同的区域。
4,存储在某个区域的数据永远不会离开这个区域。
5,身份验证机制旨在确保数据安全,以防未授权访问。数据对象可以设置为私有或公有,也可以向特定用户授予权限。
6,另外还提供了安全数据上传/下载及静态数据加密的选项以便进一步保护数据。
7,使用基于标准的 REST 和 SOAP 接口,它们可与任何 Internet 开发工具包搭配使用。
8,默认的下载协议是 HTTP。提供 BitTorrent™ 协议接口,以便降低大规模分配的成本。
9,相关的管理功能,包括按数据块分割数据,监视和控制成本,以及使用去冗余存储(Reduced Redundancy Storage)等等。
基本上,Amazon的存储在特定年度内为数据提供 99.999999999% 的持久性和 99.99% 的可用性,能够承受2个设施的数据同时丢失。当然如果使用RDS,那么在特定年度内为数据提供 99.99% 的持久性和 99.99% 的可用性。这种持久性水平对应的平均年数据损失率预计为 0.01%。
S3一个比较有意思的功能是静态网站托管,甚至可以做一些简单的Redirect,S3由于价格便宜,特别适合托管包含静态内容(包括 html 文件、图片、视频以及 JavaScript 等客户端脚本)的网站。
此外,S3还支持一个叫DevPay的功能,支持开发者通过Amazon向客户存储在他们S3账户里的数据进行收费。
存储的价格通过三方面,存储,请求和数据传输,对于不同机房有所不同,这里我们复制了美国机房的价格:
存储价格:
标准存储 |
降低冗余存储 |
|
第一个 1 TB/月 |
$0.095 每 GB USD |
$0.076 每 GB USD |
下一个 49 TB/月 |
$0.080 每 GB USD |
$0.064 每 GB USD |
下一个 450 TB/月 |
$0.070 每 GB USD |
$0.056 每 GB USD |
下一个 500 TB/月 |
$0.065 每 GB USD |
$0.052 每 GB USD |
下一个 4000 TB/月 |
$0.060 每 GB USD |
$0.048 每 GB USD |
5000 TB 以上/月 |
$0.055 每 GB USD |
$0.037 每 GB USD |
请求价格:
定价 |
|
PUT、COPY、POST 或 LIST 请求 |
$0.01 每1,000 个请求 |
删除请求 |
免费 |
GET 及所有其他请求 |
$0.01 每 10,000 个请求 |
数据传输的价格:
|
定价 |
传入Amazon S3的数据 |
|
所有传入数据 |
免费 |
传出Amazon S3的数据到 |
|
到北弗吉尼亚区域的EC2服务器 |
免费 |
其他AWS区域或者Amazon CloudFront |
$0.020 每 GB USD |
传出Amazon S3的数据到互联网 |
|
第一个 1 GB/月 |
$0.000 每 GB USD |
最多 10 TB/月 |
$0.120 每 GB USD |
下一个 40 TB/月 |
$0.090 每 GB USD |
下一个 100 TB/月 |
$0.070 每 GB USD |
下一个 350 TB/月 |
$0.050 每 GB USD |
下一个 524 TB/月 |
|
下一个 4 PB/月 |
|
大于 5 PB/月 |
此外,Amazon还提供更便宜的备份存储服务,成为Amazon Glacier,这个已经超出了这一篇的范围。以后我们可以专门讨论一下。
Amazon S3提供了完整的REST API,可以从任何代码进行操作,此外对Bucket也提供了大量的安全性策略,可以对不同的各种操作进行允许和禁止等等。
Microsoft Azure Blob Storage
Azure的Blob Storage是用于存储大量非结构化文本或二进制数据(如视频、音频和图像)的最简单方式,功能上和S3大同小异。主要提供如下功能:
1,读,写,删除数据对象,从1个字节到1TB都可以,数据对象数量没有限制。
2,每个数据对象被放在一个容器(Container)中,通过两个互相备份的密钥访问。
3,存储在不同的区域。
4,存储在某个区域的数据,如果使用地理冗余存储,会从欧洲备份到美洲。
5,身份验证机制旨在确保数据安全,以防未授权访问。数据对象可以设置为私有或公有,也可以向特定用户授予权限。
6,使用基于标准的 REST 和 SOAP 接口,它们可与任何 Internet 开发工具包搭配使用。
7,默认的下载协议是 HTTP。
8,相关的管理功能,包括通过容器分割数据,监视存储账户。
9,Blob的对象可以被安装为驱动器
我在Azure的文档中没有找到关于持久性百分比,或许微软认为这些数据只要进了Azure,就肯定不会丢失,也没有必要提供那么多9了。
在Azure中,存储被分为本地冗余存储和地理冗余存储。本地冗余存储 (LRS)是在单个子区域内提供高度持久且高度可用的存储。地理冗余存储 (GRS)是通过将您的数据另外存储在同一区域内的另一个子区域中来提供最高级别的持久性。默认情况下,存储帐户设置为地理冗余。如果客户不需要这一额外级别的持久性,则可以关闭其存储帐户中默认的地理冗余设置。
对于不同的存储方式,价格也有所不同:
存储价格:
存储费用按照根据下表选择的冗余级别的分级费率来计算。
存储容量 |
地理冗余 |
本地冗余 |
前 1 TB / 月 |
每 GB $0.0950 |
每 GB $0.0701 |
后 49 TB / 月 |
每 GB $0.0800 |
每 GB $0.0650 |
后 450 TB / 月 |
每 GB $0.0701 |
每 GB $0.0600 |
后 500 TB / 月 |
每 GB $0.0650 |
每 GB $0.0550 |
后 4,000 TB / 月 |
每 GB $0.0600 |
每 GB $0.0450 |
后 4,000 TB / 月 |
每 GB $0.0550 |
每 GB $0.0370 |
超过 9,000 TB / 月 |
请求价格:
定价 |
|
所有请求 |
$0.01每 100,000 个请求 |
数据传输的价格:
所有传入Azure数据中心的数据都是免费的,而传出到Internet或其他区域的数据的美国价格如下:
出站数据传输 |
区域1价格 |
区域2价格 |
前 10 TB / 月* |
每 GB$0.12 |
每 GB$0.19 |
后 40 TB / 月 |
每 GB $0.09 |
每 GB $0.15 |
后 100 TB / 月 |
每 GB $0.0701 |
每 GB $0.13 |
后 350 TB / 月 |
每 GB $0.05 |
每 GB $0.12 |
大于 500 TB / 月 |
其中区域1包括了欧洲和美洲,区域2包括了亚洲。
S3和Azure Blob Storage的比较
功能比较
在功能上, S3的功能比Azure要略强大一些,参见下表:
|
Azure |
S3 |
最大文件大小 |
1TB |
5TB |
文件数量 |
没有限制 |
没有限制 |
最大账户大小 |
100TB |
不确定 |
Page Blob |
支持,用于VHD |
不支持 |
存储对象容器 |
Container |
Bucket |
支持协议 |
HTTP/HTTPS |
HTTP/BitTorrent |
访问控制 |
支持权限,各种策略 |
支持权限,各种策略 |
REST API |
支持 |
支持 |
托管静态网站 |
不支持 |
支持重定向,索引,错误页面等 |
地理冗余备份 |
支持 |
不支持 |
降低冗余备份 |
不支持 |
支持 |
开发者支付 |
不支持 |
支持 |
直接大量数据导入导出 |
不支持 |
支持 |
自动删除 |
不支持 |
支持 |
服务器端加密 |
不支持 |
支持 |
客户端加密 |
支持 |
支持 |
价格比较
价格上,两者定价模型稍微有点不同,不过价格上Azure稍微便宜些,下面同是美国的价格比较。
|
|
Amazon S3 |
Azure Blob Storage |
||
存储价格 |
标准存储 |
降低冗余存储 |
地理冗余 |
本地冗余 |
|
第一个1TB/月 |
$0.095/GB |
$0.076/GB |
$0.0950/GB |
$0.0701/GB |
|
下一个49TB/月 |
$0.080/GB |
$0.064/GB |
$0.0800/GB |
$0.0650/GB |
|
下一个450TB/月 |
$0.070/GB |
$0.056/GB |
$0.0701/GB |
$0.0600/GB |
|
下一个500TB/月 |
$0.065/GB |
$0.052/GB |
$0.0650/GB |
$0.0550/GB |
|
下一个4000TB/月 |
$0.060/GB |
$0.048/GB |
$0.0600/GB |
$0.0450/GB |
|
下一个4000TB/月 |
$0.055/GB |
$0.037/GB |
$0.0550/GB |
$0.0370/GB |
|
9000TB以上/月 |
$0.055/GB |
$0.037/GB |
|||
请求价格 |
|
请求 |
请求 |
||
PUT/COPY/POST/LIST |
$0.01 每1,000 个请求 |
$0.01每 100,000 个请求 |
|||
删除请求 |
免费 |
$0.01每 100,000 个请求 |
|||
GET 及所有其他请求 |
$0.01 每 10,000 个请求 |
$0.01每 100,000 个请求 |
|||
流量价格 |
|
欧美价格 |
亚洲价格 |
欧美价格 |
亚洲价格 |
第一个1GB/月 |
免费 |
免费 |
暂时免费 |
暂时免费 |
|
后4GB/月 |
$0.120/GB |
$0.201/GB |
暂时免费 |
暂时免费 |
|
最多 10 TB/月 |
$0.120/GB |
$0.201/GB |
$0.120/GB |
$0.19/GB |
|
下一个 40TB/月 |
$0.090/GB |
$0.158/GB |
$0.090/GB |
$0.150/GB |
|
下一个100TB/月 |
$0.070/GB |
$0.137/GB |
$0.0701/GB |
$0.130/GB |
|
下一个350TB/月 |
$0.050/GB |
$0.127/GB |
$0.050/GB |
$0.120/GB |
|
下一个524TB/月 |
我们可以看出,在存储价格上,S3和Azure的标准存储和地理冗余存储价格基本一致,而Azure的本地冗余价格还要比降低冗余存储更便宜。对请求来说,S3区分了不同的请求而出现不同的价格,而Azure统一了所有的请求,但是价格非常便宜。十万个请求才一美分,几乎可以忽略。对于流量而言,微软的前5G流量免费,而S3的前1G流量免费。其他的价格,欧美的价格基本一样,而亚洲价格微软比较有竞争力。