阿里云DRDS:分布式數(shù)據(jù)庫服務

來源: 博客園
作者:人生設計師
時間:2020-12-28
16947
項目用到阿里的很多接口服務的API,于是想把這段項目做個總結,順便梳理下阿里云的云計算的相關知識點。

mark-fletcher-brown-nN5L5GXKFz8-unsplash.jpg

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ù)的全局唯一,雖然基本上是按時間序列獲取的,但并不全局有序。

立即登錄,閱讀全文
版權說明:
本文內容來自于博客園,本站不擁有所有權,不承擔相關法律責任。文章內容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質服務商推薦
更多
掃碼登錄
打開掃一掃, 關注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家