DRDS:分布式數(shù)據(jù)庫服務。
1.相關術語
DRDS(Distribute Relational Database Service),分布式關系型數(shù)據(jù)庫服務:分布式數(shù)據(jù)庫服務,基于rds,提供分庫分表功能。
DrdsInstance(Distribute Relational Database Instance),分布式數(shù)據(jù)庫實例:一個獨立占用物理內存的分布式數(shù)據(jù)庫服務進程,可以有不同的規(guī)格,規(guī)格會決定該實例的性能(包含IOPS、連接數(shù))。
DrdsInstanceId(Distribute Relational Database Instance ID),分布式數(shù)據(jù)庫實例名:實例名可標識一個實例的名稱,全局唯一。
DrdsDB(Distribute Relational Database),分布式數(shù)據(jù)庫:Drds數(shù)據(jù)庫是在一個實例下創(chuàng)建的邏輯單元,一個實例可以創(chuàng)建多個數(shù)據(jù)庫,在實例內數(shù)據(jù)庫命名唯一,所有數(shù)據(jù)庫都會共享該實例的資源。
DrdsDBName(Distribute Relational Database Name),分布式數(shù)據(jù)庫名:標識每個分布式DB的名稱,在一個實例范圍內,數(shù)據(jù)庫名惟一。
DrdsDBAccount(Distribute Relational Database Accoun),分布式數(shù)據(jù)庫帳號/帳號:帳號是標識數(shù)據(jù)庫的訪問權限,目前一個數(shù)據(jù)庫對應一個帳號,一個帳號關聯(lián)一個數(shù)據(jù)庫。
2.DRDS產(chǎn)品簡介
2.1 DRDS產(chǎn)品概要:
單機數(shù)據(jù)庫能夠方便的滿足用戶對于關系查詢類的需求,是目前業(yè)務應用中最常使用的軟件。然而,對于很多應用而言,單機數(shù)據(jù)庫最終都會碰到單機性能上的天花板,在TPS(系統(tǒng)吞吐量)/QPS(每秒查詢率)/內存容量/磁盤容量等等一系列系統(tǒng)資源上會碰到各類限制。DRDS的主要目標,就是幫您解決這方面的各類問題,他主要提供了兩個功能:讀寫分離和數(shù)據(jù)庫切分。
讀寫分離,能夠允許您實現(xiàn)一臺機器寫入,多臺機器讀取,這對于讀多寫少的應用,能夠以極低的成本解決系統(tǒng)的瓶頸。
數(shù)據(jù)庫切分是一個解決系統(tǒng)存儲瓶頸的最終極解決方案,數(shù)據(jù)庫切分的核心思想其實很簡單,就是分而治之。將數(shù)據(jù)分散到多臺機器,并保證請求能夠平均的分發(fā)到這些機器上,就可以以極低的成本來解決業(yè)務的各類性能瓶頸。
當然,切分也是有代價的,最明顯的代價就是,分布式數(shù)據(jù)庫會對一些原有單機數(shù)據(jù)庫的場景進行限制,因為這些操作,在分布式環(huán)境下的延遲或效率非常低效,就算是能夠實現(xiàn)出來,也會因為性能問題而無法使用。
針對這類問題,阿里的中間件團隊曾經(jīng)成功的協(xié)助過近300個業(yè)務應用系統(tǒng)實現(xiàn)了數(shù)據(jù)庫的切分,因此,我們在這個領域內積累了大量的實戰(zhàn)經(jīng)驗和成熟的產(chǎn)品,希望這類產(chǎn)品也能夠為您提供相同的服務,讓您的數(shù)據(jù)庫再也不必擔心性能問題。
2.2DRDS與MySQL兼容性:
支持點:
DRDS支持90%以上MySQL sql,包括常用的insert/update/replace,select/join/union/subquery/exist等各種語法+條件組合
DRDS抽象出21種數(shù)據(jù)類型,int/float/double/long/decimal/data/time/datetime/timestamp/bit/bits...
DRDS兼容MySQL 80%的函數(shù)實現(xiàn),主要包括:數(shù)學、字符串、時間
DRDS支持map/reduce計算模型
DRDS支持函數(shù)的二次計算,如如count(id)+1,sum(pv)/count(person)
DRDS支持跨庫join的函數(shù)計算,比如select count(*)+1 from a join b on a.id=b.id.
DRDS支持特殊類型計算,比如count(distinct id).
DRDS支持跨數(shù)據(jù)節(jié)點join(分布式join)
DRDS支持跨數(shù)據(jù)節(jié)點多重嵌套子查詢
DRDS支持多種并行執(zhí)行模式
目前不支持:
不支持group by/order by列為函數(shù)列且不存在與select列中
不支持join列為函數(shù)計算,比如on.id=b.id+1
DRDS server未開放DDL支持,只能在控制臺做DDL
不支持復雜update/delete語句(比如update多表,有join等)
不支持強一致分布式事務
2.3數(shù)據(jù)水平拆分
DRDS幫助您實現(xiàn)分庫分表,能夠將原來只能在單節(jié)點執(zhí)行的SQL,轉變?yōu)槎喙?jié)點執(zhí)行的SQL,如同單個數(shù)據(jù)庫體驗。通過支持系統(tǒng)實現(xiàn)數(shù)據(jù)存儲的動態(tài)水平擴展,目前DRDS在公司內已經(jīng)有超過幾百個應用系統(tǒng)使用超過5年,高效安全且穩(wěn)定。
但是分布式數(shù)據(jù)庫和單機數(shù)據(jù)庫本身必然會存在一定的使用習慣上的不同,例如低效的分布式事務、分布式join等,針對這些問題,DRDS的選擇是:優(yōu)先考慮性能和穩(wěn)定性,兼顧軟件的兼容性。
與市面上的一些開源的數(shù)據(jù)庫切分工具相比,DRDS能夠更智能的分析您的SQL,在結果集合并和分布式join優(yōu)化等關鍵領域,我們都有成熟解決方案,能夠幫您解決在分布式數(shù)據(jù)庫場景中面臨的大部分問題。
2.4平滑擴容
DRDS能夠幫助用戶實現(xiàn)在線的數(shù)據(jù)庫平滑擴容,讓用戶能夠按需的自由增減數(shù)據(jù)庫,從而實現(xiàn)彈性按需使用數(shù)據(jù)庫集群。
在線數(shù)據(jù)庫擴容的重點在于“在線”兩字,也就是用戶不需要停止業(yè)務系統(tǒng)進行割接操作,直接就可以添加新的RDS節(jié)點到集群中,實現(xiàn)無縫的自由擴展。DRDS則將整個擴容的過程分為幾個階段,包括全量遷移,增量同步,切換數(shù)據(jù)庫等幾個步驟。數(shù)據(jù)會提前進行搬遷,并進行增量并行同步一段時間,因此,我們可以在非常短的時間內(秒級別)完成數(shù)據(jù)庫的最終擴容切換工作,對您的業(yè)務沒有影響。
2.5小表廣播
在一些大的業(yè)務表進行了切分后,總會存在一些表的數(shù)據(jù)量不大,更新量也不大的原始信息表。這些表往往會與我們的切分后大表進行join操作。這種操作物理上就會造成分布式join查詢,效率從整體上會比較低下。
針對這種分布式join的場景,我們開發(fā)了OETL專用工具來幫您進行小表廣播,將原信息表的所有數(shù)據(jù)(包括增量更新)全部自動的廣播到大表的機器上,這樣,就可以讓原來的分布式查詢變成單機本地查詢了。
2.6全局唯一ID
在分布式環(huán)境下,原有的mysql sequence生成機制無法高效的生成全局唯一的sequence.我們借鑒了oracle的sequence生成樣例,實現(xiàn)了一個在mysql基礎上的高效sequence生成器,能做到?jīng)]有單點性能瓶頸,具備大并發(fā)獲取和低延遲特性。
DRDS sequence功能的目標只是為了保證數(shù)據(jù)的全局唯一,雖然基本上是按時間序列獲取的,但并不全局有序。