DRDS的基礎原理是Sharding,即數據分片,是典型的水平擴展分佈式數據庫模型,和傳統單機數據庫share anything架構不一樣,DRDS採用的是share nothing架構。DRDS主要解決單機數據庫容量瓶頸,單機數據庫擴展困難,傳統數據庫使用成本高的問題,是高性價比,低運維成本的分佈式數據庫。主要場景是大規模在線數據操做,如 : 高併發實時交易,海量數據存儲和訪問,數據庫雲上備份容災。DRDS兼容MySQL協議和語法,支持分庫分表、平滑擴容、服務升降配、透明讀寫分離,分佈式事務,分佈式數據庫生命週期管理。sql
share nothing架構核心思路利用普通的服務器,將單機數據拆分到底層的多個數據庫實例上,經過統一的Proxy集羣(DRDS 節點)進行SQL解析優化、路由和結果聚合,對外暴露簡單惟一的數據庫連接。數據庫
DRDS不支持Mysql視圖、存儲過程、跨庫外鍵和級聯刪除,不支持自定義數據類型、流程控制類語句、自定義函數。後端
DRDS實例是由一組DRDS Server節點和底層存儲組成的分佈式集羣,分爲共享實例(規格只有8Core8G,使用公網地址)和專享實例(最小規格8Core16G,即兩個DRDS節點,默認提供內網地址)服務器
DRDS Server,即DRDS節點,主要做用是SQL解析優化、路由和結果歸併。網絡
DRDS能夠進行購買建立實例,建立克隆實例(DRDS實例必須是專享實例),實例間數據庫遷移,實例釋放,實例變配,平滑擴容操做。架構
DRDS實例性能主要由DRDS規格和選擇的RDS性能決定。DRDS可進行性能監控,重要監控指標有邏輯QPS和物理QPS,鏈接數,線程活躍數,CPU 利用率,RT邏輯和物理RT,網絡輸入和輸出流量。併發
DRDS實例變配(變配實例的規格,主要是增長了處理節點和均攤QPS)實現服務的彈性擴展,解決DRDS性能問題(資源合理利用和解決瓶頸)。衡量DRDS實例規格的重要指標是QPS,QPS和CPU性能是正相關的,CPU利用率超出90%或持續超出80%說明DRDS性能瓶頸,須要實例升配。衡量DRDS數據庫性能主要從響應時間(RT)和QPS兩個指標進行衡量,RT通常是單個SQL性能,可SQL優化解決,QPS性能請選擇實例變配。運維
SQL優化 : 主要原則讓更多的計算能夠下推到RDS/MySQL上執行,DRDS可制定執行計劃。分佈式
DRDS是否須要平滑擴容(即增長RDS的數量)通常觀察RDS的三個指標 : IOPS,CPU,磁盤空間。若是IOPS和CPU任何一個指標長期保持在80%以上或頻繁收到報警信息,請嘗試SQL優化,升高RDS規格或設置只讀庫,若是仍不能解決請進行擴容。RDS的磁盤容量剩餘請儘可能保持在30%以上。擴容有風險,擴容時請不要執行SQL,請在RDS低負載時和業務低谷期時進行,擴容不影響原有數據正常訪問。函數
DRDS控制檯地址爲 https://drds.console.aliyun.com
DRDS控制檯提供查看數據庫具體信息、刪除數據庫、重置密碼、只讀用戶管理等功能。
DRDS控制檯不支持直接執行帶有dbpartition 或 tbpartition 關鍵字的分佈式DDL。
DRDS的數據庫只能在控制檯上面建立,須要選擇至少一個(多個)RDS(類型爲MySQL,狀態爲運行中)做爲存儲節點。若是選擇的RDS區域和DRDS不相同,即跨區,會帶來最高3ms的網絡延遲。數據庫建立類型分爲拆分型(主要類型),非拆分型(將RDS數據庫交由DRDS代理訪問,實現讀寫分離)。拆分型的數據庫,DRDS默認在1個RDS上建立8個物理庫(不能更改),總物理庫數量 = 選擇RDS數量 * 8。分表數理論上沒有限制,但受限於DRDS自己的規格資源。單個物理分表的容量不超過500萬行數據。
刪除數據庫只會刪除由DRDS所建立的數據庫,不會影響本來在RDS上的數據庫。
DRDS選擇數據庫鏈接池(提升了應用性能),主要做用是資源複用,提升系統響應效率,避免鏈接泄漏,DRDS可以使用後端鏈接池數自動調整功能。
DRDS讀寫分離,對應用透明的設計,無需更改代碼。拆分型只需在DRDS控制檯中調整讀權重比例(設置讀策略),就可將讀流量在主RDS和只讀RDS中進行分流,寫流量都在主RDS上,不分流。可經過SHOW NODE指令查看實際讀流量分佈。主RDS上是強讀(強一致性,即強實時性),只讀RDS上是弱讀(存在毫秒級延遲),個別須要實時性、強一致性讀的SQL可經過HINT實現。非拆分型直接選擇RDS的數據庫引入到DRDS作讀寫分離。讀寫分離只對查詢有效,寫請求和顯式事務查詢都在主RDS中。
DRDS HINT可指定在主RDS或只讀RDS上執行SQL,HINT基於MySQL註釋實現的。自定義的HINT做用讀寫分離(經過將SQL指定發給主RDS或自讀RDS實現),切斷延遲的只讀RDS,自定義SQL超時時間,指定分庫執行SQL,掃描所有分庫分表。
每一個DRDS數據庫能夠建立一個只讀用戶,只讀用戶只能進行SELECT、SHOW等讀操做。
DRDS數據庫的表操做權限有8個,CREATE、DROP、ALTER、INDEX、INSERT、DELETE、UPDATE、SELECT。進行相關操做必需要以上對應的權限,如TRUNCATE須要DROP權限,REPLACE須要INSERT和DELETE權限,INSERT ON DUPLICATE UPDATE須要INSERT和UPDATE權限。
DRDS廣播表,(小表廣播,主要提高JOIN效率,BROADCAST),DRDS將數據量小(小表),更新頻率不高並設置爲單表的表叫作廣播表。廣播表經過同步機制進行數據同步,有秒級延遲,廣播表會在每個分庫中都會建立一樣的表,但數據只存儲在第一個分庫上(即分庫中數據不是全量複製)。
DRDS數據庫水平拆分到每一個RDS的數據庫中,拆分的庫叫分庫,分庫的表叫分表(也叫分片),拆分分爲庫級拆分(即進行分庫),表級拆分(即進行分表)。經過拆分鍵實現,拆分鍵分爲分庫鍵(DB_PARTITION_KEY),分表鍵(TB_PARTITION_KEY)。可經過SHOW RULE查看數據庫下每個邏輯表的拆分狀況。 經過SHOW TOPOLOGY查看邏輯表的拓撲分佈(保存在哪些分庫中,每一個分庫下包含哪些分表)。dbpartition by hash(按hash分庫),tbpartition by WEEK(支持按時間分表,但不支持按時間分庫)。
DRDS拆分鍵是生成拆分規則的數據庫字段,只支持單個字段,建好分庫分表後拆分鍵不能變動,值不可修改。選擇拆分鍵請儘可能規避熱點數據。拆分原則是 : 儘量找到數據表中的數據在業務邏輯上的主體。
DRDS SQL路由,即按照拆分鍵和SQL語義把SQL分發到底層各個存儲的分表進行執行。拆分鍵是DRDS中數據分佈和SQL路由的憑證,DRDS將返回的數據按照原始SQL語義進行合併返回給用戶。
DRDS中的sequence序列的特色是全局惟一,有序遞增,分爲三種類型 : Group,Time,Simple。DRDS默認使用Group(不會單點,性能好),但序列不連續、可能會有跳躍段,不能循環,不會嚴格從起始值開始取值(即show sequences命令看到的不必定是最大值)。Time(性能很高),用於自增時必須是BIGINT類型。Simple(性能差),單調遞增,有瓶頸,謹慎使用。
DRDS能夠進行數據表管理,可查看錶結構、設置全表掃描、刪除表。DRDS可設置白名單。DRDS支持數據導入導出。DRDS支持分佈式JOIN,但對複雜狀況,如對大表之間的JOIN,執行代價高,速度過慢容易致使性能或者系統不可用。
全表掃描是SQL語句被分發到全部分庫上執行,在執行帶有WHERE條件的UPDATE、DELETE、SELECT語句時,SQL語句中沒有使用拆分鍵或者雖指定拆分鍵可是範圍太廣會致使全表掃描。全表掃描默認是關閉的,響應較慢,避免在高併發業務場景中使用。
DRDS將執行時間超過1秒的SQL定義爲慢SQL,分爲邏輯慢SQL(應用發送到DRDS,使用SHOW FULL SLOW查看),物理慢SQL(DRDS發送到RDS,使用SHOW FULL PHYSICAL_SLOW查看)。SHOW SLOW可查看慢SQL,SHOW PROCESSLIST查看數據庫實時執行信息。
DRDS支持由經典網絡(Classic)切換到VPC(實例必須是共享實例,且地域和VPC的必須相同),切換後Classic類型的ECS沒法訪問DRDS,VPC環境的ECS才能訪問VPC環境的DRDS。DRDS切換到VPC後,不會影響DRDS之下的RDS,RDS實例的域名會自動解析爲VPC的IP段地址 ,所以RDS的網絡類型不須要切換。
DRDS默認支持只單機事務,不支持跨庫事務。分佈式事務服務請單獨申請開通。