面試官問:如何實現高容量大併發數據庫服務?我是這樣回答的

摘要

數據庫拆分要根據業務現狀、模式,選擇合適的拆分方式,緊密結合業務及應用架構設計,謹慎拆分,防止過分設計。面試

正文

1、爲何要作分佈式數據庫架構改造?算法

雲計算大數據時代,傳統的數據庫架構已經沒法支撐企業高容量的數據增加,知足高併發的業務需求。對企業數據庫進行分佈式架構設計,打破了數據庫資源不夠用的天花板的同時,還能根據企業業務發展情況,隨時平滑擴容。數據庫

2、分佈式數據庫架構改造,如何作?後端

數據庫分佈式改造要遵循「按部就班」的拆分原則微信

拆分方式有垂直拆分和水平拆分兩種,選擇拆分方式要根據企業自身業務發展須要。架構

面試官問:如何實現高容量大併發數據庫服務?我是這樣回答的

通常來講,是先作垂直拆分,再作水平拆分。併發

在單一數據節點沒法知足業務和用戶增加需求的狀況下,須要作一個服務化,對業務進行垂直梳理,後面的數據節點能夠放在不一樣的資源節點上,以提升數據服務的總體性能。運維

好比一個APP的業務數據,在業務初期階段,是所有放在一個數據庫節點中,在業務量和數據量快速增加的中期階段,須要進行垂直梳理,根據業務邏輯,拆分紅商品、交易、用戶,並分別放在不一樣的數據庫。異步

若是其中的一個服務已經拆的很細了,但仍是有性能瓶頸,沒法支撐咱們的業務增加,數據庫這塊才須要再作水平拆分。分佈式

水平拆分就是將數據(好比圖中APP的交易數據)拆成多片,放到不一樣的資源上,用一個集羣來支撐更高的業務增加。

在拆分時,要謹慎,由於拆分會引入複雜性,能不作就不作,最優先是作業務和架構上的優化,最終纔是作數據庫拆分。

在拆分的過程當中,不要作過分的設計,或者直接從初級跳到高級,這樣作其實很是浪費資源,投入產出比也很差。

3、水平拆分的難點及解決方案

對企業數據庫進行分佈式改造,須要理解客戶的業務邏輯、豐富的拆分經驗積累。尤爲是水平拆分,有系統複雜度高、技術挑戰性強、穩定性控制難、具備必定侷限性四大難點。

針對這些問題,宏翊給咱們提供了兩種解決方案。

1.客戶端實現數據路由

此方案不會引入額外的組件,架構上比較輕量,簡單場景使用尚可,但稍複雜的場景會放大它的劣勢,好比配置管理複雜等。

面試官問:如何實現高容量大併發數據庫服務?我是這樣回答的

2.數據庫中間件

中間件的使用最大限度地屏蔽了分佈式數據庫所引入的複雜性,極大下降了研發的門檻。最重要的是,有了數據庫中間件,應用看到的仍是單一的數據庫。

面試官問:如何實現高容量大併發數據庫服務?我是這樣回答的

4、水平切分原理及設計原則

要對一個表作拆分,選擇一個拆分字段,經過一個路由算法肯定數據存放在哪一個底層庫。

面試官問:如何實現高容量大併發數據庫服務?我是這樣回答的

好比下列數據選擇MEMBE_ID做爲拆分鍵,經過路由算法計算後得出’test1234‘相關的數據應該落在庫1上,DRDS會把全部MEMBE_ID=‘test1234’相關的請求全都路由到庫1。其餘數據請求亦落到相應的底層庫。

接下來,當數據已經放下去了,應該如何去查詢、訪問和變動?

好比要查詢一條記錄,member_id=‘test1234’

它怎麼去執行的呢?

首先計算一個hash值,當值等於某一個值,它會知道這個數據存儲在哪個庫上,因此會直接路由到底層這個庫,從這個庫查詢,返回結果。

中間件扮演的就是這個路由和計算的角色,性能很是強大。拆分後,各底層數據庫數據量比較小,查詢返回比較快;二是能夠支持更高的併發,總體併發基本等於兩個底層數據庫實例併發之和。

面試官問:如何實現高容量大併發數據庫服務?我是這樣回答的

5、來自阿里雲的數據庫中間件產品:DRDS

數據庫中間件產品中,有平民軟件OneProxy等商業軟件;也有MyCat等開源產品,宏翊爲你們則介紹了一款普遍使用的成熟商業產品DRDS,並講解了DRDS如何解決對數據庫進行拆分時遇到的難點。

DRDS,英文名Distributed Relational Database Service

是阿里巴巴自主研發致力於解決單機數據庫服務瓶頸問題而推出的分佈式數據庫產品。 DRDS 高度兼容 MySQL 協議和語法、支持自動化水平拆分、平滑擴容、彈性擴展、透明讀寫分離、分佈式事務、具有分佈式數據庫全生命週期的運維管控能力。DRDS前身爲淘寶TDDL,是近千核心應用首選組件,已穩定服務8年以上。

DRDS五大核心功能

1.分庫分表

分庫分表是DRDS的核心功能,DRDS 在後端將數據量較大的數據表水平拆分到後端的每一個 RDS 數據庫中,這些拆分到 RDS 中的數據庫被稱爲分庫,分庫中的表稱爲分表。拆分後,每一個分庫負責每一份數據的讀寫操做,從而有效的分散了總體訪問壓力。在系統擴容時,只須要水平增長分庫的數量,而且遷移相關數據,就能夠提升 DRDS 系統的整體容量。DRDS 支持庫級拆分,表級拆分和分庫分表拆分,經過 DRDS DDL 語句指定。

2.讀寫分離

在主實例的讀請求較多、讀壓力比較大的時候,能夠經過 DRDS 讀寫分離功能對讀流量進行分流,減輕 RDS 主實例的讀壓力。

DRDS 的讀寫分離功能是對應用透明的設計。應用在不修改任何代碼的狀況下,只須要在 DRDS 控制檯中調整讀權重,便可將讀流量按配置的比例在主 RDS 實例與多個 RDS 只讀實例之間進行分流;寫流量則所有到主實例,不作分流。

設置讀寫分離後,從主 RDS 實例讀取的是強讀,既實時強一致讀,而只讀實例上的數據是從主實例上異步複製的,存在毫秒級的延遲,所以從只讀 RDS 實例讀取的是弱讀,屬於非強一致性讀。個別須要實時性、強一致性讀的 SQL 能夠經過 DRDS Hint 指定到主實例上執行。

3.全局惟一ID

DRDS 支持分佈式全局惟一且有序遞增的數字序列。知足業務在使用分佈式數據庫下對主鍵或者惟一鍵以及特定場景的需求。

4.小表廣播

DRDS 將一些數據量小且更新頻度不高的數據表存儲爲單表模式,這些數據表稱爲小表。經過數據同步將小表複製到與之 JOIN 的分庫上進而提高 JOIN 效率的解決方案稱爲「小表廣播」或者「小表複製」。支持查詢引擎識別和下推複雜查詢,兼容 98% MySQL 語法。

5.彈性擴容

當邏輯庫對應的底層存儲已經達到物理瓶頸,須要進行水平擴展,好比磁盤餘量接近30%,那麼能夠經過平滑擴容來改善。平滑擴容是一種水平擴容方式,既把分庫平滑遷移到新添加的底層存儲上。在實現上是經過增長 RDS 實例的數量來提高整體數據存儲容量,將分庫遷移到新增的 RDS 實例,從而下降單個 RDS 實例的處理壓力。

6、分佈式改造以後——運維

進行分佈式改造以後,如何更省心省力對數據庫進行運維?

靠人工?成本高、運維人員也難招!

藉助袋鼠雲開發的數據庫自動化管理平臺EasyDB,企業數據庫運維很簡單。
面試官問:如何實現高容量大併發數據庫服務?我是這樣回答的
EasyDB徹底兼容DRDS manager,具備高可用、高性能、易運維等特色。從性能、資源、集羣、備份、容災入手,支持多種數據庫實例,大規模量的數據庫運維,提供穩定準確的數據庫告警、大盤趨勢分析預警、空間跟蹤、SQL跟蹤、巡檢報告等功能。運維管理人員能夠輕鬆應對複雜的平常管理事務及突發性事件,數據庫管理今後變得有規劃,有效率,有預見性。

歡迎關注微信公衆號【慕容千語】

相關文章
相關標籤/搜索