在談這家喪心病狂的公司之前,先說說“正常”的IT公司是怎樣的:
一家IT公司,一般只會有一款數據庫產品。
我們衆所周知的Oracle, Microsoft(SQL), MongoDB等等都是這樣。
(像Oracle買了擁有MySQL的Sun這樣的,不能算了,畢竟MySQL不是Oracle最開始自主研發的。)
爲什麼會這樣呢?原因主要有2個:
1. 如果一家公司,能有一款拿得出手的數據庫產品,就可以在整個IT業界立足了,實在沒有必要開發第二款數據庫。
2. 數據庫系統的開發成本也比較高,投入很大,很少有公司有能力去開發多款數據庫。
所以,反過來說,如果一家IT公司,它開發了很多款不同類型的數據庫,那它一定有2個特質:
1. 有野心:一款數據庫,不足以實現它獨霸整個DBaaS(數據庫即服務)的野心,所以它要開發6款;
2. 有錢:數據庫的開發不像軟件開發,人才很少,重金買人,才能開發數據庫。
看來,“喪心病狂”也不是那麼容易的!
今天我們要講的這家“喪心病狂”的開發了6款數據庫產品的公司就是亞馬遜(Amazon),確切地說是亞馬遜的雲計算部門,也就是AWS。
AWS有哪6款數據庫呢?
確切地說,我認爲是7款數據庫:
* RDS
* RDS-Aurora
* Redshift
* DynamoDB
* Neptune
* Timestream
* QLDB
(RDS和RDS-Aurora有些人認爲是同款數據庫。)
這幾款數據庫真是各有神通,幾乎把所有數據庫相關的應用場景都捕捉到了。
接下來逐一介紹下:
RDS (Relational Database Service)
RDS顧名思義就是“關係型數據庫”。這裏其實亞馬遜移植了市面上常用的幾款數據庫,做成了“雲”的版本給客戶,包括:Oracle,MySQL, MS SQL, MariaDB, PostgreSQL。
這麼做的好處,就是客戶教育成本低,遷移成本低,用自己熟悉的數據庫,又享受了雲端的高可用和高性能。
這些好像沒啥,很“正常”,還不夠“喪心病狂”,但是接下來的幾款數據庫產品,AWS就要開掛了。
RDS-Aurora
雖然說,Aurora是掛在RDS下面的一個數據庫產品,但是我認爲它完全是不一樣的。不能和其它RDS數據庫相提並論。
數據庫的一個核心問題就是解決“高併發”,其中包括:高併發的“讀”,和高併發的“寫”。(比如一個電商平臺的網站,對商品的查詢都是讀,下訂單則都是寫了。)
你可能會說,高併發的“讀”不難處理啊!可多幾個數據部分不就行了?比如,一份數據放在10個服務器上--對於讀,來說,是這樣的。
但是,如果系統裏面有很多數據副本的時候,高併發的“寫”就不能有效的同步到所有的副本上了--所以,高併發的讀寫實際上是一對兒矛盾的綜合體。
Aurora通過“日誌即數據”的概念,把“數據引擎”和“數據存儲”進行了有效的分割,從而達到了空前的高併發讀寫機能。
傳統的普通數據庫服務,或者普通的自建數據庫機構,“寫”只能發生在一個“主”數據上,然後“主”再把自己的數據同步給其它副本。Aurora則不同,“寫”可以發生在任何一個可用區上。Aurora的架構使用了3個可用區,每個可用區有2個副本,也就是一共6個副本,這6個副本都可以進行讀寫。極大的彌補了,傳統數據庫對高併發的瓶頸。這是不是很“喪心病狂”?這是如何做到的?!
細節,在這裏就不贅述了,有興趣的話,可以諮詢我們的架構師~
高併發的讀寫是典型的OLTP(On-Line Transaction Processing聯機事務處理過程)中發生的場景。那麼對於OLAP (On-Line Analytical Processing 在線分析過程),AWS提出了什麼產品呢?
Redshift
和OLTP場景下,數據庫需要支持高併發讀寫不同,OLAP場景下數據庫讀寫頻率很低,數據庫需要進行大量的聚合計算:數據量大,計算量也大。(比如,一天結束之後,我們需要對今天的用戶行爲進行分析,所有用戶行爲數據可能是幾個TB。)
這時候,就需要Redshift出場了。Redshift說起來也是關係型數據庫,但是它和RDS們有個本質的不同,它不是按“行”來存儲數據的,而是按“列”來的。不僅如此,它還按照“列”,對數據進行了排序!基本上這就是爲了做“聚合”而誕生的數據庫啊!而且按列聚合的數據庫很方便壓縮,Redshift可以處理PB級數據哦!!!
你說這就可以了吧:傳統的關係型數據庫,AWS有了;OLTP數據庫有了;OLAP數據庫也有了。AWS覺得還不夠!
DynamoDB
上面的都是關係型數據庫。DynamoDB是AWS提供的一款“非關係型數據庫”,特別以“鍵值存儲”爲核心。可以高效的進行大數據/大文件的快速讀取。
如果你是手遊行業/醫療行業/影視娛樂行業有大文件需要讀取的話,那麼你有福了。:)
Neptune
關係型數據庫有了,非關係型也有了!還不夠嗎?對於亞馬遜來說,當然不夠!
AWS又推出了“圖數據庫”。在現在這個社交應用(大數據相關性)橫行的年代,沒有圖數據庫,取一個簡單的人際關係,用“關係型數據庫”真是要累死的。舉2個簡單的例子:
1. 我們想知道用戶A和用戶B是幾度好友?如果A和B是直接好友也就罷了,用關係型數據庫Join一次也就行了。但是,萬一是10度好友呢?總不能Join 10次吧。關鍵是,如果不知道是幾度好友,難道要無限的Join下去嗎?
2. 我們的物流系統報告,北京到上海的一趟貨車延遲了,那有多少用戶會受到影響呢?一趟車可能影響10條物流鏈路?影響50個城市?影響2000個用戶?估計我們需要把系統裏面所有的數據都關聯查詢一遍纔能有個結論,成本太高了。
在上面的場景裏面(也就是不斷的大量的Join出現的時候),圖數據庫就是一個利器了。
這都已經好幾款數據庫了,還不夠嗎?AWS覺得還不夠。2018年的時候,它居然同時發佈了兩款新數據庫!!!
我真是要給這家公司跪了。
Timestream
顧名思義,Timestream是和時間相關的數據庫。因爲很多對數據的查新都是以時間段爲基礎的。Timestream就是針對這個場景的。
QLDB
QLDB的全稱是Quantum Ledger Database。它的應用場景也很好理解,最適合的場景是“記賬本”。“賬本”是不能被更改的,每一筆記錄都不能被改動,被忠實的記錄下來,已被查詢。QLDB就應運而生了。是不是有點兒“區塊鏈”的意思?只不過QLDB是有中心的。
說了這麼多~,說到底,AWS的“喪心病狂”,源自於它“對客戶的癡迷”,亞馬遜絞盡腦汁,把所有用戶能提出的業務場景都想到了,無論我們有什麼業務需求都可以用某款數據庫解決。
轉自:光環雲極客簡書博客