您好,登錄后才能下訂單哦!
數據庫拆分要根據業務現狀、模式,選擇合適的拆分方式,緊密結合業務及應用架構設計,謹慎拆分,防止過度設計。
云計算大數據時代,傳統的數據庫架構已經無法支撐企業高容量的數據增長,滿足高并發的業務需求。對企業數據庫進行分布式架構設計,打破了數據庫資源不夠用的天花板的同時,還能根據企業業務發展狀況,隨時平滑擴容。
數據庫分布式改造要遵循“循序漸進”的拆分原則
拆分方式有垂直拆分和水平拆分兩種,選擇拆分方式要根據企業自身業務發展需要。
一般來說,是先做垂直拆分,再做水平拆分。
在單一數據節點無法滿足業務和用戶增長需求的情況下,需要做一個服務化,對業務進行垂直梳理,后面的數據節點可以放在不同的資源節點上,以提高數據服務的整體性能。
比如一個APP的業務數據,在業務初期階段,是全部放在一個數據庫節點中,在業務量和數據量快速增長的中期階段,需要進行垂直梳理,根據業務邏輯,拆分成商品、交易、用戶,并分別放在不同的數據庫。
如果其中的一個服務已經拆的很細了,但還是有性能瓶頸,無法支撐我們的業務增長,數據庫這塊才需要再做水平拆分。
水平拆分就是將數據(比如圖中APP的交易數據)拆成多片,放到不同的資源上,用一個集群來支撐更高的業務增長。
在拆分時,要謹慎,因為拆分會引入復雜性,能不做就不做,最優先是做業務和架構上的優化,最終才是做數據庫拆分。
在拆分的過程中,不要做過度的設計,或者直接從初級跳到高級,這樣做其實非常浪費資源,投入產出比也不好。
對企業數據庫進行分布式改造,需要理解客戶的業務邏輯、豐富的拆分經驗積累。尤其是水平拆分,有系統復雜度高、技術挑戰性強、穩定性控制難、具有一定局限性四大難點。
針對這些問題,宏翊給我們提供了兩種解決方案。
1.客戶端實現數據路由
此方案不會引入額外的組件,架構上比較輕量,簡單場景使用尚可,但稍復雜的場景會放大它的劣勢,比如配置管理復雜等。
2.數據庫中間件
中間件的使用最大限度地屏蔽了分布式數據庫所引入的復雜性,極大降低了研發的門檻。最重要的是,有了數據庫中間件,應用看到的還是單一的數據庫。
要對一個表做拆分,選擇一個拆分字段,通過一個路由算法確定數據存放在哪個底層庫。
比如下列數據選擇MEMBE_ID作為拆分鍵,通過路由算法計算后得出’test1234‘相關的數據應該落在庫1上,DRDS會把所有MEMBE_ID=‘test1234’相關的請求全都路由到庫1。其他數據請求亦落到相應的底層庫。
接下來,當數據已經放下去了,應該如何去查詢、訪問和變更?
比如要查詢一條記錄,member_id=‘test1234’
它怎么去執行的呢?
首先計算一個hash值,當值等于某一個值,它會知道這個數據存儲在哪一個庫上,所以會直接路由到底層這個庫,從這個庫查詢,返回結果。
中間件扮演的就是這個路由和計算的角色,性能非常強大。拆分后,各底層數據庫數據量比較小,查詢返回比較快;二是可以支持更高的并發,整體并發基本等于兩個底層數據庫實例并發之和。
數據庫中間件產品中,有平民軟件OneProxy等商業軟件;也有MyCat等開源產品,宏翊為大家則介紹了一款廣泛使用的成熟商業產品DRDS,并講解了DRDS如何解決對數據庫進行拆分時遇到的難點。
DRDS,英文名Distributed Relational Database Service
是阿里巴巴自主研發致力于解決單機數據庫服務瓶頸問題而推出的分布式數據庫產品。 DRDS 高度兼容 MySQL 協議和語法、支持自動化水平拆分、平滑擴容、彈性擴展、透明讀寫分離、分布式事務、具備分布式數據庫全生命周期的運維管控能力。DRDS前身為淘寶TDDL,是近千核心應用首選組件,已穩定服務8年以上。
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 實例的處理壓力。
進行分布式改造之后,如何更省心省力對數據庫進行運維?
靠人工?成本高、運維人員也難招!
借助袋鼠云開發的數據庫自動化管理平臺EasyDB,企業數據庫運維很簡單。
EasyDB完全兼容DRDS manager,具有高可用、高性能、易運維等特點。從性能、資源、集群、備份、容災入手,支持多種數據庫實例,大規模量的數據庫運維,提供穩定準確的數據庫告警、大盤趨勢分析預警、空間跟蹤、SQL跟蹤、巡檢報告等功能。運維管理人員可以輕松應對復雜的日常管理事務及突發性事件,數據庫管理從此變得有規劃,有效率,有預見性。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。