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

最近在作阿里雲相關的項目,用到阿里的不少接口服務的API,因而想把這段項目作個總結,順便梳理下阿里雲的雲計算的相關知識點。mysql

DRDS:分佈式數據庫服務。sql

1.相關術語數據庫

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

DrdsInstance(Distribute Relational Database Instance),分佈式數據庫實例:一個獨立佔用物理內存的分佈式數據庫服務進程,能夠有不一樣的規格,規格會決定該實例的性能(包含IOPS、鏈接數)。併發

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

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功能的目標只是爲了保證數據的全局惟一,雖然基本上是按時間序列獲取的,但並不全局有序。

相關文章
相關標籤/搜索