Amazon Aurora 調研
目錄
<a name="官方介紹"></a>官方介紹
Amazon Aurora 是一個關系型數據庫引擎,結合了高端商用數據庫的速度和可用性,同時還具有開源數據庫的簡單性和成本效益。
它提供的吞吐量比同一硬件上運行的標準 MySQL 最多高出五倍。Amazon Aurora 的設計與 MySQL 5.6 兼容,因此現有 MySQL 應用程序和工具無需修改即可運行。
Amazon Aurora 繼 MySQL、Oracle、Microsoft SQL Server 和 PostgreSQL 之后,成為第五個可通過 Amazon RDS 提供給客戶的數據庫引擎。
兼容 MySQL 的關系數據庫,其性能高達 MySQL 的 5 倍。
有商業數據庫的安全性、可用性和可靠性,但成本只是商業數據庫的 1/10最高可以實現每秒 50 萬次讀取和 10 萬次寫入
最多15個副本
存儲空間最小為 10GB,最大為 64TB
Amazon Aurora 的設計旨在提供高于 99.99% 的可用性。從物理存儲故障恢復是一個透明過程,而實例故障轉移也只需要不到 30 秒
Amazon Aurora 的存儲具有容錯和自我修復功能。您的數據有六個副本復制分布在三個可用區中,并且會持續備份到 Amazon S3
<a name="宣傳特點"></a> 宣傳特點
- 讀寫分離
- 快速Fail Over
- 從庫幾乎0延遲
- 5X 性能于MySQL
- 易于擴展(應該是讀)
<a name="概念與架構"></a> 概念與架構
- Aurora 并不開源
- Aurora 不是用于MySQL的插件式引擎(不是InnoDB或者TokuDB這樣的引擎)
- Aurora 算是一個數據庫軟件(網上都稱其為engine,個人覺得,Aurora 作為一個軟件更合適)
- Aurora 是結合了Amazon 云生態系統里各種服務組件的、一個能夠媲美商業數據庫(官方宣傳)的、兼容MySQL的數據庫引擎
- Aurora 開源了也沒用,因為它依賴的都是Amazon自己的基礎服務(S3等)
上圖是Percona Vadim Tkachenko 猜想Aurora 的架構圖,基本的原理就是共享了一個高效的存儲層,用這種方式來取代binlog的復制方式,所以才會提供很快的Fail Over特性、幾乎為0的從庫延遲。
這種架構,跟Oracle RAC 是不是很像?
PXC是不是也有些類似?
share everything?
ps:
Amazon 的工程師,在對外宣講的一個點,就是針對現有數據庫架構很多冗余部件的吐槽,這樣對于數據的備份、成本、靈活性都很不方便。
通過上述的這種架構,Aurora 可以:
- Avoid data writes to storage
- Avoid binary logs
- Avoid InnoDB transactional logs
- Disable doublewrites
- Disable InnoDB checksums
理論上是有性能提升的。
<a name="性能HA"></a> 性能 & HA
官方測試有爭議
- 官方宣稱,寫方面,3X 于MySQL,讀方面,5X 于MySQL
- 官方的測試環境
- 250 tables, with 25000 rows each
- 4.5GB
- Amazon used r3.8xlarge instances
- 32 virtual CPUs
- 244GB of memory
Percona 測試
- 結論
- 在高配(高IO)的EC2機器上,Percona Server性能依然高于或者持平 Aurora。
- 但是在數據量比較大的情況下,Aurora 還是有一定優勢的。
- 數據量較少的情況下,Aurora 性能不及Percona。如果按照官方的對比,Percona Server 也要比MySQL 高出很多性能了。
- 最高IO的EC2,價格也最貴,成本最大。
- 從下面的表格來看,Aurora 還是有一定的優勢的。
價格對比:
Item | Config | Price a Year($) |
---|---|---|
Aurora | 4 virtual CPUS + 30GB memory + 400GB | 311.40 |
ps | 4 virtual CPUS + 30GB memory + 500GB + 1500/3000 ios | 210.60 |
ps-io2000 | 4 virtual CPUS + 30GB memory + 500GB + 2000 ios | 353.10 |
ps-io3000 | 4 virtual CPUS + 30GB memory + 500GB + 3000 ios | 418.10 |
其他測試
- 結論
- 5?X 太夸張
- 性能好于用戶自己在EC2上搭建的MySQL(跟percona的測試有沖突)
- 跟自家的5.6 RDS比,沒有太大優勢
- 但是Aurora 在響應時間上,有一定優勢
HA測試
- 上圖來自Percona 工程師 Yves Trudeau
- 圖中顯示,Aurora 的Fail Over速度明顯好于MHA,但是跟Galera 還有差距
- 該blog 從HA、性能等方面,大量對比了Galera 和Aurora,對于Aurora這種架構,只跟MySQL 單機去比,可能不太合適,和Galera 去對比,算是恰如其分的。
<a name="質疑亮點"></a>質疑 & 亮點
質疑
5X 的性能,見上文。
-
與官方MySQL比:
- 大量細節顯示,Aurora 跟MySQL 5.6 有很多淵源,并且,從Bug List 來看,Aurora 明顯跟不上MySQL 官方的腳步:
My question here, does Amazon have the ability to keep up with MySQL bug fixes and regularly update their software? So far it does not seem so.
-
unusual behaviour
怪異的隔離級別
默認只支持RR,修改其他不生效,但是不報錯
被殺掉的從庫查詢:
Scenario:
READER:
execute long SELECT col1 FROM tab1
WRITER:
while SELECT running, execute ALTER TABLE tab1 ADD COLUMN col2 ;
Effect: SELECT on READER fails immediately with an error: “ERROR 1866 (HY000): Query execution was interrupted on a read-only database because of a metadata change on the master”
So there again I think Aurora does its best given architectural limitations and one-directional communication: it just chooses to kill read statements on Readers.
亮點
- 修復了Query cache 對寫造成的影響。
<a name="結論"></a> 結論
- 大神 DimitriK 表示一臉不屑,5.7早就可以達到100w QPS,單純從性能來講,Aurora 沒有太大優勢。
注釋:Dim的測試全都是內存測試,他的原則就是這種最為簡單的測試,最能體現引擎內部的性能優化程度。
MySQL Performance: 5.7 and RDS Aurora, so what?.. ;-)
個人認為,單純討論性能沒有太大意義,要從RDS服務本身去談。如備份、高可用。
Aurora 的設計利用了Amazon 本身的諸多系統,從設計本身就可以做到高速Fail Over,另外,其備份也要比傳統的MySQL實例備份來的方便。
從Amazon 方面考慮,開發Aurora 這種東西,利用了自家的很多技術,這對云服務的成本來講也是很大一筆節約。
對用戶來講,購買EC2 主機來搭建MySQL也許不是一個明智的選擇,如果Amazon 能提供更好、更廉價的RDS服務,何樂而不為?
Amazon 的野心,在于構建一個能夠媲美商業數據庫的數據庫,但是這個數據庫并不是一個用來賣的軟件(不像 Oracle那樣),他的目的在于打造一個基于云的商業數據庫服務,及Amazon RDS。
- 套用Percona Vadim Tkachenko 的一句話:
In general I think Amazon Aurora is a quite advanced proprietary version of MySQL. It is not revolutionary, however, and indeed not “reimagined relational databases” as Amazon presents it. This technology does not address a problem with scaling writes, sharding and does not handle cross-nodes transactions.
“這不是一個革命性的產品,它沒能解決寫擴展的問題,也沒有解決sharding、以及多節點事物的問題,但是這給關系型數據庫未來的發展,提供了一些想象,是一個很好的MySQL衍生品?!?/p>