阿里雲DRDS:分布式數據庫服務


最近在做阿里雲相關的項目,用到阿里的很多接口服務的API,於是想把這段項目做個總結,順便梳理下阿里雲的雲計算的相關知識點。

DRDS:分布式數據庫服務。

1.相關術語

DRDS(Distribute Relational Database Service),分布式關系型數據庫服務:分布式數據庫服務,基於rds,提供分庫分表功能。

DrdsInstance(Distribute Relational Database Instance),分布式數據庫實例:一個獨立占用物理內存的分布式數據庫服務進程,可以有不同的規格,規格會決定該實例的性能(包含IOPS、連接數)。

DrdsInstanceId(Distribute Relational Database  Instance ID),分布式數據庫實例名:實例名可標識一個實例的名稱,全局唯一。

DrdsDB(Distribute Relational Database),分布式數據庫:Drds數據庫是在一個實例下創建的邏輯單元,一個實例可以創建多個數據庫,在實例內數據庫命名唯一,所有數據庫都會共享該實例的資源。

DrdsDBName(Distribute Relational Database  Name),分布式數據庫名:標識每個分布式DB的名稱,在一個實例范圍內,數據庫名惟一。

DrdsDBAccount(Distribute Relational Database  Accoun),分布式數據庫帳號/帳號:帳號是標識數據庫的訪問權限,目前一個數據庫對應一個帳號,一個帳號關聯一個數據庫。

2.DRDS產品簡介

2.1 DRDS產品概要:

單機數據庫能夠方便的滿足用戶對於關系查詢類的需求,是目前業務應用中最常使用的軟件。然而,對於很多應用而言,單機數據庫最終都會碰到單機性能上的天花板,在TPS(系統吞吐量)/QPS(每秒查詢率)/內存容量/磁盤容量等等一系列系統資源上會碰到各類限制。DRDS的主要目標,就是幫您解決這方面的各類問題,他主要提供了兩個功能:讀寫分離和數據庫切分。

讀寫分離,能夠允許您實現一台機器寫入,多台機器讀取,這對於讀多寫少的應用,能夠以極低的成本解決系統的瓶頸。

數據庫切分是一個解決系統存儲瓶頸的最終極解決方案,數據庫切分的核心思想其實很簡單,就是分而治之。將數據分散到多台機器,並保證請求能夠平均的分發到這些機器上,就可以以極低的成本來解決業務的各類性能瓶頸。

當然,切分也是有代價的,最明顯的代價就是,分布式數據庫會對一些原有單機數據庫的場景進行限制,因為這些操作,在分布式環境下的延遲或效率非常低效,就算是能夠實現出來,也會因為性能問題而無法使用。

針對這類問題,阿里的中間件團隊曾經成功的協助過近300個業務應用系統實現了數據庫的切分,因此,我們在這個領域內積累了大量的實戰經驗和成熟的產品,希望這類產品也能夠為您提供相同的服務,讓您的數據庫再也不必擔心性能問題。

2.2DRDS與MySQL兼容性:

支持點:

DRDS支持90%以上MySQL sql,包括常用的insert/update/replace,select/join/union/subquery/exist等各種語法+條件組合

DRDS抽象出21種數據類型,int/float/double/long/decimal/data/time/datetime/timestamp/bit/bits...

DRDS兼容MySQL 80%的函數實現,主要包括:數學、字符串、時間

DRDS支持map/reduce計算模型

DRDS支持函數的二次計算,如如count(id) + 1 , sum(pv)/count(person)

DRDS支持跨庫join的函數計算,比如select count(*)+1 from a join b on a.id = b.id.

DRDS支持特殊類型計算,比如count(distinct id).

DRDS支持跨數據節點join(分布式join)

DRDS支持跨數據節點多重嵌套子查詢

DRDS支持多種並行執行模式

目前不支持:

不支持group by/order by 列為函數列且不存在與select列中

不支持join列為函數計算,比如on.id=b.id+1

DRDS server未開放DDL支持,只能在控制台做DDL

不支持復雜update/delete語句(比如update多表,有join等)

不支持強一致分布式事務

2.3 數據水平拆分

DRDS幫助您實現分庫分表,能夠將原來只能在單節點執行的SQL,轉變為多節點執行的SQL,如同單個數據庫體驗。通過支持系統實現數據存儲的動態水平擴展,目前DRDS在公司內已經有超過幾百個應用系統使用超過5年,高效安全且穩定。

但是分布式數據庫和單機數據庫本身必然會存在一定的使用習慣上的不同,例如低效的分布式事務、分布式join等,針對這些問題,DRDS的選擇是:優先考慮性能和穩定性,兼顧軟件的兼容性。

與市面上的一些開源的數據庫切分工具相比,DRDS能夠更智能的分析您的SQL,在結果集合並和分布式join優化等關鍵領域,我們都有成熟解決方案,能夠幫您解決在分布式數據庫場景中面臨的大部分問題。

2.4 平滑擴容

DRDS能夠幫助用戶實現在線的數據庫平滑擴容,讓用戶能夠按需的自由增減數據庫,從而實現彈性按需使用數據庫集群。

在線數據庫擴容的重點在於“在線”兩字,也就是用戶不需要停止業務系統進行割接操作,直接就可以添加新的RDS節點到集群中,實現無縫的自由擴展。DRDS則將整個擴容的過程分為幾個階段,包括全量遷移,增量同步,切換數據庫等幾個步驟。數據會提前進行搬遷,並進行增量並行同步一段時間,因此,我們可以在非常短的時間內(秒級別)完成數據庫的最終擴容切換工作,對您的業務沒有影響。

2.5 小表廣播

在一些大的業務表進行了切分后,總會存在一些表的數據量不大,更新量也不大的原始信息表。這些表往往會與我們的切分后大表進行join操作。這種操作物理上就會造成分布式join查詢,效率從整體上會比較低下。

針對這種分布式join的場景,我們開發了OETL 專用工具來幫您進行小表廣播,將原信息表的所有數據(包括增量更新)全部自動的廣播到大表的機器上,這樣,就可以讓原來的分布式查詢變成單機本地查詢了。

2.6  全局唯一ID

在分布式環境下,原有的mysql sequence生成機制無法高效的生成全局唯一的sequence.我們借鑒了oracle的sequence生成樣例,實現了一個在mysql基礎上的高效sequence生成器,能做到沒有單點性能瓶頸,具備大並發獲取和低延遲特性。

DRDS sequence功能的目標只是為了保證數據的全局唯一,雖然基本上是按時間序列獲取的,但並不全局有序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM