云計算里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流量免費。其他的價格,歐美的價格基本一樣,而亞洲價格微軟比較有競爭力。