1. 程式人生 > >DRDS總結文件

DRDS總結文件

一、DRDS背景
單機資料庫能夠方便的滿足使用者對於關係查詢類的需求,是目前業務應用中最常使用的軟體。然而,對於很多應用而言,單機資料庫最終都會遇到瓶頸, 包括訪問量、資料容量、擴充套件性等等會碰到各類限制,特別在網際網路時代,這個瓶頸會非常快地碰到,在時間緊張、技術儲備有限的情況下,不得不使用高階機器和儲存來緩解業務增長壓力, 但仍然無法徹底突破瓶頸,同時給業務帶來巨大的成本負擔,水平拆分正式徹底解決這個問題的技術方案,通過資料多節點分片,輔以讀寫分離、高可用(HA)、平滑擴容等服務,很好地滿足業務對於訪問量、資料容量、擴充套件性等需求。
二、 DRDS 概述
分散式關係型資料庫服務(Distribute Relational Database Service,簡稱DRDS)是一種水平拆分、可平滑擴縮容、讀寫分離的線上分散式資料庫服務。前身為淘寶TDDL,是近千個應用首選元件,已穩定服務了七年以上。 使用DRDS如同使用MySQL資料庫,相容MySQL互動協議讓這個產品相容幾乎所有的客戶端程式語言,90%以上的MySQL SQL支援讓應用使用變得相對容易 。
三、產品功能
3.1、資料水平拆分
資料水平切分是一個解決系統儲存瓶頸的最終極解決方案,資料庫切分的核心思想比較簡單:分而治之。將資料分散到多臺機器,並保證請求能夠平均的分發到這些機器上,以極低的成本來解決業務的各類效能瓶頸。 拆分的簡單原理就是按某一個欄位值mod拆分數,結果即對應分片。
切分也是帶來一定的代價,分散式資料庫會對一些原有單機資料庫的場景進行限制,這些操作在資料拆分的環境下執行效率非常低,就算是功能上能夠支援,也會因為效能問題而無法使用。
與市面上的一些開源的資料拆分工具相比,DRDS能夠更智慧的分析您的SQL,在結果集合並和分散式join優化等關鍵領域,都比較成熟,能夠解決分散式資料庫場景下的大部分問題。
3.1、讀寫分離
Mysql資料庫一般都會做主備庫,那麼所有的讀寫操作都在主庫做自然資料寫入即可見的,但是這造成的問題也比較明顯:主庫壓力比較大,效能下降明顯,打造資料分享第一平臺那麼能否使用備庫減輕主庫壓力呢? 答案是可以的,應用對於資料庫資料的寫入和讀取有著不同的實時性要求,寫操作基本要求實時,讀操作對於某些應用場景不需要這種實時性的,對於這些請求,我們就可以到備庫上去做,比如使用者申請許可權,稽核的同學不需要在使用者一提交申請就立即看到(延遲秒級別一般可接受)。
DRDS在支援讀寫分離上更近一步,應用只使用一個DRDS連線動態新增只讀例項,線上調整讀操作在主備上的權重,並且能夠通過sql hint指定某一個sql必須到主庫或者到只讀例項上執行。
4.3. 平滑擴容
DRDS能夠幫助使用者實現線上的資料庫平滑擴容,讓使用者能夠按需的自由增減資料庫,從而實現彈性按需使用資料庫叢集。線上資料庫擴容的重點在於“線上”兩字,也就是使用者不需要停止業務系統進行割接操作,直接就可以新增新的mysql節點到叢集中,實現無縫的自由擴充套件。
DRDS則將整個擴容的過程分為幾個階段,包括全量遷移、增量同步、切換資料庫等幾個步驟。資料會提前進行搬遷,並增量同步一段時間,因此可以在非常短的時間內(秒級別)完成資料庫的最終擴容切換工作,對業務影響做到最小。
4.4. 分散式柔性事務
資料水平拆分的場景下,常常會碰到事務跨節點,雖然我們可以將事務中涉及到的表按照相同欄位拆分,並且保持事務中的sql都落到一個節點上對分散式事務進行優化,但是仍然無法解決大量跨節點事務需求,在分散式的情況下, 目打造資料分享第一平臺前DRDS通過分散式柔性事務元件保持事務各個分支的最終一致性,也就是要
麼全成功,要麼全失敗,但是隔離級別在普通情況下會保持READ UNCOMMITED.