資料庫架構在美團點評的演變實踐
前言
IT時代的縮影基本被CPU、作業系統、資料庫這三大核心領域,支撐了半個世紀人類的商業科技文明。本文講到美團點評資料庫的演變,首先從資料庫的簡史講起。把資料庫劃分成三個時代,分別就是關係型資料庫時代,NoSQL時代,NewSQL時代。下面分別講下每個時代資料庫發展的訴求和過程。
- 關係型資料庫時代
說到關係型資料庫,就要從1970年E.F.Codd的《A Relational Modelof Data forLarge Shared Data Banks》的論文開始講起。該論文奠定了關係模型的理論基礎,Codd的同事DonChamberlin對Codd的論文和關係運算進行轉換,發明了簡單易用的SQL語言,並且在之後的發展中成為所有關係型資料庫的標準。這種高階的非過程化程式設計介面語言,成為了距離資料庫最近的語言,將電腦科學和人類理解認知完美的銜接在了一起。
1970 年關係模型建立之後,IBM公司在SanJose實驗室增加了更多的研究人員研究這個專案,這個專案就是著名的System R。該專案結束於1979年,完成了第一個實現SQL的DBMS。
1973年加州大學伯克利分校的Michael Stonebraker 和EugeneWong利用System R已釋出的資訊開始開發自己的關係資料庫系統Ingres。LarryElision和他的同事看到商機,開發出第一個商用大型關係型資料庫Oracle(之後將近半個世紀Oracle一直都是關係型資料庫的領頭羊),之後IBM也推出了DB2、MichaelStonebraker開發了Postgres並放在BSD版權下,後來演變成了Postgres SQL,87年微軟和Sybase合作,開發出了MS SQL和Sybase。
到了2000年後,另一款明星產品MySQL由於其自由開放、輕量,被google等網際網路公司普遍使用,並逐步進入大家的視野從而火爆起來。
- NoSQL異軍突起
首先NoSQL是一個比較模糊的概念,而且在不同階段這解讀出來的含義也不一樣,網上有一個比較有意思另類解讀(下圖),不同的解讀本身也釋放出NoSQL這個技術的螺旋、搖擺的發展態勢。在本文裡,我們把NoSQL泛指非關係型資料庫。
關係資料庫很強大,但是它並不能很好的適用所有的應用場景。尤其以社交、搜尋為代表的網際網路業務產生海量資料時,關係型資料庫在擴充套件性(需要負責技術sharding來實現)、高昂的表變更成本、高併發容量、寫入延遲等方面都面對很多挑戰。
NoSQL資料庫種類繁多,但是一個共同的特點都是去掉關係資料庫的關係型特性。資料之間無關係,這樣就非常容易擴充套件。同樣NoSQL在海量資料讀寫效能方面,也優勢明顯,同時提供了靈活的資料模型。
NoSQL的產品很多,但引領這顧潮流的主要有Amazon的DynamoDB、google的bigtable,後來Facebook開源了Cassandra,以及基於bigtable設計的hadoop Hbase,bigtabl開源實現的Hypertable,以及支援文件事務Mongodb、普遍用於快取的redis及redis cluster。值得一提的是美團點評內部有一個很優秀儲存系統Cellar,兼記憶體與持久化的分佈。
在NoSQL盛行之初,人們似乎能看到了NoSQL取代關係型資料庫的時代,可事與願違,使用NoSQL需要從應用業務去把關係資料庫重新實現,而且資料庫的功能被向儲存方向進一步弱化。這裡面的一個代表事件就是DIGG採用Cassanrda遭遇失敗,大家重新理解了關係模型的SQL是最方便和資料互動的語言,所以開始妥協,於是大部分NoSQL開始嘗試支援關係資料庫(這時候主流變成了Not only SQL)。可是就又回到瞭如果讓關係資料庫具有擴充套件性、效能這條老路上來,於是忍了很久的另外一批人就重新站了出來,出現了”No,SQL!“的口號,於是NewSQL又粉墨登場。
- NewSQL粉墨登場
NewSQL沒有標準定義,作者認為是要滿足以下幾點:1,可擴充套件性、高效能;2,具有NoSQL對海量資料的儲存能力;3,支援關係型資料庫關鍵特性,比如原子性、一致性、隔離性和永續性等。
分散式關係資料庫並不是新的名詞,未來某一個階段分散式資料庫也一定會佔據資料庫的主導位置,這個相信大家不會有太大爭議,但問題在於它的實現難度,如果在CAP之間進行平衡和彌補,目前這方面的理論、實踐應該說都還在初級階段。
至於NewSQL的起源,我覺得要從Google說起。2011 年,Google 發表了 Megastore 的論文,Megastore是谷歌一個內部的儲存系統,它的底層資料儲存依賴Bigtable(基於NoSQL實現),但它實現了類似關係型的資料庫模型,不同資料中心之間、分片(Entity Group)之間使用Paxos協議複製,跨分片的事務採用兩階段提交。這種支援事務的儲存系統在google內部很受歡迎,但Megastore也有一些噪點,比如延遲比較大,於是google在新的儲存檔案系統Colossus和新的硬體基礎上研發了更大的分散式系統Spanner,它具有可擴充套件、多版本、全球分散式複製。與Spanner配套,google研發分散式SQL引擎F1,實現F1+Spanner的分散式組合。在Spanner的論文引導下,社群也有開源的實現,其中比較有代表的是CockroachDB和國內人氣產品TIDB+TIKV。
分散式的前提需要將儲存進行分片,也很自然的引導了計算與儲存的分離,在加上GBU的發展,使大家可以將更多的計算下推到儲存,並且隨著雲端計算的發展支援,一些大雲廠商開始利用自身的硬體優勢,開始量身設計新一代雲資料庫,引導這種潮流的是AWS的Aurora,Aurora使用一個共享儲存系統來實現資料庫的一致性,依照log is database的理念,最大化的降低了應用的延遲。Aurora後面會單獨介紹,和這個比較類似的還有阿里最新公佈的polardb,據說華為也在做同樣的事情。
美團資料庫架構演變
MySQL架構演變
美團的資料庫架構是一個比較典型的MySQL+NoSQL演變之路, 最初是簡單的M-S架構,讀寫都在主庫上,也是最簡單易用的階段。
後來開始按照重要程度、業務歸屬等維度開始DB拆分,同時進行硬體的升級,主要是SAS->SSD,當然資料庫引入了cache,主要是redis和memcache。
我們會對主要的資料庫根據真實流量進行壓測,來確定拆分的容量尺度。下面用一個案例來說明:左縱座標是QPS(對應藍線),表示吞吐量情況;右縱座標是99%(可配置)的響應時間(對應紅線),表示響應時間;橫座標是當前流量的放大倍數,橫座標淺藍色代表30ms之內的空間(30ms是業務可接受最大的DB響應時間)。通過這個容量圖表,我們可以比較清晰的知道資料庫當前讀流量最大可支援的倍數。
然後開始解決讀寫分離的問題,最早在引入proxy方案前,我們也短暫使用兩個DNS進行分離。
在後來就是分庫分表,當年還覺得Sharding是個挺牛的東西,現在看來全是成本和眼淚。
Sharding後,資料的分發和彙總成了問題,當年的解決方案比較現實,是在APP和DB直接加上一層,爭論在於這一層更貼近誰?下圖是當年做的一些比較。
從DB對應用透明的角度來看,我個人更推薦proxy方案。不過當年在美團內部,兩個方案都存在,一段時間內主流的方案還是proxy,後來因為網路單點及鏈路過多的問題又轉向JDBC層。
其實不管是proxy還是JDBC層,成本沒有多少變,痛點解決了一部分,也同時引入了一些問題:
舉兩個例子,比如一個全域性ID問題,這個方案在公司內部也經過多次演義,嘗試過MySQL自增主鍵、引入redis序列等,各有各的問題;還有業務多維度、AP業務資料同步,美團內部也是重複做過一些輪子,比如canal、databus、佇列方式、pumer等。
美團的NoSQL
美團目前使用比較廣泛的是基於tair基礎上研發的Cellar,這裡我們主要闡述一些基本特性。分散式KV儲存系統,底層支援Leverldb、rockdb、mdb、rdb等引擎,各節點直接通過raft進行復制;支援異地容災、無損資料遷移,元資訊存在單獨節點,並且通過新增observer的形式實現路由查詢能力擴充套件、客戶與中間節點分離。
MySQL與Cellar的主要對比:
最後拋一個問題,如果說MySQL+Cellar≈ 美團主流資料庫架構,那麼頭腦風暴一下,MySQL(server層)+Cellar (儲存層)≈ ?歡迎大家積極討論~
歡迎大家加入雲端計算交流QQ群,群號:469243579 ~
相關推薦
資料庫架構在美團點評的演變實踐
前言 IT時代的縮影基本被CPU、作業系統、資料庫這三大核心領域,支撐了半個世紀人類的商業科技文明。本文講到美團點評資料庫的演變,首先從資料庫的簡史講起。把資料庫劃分成三個時代,分別就是關係型資料
美團點評攜手 PingCAP 開啟新一代資料庫深度實踐之旅
一、背景和現狀 在美團,基於 MySQL 構建的傳統關係型資料庫服務已經難於支撐公司業務的爆發式增長,促使我們去探索更合理的資料儲存方案和實踐新的運維方式。隨著近一兩年來分散式資料庫大放異彩,美團 DBA 團隊聯合架構儲存團隊,於 2018 年初啟動了分散式資料庫專案。 圖 1 美團點評
美團點評:打造微服務自動化測試與持續集成工具鏈實踐
選擇 rift moc 完成 軟件 用戶 seo bee png 本文內容節選自第六屆全球軟件案例研究峰會,時任美團點評酒旅質量團隊工具鏈負責人王鵬老師分享的《微服務架構下的自動化測試和持續集成工具鏈實踐》實錄,重點分享:微服務架構下解決自動化測試、開發聯調、測試環境、
美團點評基於 Flink 的實時數倉建設實踐
引言 近些年,企業對資料服務實時化服務的需求日益增多。本文整理了常見實時資料元件的效能特點和適用場景,介紹了美團如何通過 Flink 引擎構建實時資料倉庫,從而提供高效、穩健的實時資料服務。此前我們美團技術部落格釋出過一篇文章《流計算框架 Flink 與 Storm 的效能對比》,對 Flink 和 Sto
領域驅動設計(DDD)在美團點評業務系統的實踐
點選上方藍字訂閱,不錯過下一篇好文章本文轉自美團點評技術公眾號:meituantech前言至少3
Lego:美團點評介面自動化測試實踐
概述 介面自動化概述 眾所周知,介面自動化測試有著如下特點: 低投入,高產出。 比較容易實現自動化。 和UI自動化測試相比更加穩定。 如何做好一個介面自動化測試專案呢? 我認為,一個“好
美團點評:打造微服務自動化測試與持續整合工具鏈實踐
本文內容節選自第六屆全球軟體案例研究峰會,時任美團點評酒旅質量團隊工具鏈負責人王鵬老師分享的《微服務架構下的自動化測試和持續整合工具鏈實踐》實錄,重點分享:微服務架構下解決自動化測試、開發聯調、測試環境、持續整合方面遇到的問題及解決方案。(PPT+文稿)。 王鵬老師時任美
美團點評Android客戶端融合架構演進之路
一 背景 點評美團合併之後,業務需要整合,我們部門的幾條業務需要往美團平臺遷移,為了降低遷移成本,開發和維護成本,以及將來可能要做的單元測試,需要對架構進行相應的調整。之前的程式碼都堆在Activity或Fragment裡面,UI,業務,資料混合在一起,就使得難以單
美團點評基於MGR的CMDB高可用架構搭建之路
王志朋 美團點評DBA 曾在京東金融擔任DBA,目前就職於美團點評,主要負責金融業務線資料庫及基礎元件資料庫的運維。
組委會正在為美團點評CodeM大賽的決賽設計新賽制
通過 隨機 space 個數字 數字 範圍 class 包括 bound 比賽有 n 個人參加(其中 n 為2的冪),每個參賽者根據資格賽和預賽、復賽的成績,會有不同的積分。比賽采取錦標賽賽制,分輪次進行,設某一輪有 m 個人參加,那麽參賽者會被分為 m/2 組,每組恰好
美團點評2017秋招筆試編程題
%d stdin += can for 可能 array ont true 美團點評2017秋招筆試編程題 1, 大富翁遊戲,玩家根據骰子的點數決定走的步數,即骰子點數為1時可以走一步,點數為2時可以走兩步,點數為n時可以走n步。求玩家走到第n步(n<=骰子最
深度學習在美團點評推薦平臺排序中的應用--學習筆記
價格 美團 ger 連接 xtra 避免 傳統 jpeg 冗余 寫在前面:據說下周就要xxxxxxxx, 嚇得本寶寶趕緊找些廣告的東西看看 gbdt+lr的模型之前是知道怎麽搞的,dnn+lr的模型也是知道的,但是都沒有試驗過 深度學習在美團點評推薦平臺排
深諳賦能之道,美團點評如何構建生活服務終極藍圖?
gin 可視化 團購 一體化 責任 定位 作用 一個 收入 好萊塢大片裏有不少關於終極的定義,例如即將上映的《猩球崛起3:終極之戰》就在預告裏定義了終極的含義:特效驚人和主角凱撒即將大反攻。而在《終結者》系列中,施瓦辛格正是依靠不斷的進化走向機器人的終極,才能守衛和平。
【轉】美團點評技術團隊金融核心交易系統可用性7個9是這樣煉成的
log OS IT 系統 交易系統 團隊 .html .com html https://tech.meituan.com/%E4%B8%9A%E5%8A%A1%E9%AB%98%E9%80%9F%E5%A2%9E%E9%95%BF%E5%9C%BA%E6%99%AF%E4
美團點評上市,王興的野心和局限
自己 個性 服務費 零售 曾經 電商平臺 超過 而且 創業 9月20日,王興終於帶著美團在香港實現了上市的夢想,從校內網和飯否的失敗創業經歷到美團的上市,美團點評IPO成為了王興過去的一個註腳。 王興這個富二代,終於用事實證明了自己。 一、美團成長史 美團成長的8年也是中國
美團點評面經
總共面試了四輪,前兩輪是電話面試,但是感覺面試面的問題都比較詳細。有些地方還是答的不好,也有些地方感覺缺乏說話技巧。 一面的時候,當然免不了首先自我介紹,當然說自己的兩份工作經歷。然後因為本人做的有手機端和Web端的自動化測試,然後就問了selenium和UIautomator的區別
對美團點評應用監控平臺CAT的理解
原始碼地址 CAT是一個開源的專案,在github上可以找到它的原始碼 https://github.com/dianping/cat CAT 簡介 CAT 是基於 Java 開發的實時應用監控平臺,為美團點評提供了全面的實時監控告警服務。 CAT 作為服務端專案基礎元件,提
美團點評CAT原始碼分析
最近在預研美團點評的CAT監控系統,在csdn上找到一系列的博文,分析的很透徹,很深入。這裡保留一下文章的連線方便下次閱讀。 深入詳解美團點評CAT跨語言服務監控(一) CAT簡介與部署 深入詳解美團點評CAT跨語言服務監控(二) CAT服務端初始化 深入詳解美團點評CAT跨語言
深入詳解美團點評CAT跨語言服務監控(一) CAT簡介與部署
原文連結: https://blog.csdn.net/caohao0591/article/details/80693289 前言: CAT是一個實時和接近全量的監控系統,它側重於對Java應用的監控,除了與點評RPC元件融合的很好之外,他將會能與Spring、MyBatis、Dub
美團點評: 網格走法數目
題目連結: 網格走法數目 dfs,朝下和朝右兩個方向搜尋就可以了。 #include<iostream> #include<algorithm> using namespace std; const int maxn = 12; int map[maxn][m