本文作者:楊傳輝(花名:日照)螞蟻集團資深總監、OceanBase 研發總經理,全面負責 OceanBase 研發工作。作為 OceanBase 創始成員和首席架構師,主導了技術架構設計,實現分佈式數據庫在核心金融場景零的突破,完成螞蟻集團核心數據庫100%上 OceanBase,主導 OceanBase TPC-C 測試並打破世界紀錄。曾在百度負責雲存儲與雲計算系統研究工作,著有專著《大規模分佈式存儲系統:原理與實踐》。
本文主要介紹數據庫的發展,帶大家共同回顧這一歷史進程,也將首次揭祕 OceanBase 誕生的故事。
什麼是數據庫
首先,什麼是數據庫。顧名思義,數據庫是按照數據結構來組織、存儲和管理數據的倉庫。歷史上曾經出現過層次數據庫、網狀數據庫以及關係數據庫。
如今,關係數據庫成為業界的主流。關係數據庫的全稱是 Relational Database Management System,簡稱叫 RDBMS。一般來講,關係數據庫主要應用在核心行業的核心業務場景,也就是我們經常說的 Mission-critical 場景,涉及到人、財、物等需要精確管理等應用。關係數據庫有一個第一定律,那就是永遠不要丟失任何一條數據。
關係數據庫可以被分成三個基本的模塊,包括:
關係模型,也就是我們經常聽到的表格、索引、外鍵、範式等;
事務處理,也就是事務的 ACID,原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability);
查詢優化,也就是 SQL 的解析、改寫、優化、執行等等。
(圖片來自互聯網)
數據庫技術的繁榮發展,也得益於很多優秀的科學家。數據庫領域有四位圖靈獎得主,第一位圖靈獎得主是 1973 年的網狀數據庫的創始人 Charles W.Bachman。第二位是 1981 年關係理論的提出者 Edgar F.Codd。第三位圖靈獎得主是事務處理的發明人 Jim Gray,於 1998 年獲得了圖靈獎,Jim Gray 也是科學研究四類範式的提出人,他是一個天才科學家。有個有趣的事可以和大家分享:當年微軟想把 Jim Gray 招到西雅圖的總部,但是,Jim Gray 不喜歡西雅圖的天氣,於是,微軟專門在舊金山給 Jim Gray 建了一個單獨的研究院。
第四位數據庫領域的圖靈獎得主是 Michael Stonebraker。Michael Stonebraker 不僅是位教授,而且還是不同數據庫公司的創始人,他創立了很多不同類型的數據庫產品,除了 Oracle 和 DB2 以外,絕大部分的數據庫產品,都或多或少與 Michael Stonebraker 有點關係。Michael Stonebraker 最著名的一個數據庫產品就是 Ingres,Ingres 是 Informix、Sybase、SQL Server、PostgresSQL 等一系列產品的前身,Michael Stonebraker 也是在 2014 年獲得了圖靈獎。
關係數據庫發展史
根據下圖的時間線,我們一起回顧下關係數據庫的發展史。
1970 年,Edgar F.Codd 首先提出了關係模型。接下來就有兩個關係模型的原型系統。第一個是 IBM 做出來的 System R,第二個是 Michael Stonebraker 領導的 Ingres。IBM 是關係模型的提出者,也是第一個原型系統的實現者,但是 IBM 並沒有抓住關係數據庫商業化的歷史新機遇,反而把機會讓給了一個叫 Larry Ellison 的人,1979 年 Oracle 模仿 IBM 的 System R 做出了第一個商業數據庫版本 Oracle Release 1。直到 1983 年,IBM 的第一個商業數據庫版本 DB2 才姍姍來遲,但是已經錯過了最好的數據庫發展時期。
1987 年,Sybase 和微軟一起做出了 Sybase SqlServer。1989 年,微軟買下了 Sybase SqlServer 的代碼版權,並且形成了一個獨立的 MS SqlServer 的分支。我們今天聽到的 SqlServer 一般指的是微軟的 MS SqlServer。
同一年,著名的開源數據庫 PostgreSQL 也誕生了。
1995 年,MySQL 誕生,MySQL 的創始人叫 Monty。一個非常神奇的事情是,MySQL 早期的主要代碼都是 Monty 一個人貢獻的,而且到今天為止,Monty 仍然保持著寫代碼的習慣。
2004 年,更多的列式數據庫產品,包括 MonetDB、C-Store 也加入到關係數據庫的產品行列。
分佈式系統發展
接下來,我們再來看下分佈式系統的發展。
分佈式系統也是一個相對比較古老的領域。但是直到最近的十幾二十年,分佈式系統才由理論變成大規模的工程實踐。對分佈式系統工程實踐貢獻最大的公司是 Google,Google 的基礎設施有三駕馬車,分別叫做《Google File System》、《Google MapReduce》以及《Google BigTable》。Google 發表了這三篇論文以後,基本上奠定了業界大規模分佈式存儲系統的理論基礎,所有對分佈式系統工程實踐感興趣的同學,我建議都去仔細精讀這三篇論文。
2005 年,Hadoop 成立,Hadoop 項目的初衷就是做出 Google 三駕馬車的開源實現。
2007 年,Amazon 發表了 Dynamo 的論文,Dynamo 的設計思想也比較有意思,他採用了 P2P 的思想來實現分佈式的存儲,裡面用到了包括一致性 Hash、NWR 等一系列非常有意思的技術。當然了,最終 P2P 的技術因為沒有辦法保證強一致性,並沒有成為業界的主流。
2009 年,Spark 項目成立。
2010 年,我所在的 OceanBase 項目成立。OceanBase 團隊是分佈式數據庫的信仰者、實踐者,OceanBase的定位是原生分佈式數據庫,以追求成為分佈式數據庫的領導者為目標。
2011 年,另外一個雲計算的巨頭微軟,發佈了 Windows Azure Storage。
2012 年,Google Spanner 發表了論文,Spanner 是全球第一個 Global Database,採用了 TrueTime、Paxos和兩階段提交等一系列分佈式的技術來實現了一個全球級別、可無限擴展的、強一致的分佈式數據庫。
2016 年,Amazon 發佈了 Aurora,Aurora 是一個存儲計算分離的系統,運行在公有云之上,它的設計思想很巧妙,它把存儲與計算分離使得可以非常簡單得實現存儲能力的可擴展。Aurora 有個核心的設計理念:The log is the Database。
關係數據庫的經驗教訓
關係數據庫發展了這麼多年,有很多的經驗教訓。
關於經驗,今天我選兩點經驗分享:
第一點:應用驅動創新,應用創新與技術創新相輔相成,互為促進。關係數據庫的很多技術都是應用驅動產生的,這也形成了非常強大的技術生態。
第二點:抽象與標準化,關係數據模型、事務處理模型本身就是最本質的抽象,能夠獲得圖靈獎的一個抽象。關係數據庫裡面也產生了很多的標準,其中最著名的標準是 :SQL 標準和 TPC 測試標準。
早期的商業數據庫也比較混亂,每一家商業數據庫都說自己是最好的。最終 TPC 組織站了出來,制定了 TPC-C、TPC-H 等一系列測試標準,並且採用第三方的專業的審計機構,進行嚴格的審計。TPC 組織使得不同的商業數據庫公司能夠獲得一個公平的、競技的舞臺,大家良性競爭共同促進。
分佈式數據庫-關係數據庫的未來
我堅定認為關係數據庫的未來一定是分佈式數據庫。為什麼這麼堅信?因為分佈式數據庫能夠完全兼容集中式數據庫的使用方法,包括關係模型、事務處理模型和 SQL 標準,並且融合分佈式雲原生的先進技術,從而充分享受到分佈式的技術紅利,包括高可用、可擴展、低成本、智能等等。
分佈式數據庫和集中式數據庫的關係,有點像當年的汽車與馬車,汽車剛出現的時候它並沒有馬車那麼好用,但是我們都知道,隨著時代的發展,汽車是一定會逐步替代馬車的。分佈式數據庫也是一樣,因為分佈式數據庫能夠完全兼容集中式數據庫,包含集中式數據庫的能力,並且具備更好的擴展能力。所以,分佈式數據庫未來也一定能夠替代集中式數據庫。
企業級分佈式數據庫 OceanBase
剛剛提到我們堅信分佈式數據庫的時代正在到來,接下來為大家介紹我們打造的這款企業級分佈式數據庫——OceanBase。
OceanBase 是一個透明可擴展的企業級數據庫,底層是一個原生的分佈式架構,這樣的設計,可以讓使用者充分享受到分佈式技術的技術紅利,包括:
高可用:RPO = 0,RTO < 30秒,最高支持三地五中心部署,這也就意味著,當一臺服務器、一個機房甚至一個城市發生故障的時候,OceanBase 都能夠在 30s 內恢復,完全不丟數據;
透明擴展:完備的分佈式事務、分佈式查詢、全局二級索引和全局一致性支持;
全球唯一通過 TPC-C 測試審計的分佈式數據庫,事務處理性能達到 7.07 億 tpmC,比競品高一個數量級;
從使用者的角度來看,OceanBase 兼容傳統的企業級數據庫,兼容 MySQL/Oracle的語法、企業級功能,具備與 Oracle 對標的高效處理混合負載的能力。OceanBase 已經支撐螞蟻集團&網商銀行所有核心業務的100%流量,支撐銀行、保險、證券、運營商、公共事業等多個關係到國計民生的行業的重要客戶的核心繫統。
剛剛提到,OceanBase 誕生於2010 年,立項之初,我們的目標是做出一個原生的分佈式數據庫,業界並沒有參考方案,這樣的背景成就了 OceanBase 從0到1,100%自主研發。2010 年到 2014 年,OceanBase 在阿里巴巴的電商平臺應用推廣,服務了幾十個電商平臺的業務系統。2014 年,OceanBase 支撐了當年雙 11 的峰值,這也實現了 OceanBase 核心交易類場景的 0 的突破。
接下來的 3 年時間, 支付寶包括交易、支付、賬務會員在內的所有的核心業務都是使用 OceanBase。
2017 年,OceanBase 第一次走出阿里巴巴,走出螞蟻集團,開始對外商業化,南京銀行是第一家運行在 OceanBase 上的外部客戶。
2019 年,OceanBase 第一次參加 TPC-C 測試,取得 6088萬 tpmc 的成績,打破了原先的世界記錄。
2020 年,OceanBase 再次參加 TPC-C 測試,取得了 7.07 億 tpmc 的成績。同年,OceanBase 正式進行獨立公司化運作,成立北京奧星貝斯科技有限公司,致力於分佈式關係數據庫 OceanBase 的設計、研發、銷售、服務等,助力客戶實現分佈式架構轉型。
以上就是數據庫歷史的簡單介紹以及 OceanBase 誕生的歷史。
OceanBase 大力佈道分佈式數據庫技術
作為全球唯一經過大規模金融場景長時間考驗的分佈式關係數據庫,OceanBase 在技術領域不斷深耕的同時,也十分注重推動開發者生態的發展。OceanBase CEO 楊冰表示,“我們始終堅定地相信分佈式數據庫就是未來的主流。OceanBase 有著十餘年的專業技術積累,正在不斷通過自身實踐來加速新的數據庫生態的建立,以幫助開發者更好地成長,也幫助 DBA 實現轉型,培養更多的分佈式數據庫人才。”
2020 年 8 月上線開發者線上社區,OceanBase 技術團隊首次集中展示分佈式數據庫技術乾貨。同時積極推動線下的技術佈道,延續去年的全國巡迴技術論壇,今年 9 月 20 日在上海舉辦以“深入分佈式數據庫:事務·高可用·雲原生”為主題的 Meetup,吸引了上百位開發者現場參與,超過四千人觀看直播,並引發熱烈探討。
10 月,OceanBase 團隊發起 OceanBaseDev 社群,旨在建立並維繫一個面向分佈式數據庫技術的社群,為關注分佈式數據庫技術的愛好者們提供技術交流、分享、探討的空間。OceanBaseDev 將繼續大力推動線上線下的技術分享、邀請業界大牛來一同切磋,當然,創造更多的玩法也是我們想做的。