DRDS


DRDS

分布式關系型數據庫服務(Distributed Relational Database Service,簡稱 DRDS)專注於解決單機關系型數據庫擴展性問題,具備輕量(無狀態)、靈活、穩定、高效等特性,

DRDS 兼容 MySQL 協議和語法,支持分庫分表、平滑擴容、服務升降配、透明讀寫分離和分布式事務等特性,具備分布式數據庫全生命周期的運維管控能力。

DRDS 主要解決了以下問題:

  • 單機數據庫容量瓶頸: 隨着數據量和訪問量的增長,單機數據庫會遇到很大的挑戰,依賴硬件升級並不能完全解決問題。
  • 單機數據庫擴展困難:傳統數據庫容量擴展往往意味着服務中斷,很難做到業務無感知或者少感知。
  • 傳統數據庫使用成本高: 當業務數據和訪問量增加到一定量時,傳統數據庫需要依賴特定的高端存儲和小型機設備,成本曲線快速上升。

注意:

  • 如果 DRDS 實例為專享實例,默認只提供內網地址,建議使用相同地域 的 ECS 安裝 MySQL 命令行連接。
  • 如果 DRDS 實例為共享實例,可以使用其公網地址,從外網機器或者辦公機器進行連接使用
  • 已有的共享實例上的 DRDS 的邏輯庫元信息可以隨時自助遷移到指定專享實例,無需重新導入數據即可快速完成從共享實例到專享實例的遷移。

創建類型對應使用 DRDS 的不同方式。

  • 拆分:即分庫分表,將數據按照拆分規則分拆到多個庫表中,由 DRDS 代理 SQL 執行。拆分涉及到數據導入導出、SQL 功能/性能測試和改造,對應用功能和性能會有一定的影響。
  • 非拆分:將已有的 RDS 數據庫交由 DRDS 進行代理訪問,實現讀寫分離的功能。無需進行數據導入,無需修改程序代碼,修改數據庫連接串和用戶名密碼即可。

名詞解釋

DRDS

DRDS(Distributed Relational Database Service)是阿里巴巴自主研發,高度兼容 MySQL 協議和語法的分布式關系型數據庫服務中間件。

DRDS 服務節點(DRDS Server)

DRDS Server 是 DRDS 核心組件,提供 SQL 的解析、優化、路由和結果歸並。

DRDS 實例

DRDS 實例是由一組 DRDS Server 節點組成的分布式數據庫服務集群。各服務節點無狀態,同時處理 SQL 請求。

DRDS 實例規格

DRDS 實例規格是 DRDS 實例處理能力體現,按照 CPU 和 內存提供不同的規格的實例,規格越高處理能力越強。如 4Core8G 和 8Core16G,在標准的 DRDS 測試場景下,后者的處理能力是前者的兩倍。

實例升降配

DRDS 可以通過改變實例規格來改變處理能力,提升實例規格稱為升配,降低實例規格稱為降配。

水平拆分

水平拆分是將一個單機數據庫拆分為多個物理分庫,將數據庫中的表數據按照拆分規則,拆分為多個物理分表,存儲到不同的數據庫分庫上的過程。

拆分規則

水平拆分過程中將邏輯數據庫表拆分為多個物理分表規則稱為拆分規則。

拆分鍵

水平拆分過程中,生成拆分規則的數據庫字段稱為拆分鍵。

分庫

DRDS 水平拆分后,邏輯數據庫數據存儲在多個物理存儲實例上,每個存儲實例上的物理庫稱為分庫。

分表

DRDS 水平拆分后,每一個分庫上的物理數據表稱為分表。

邏輯 SQL

由應用端發送到 DRDS 的 SQL 稱為邏輯 SQL。

物理 SQL

由 DRDS 對邏輯 SQL 進行解析之后發送到 RDS 上執行的 SQL 稱為物理 SQL。

透明讀寫分離

DRDS 的單個存儲實例節點遇到訪問瓶頸時,可通過增加只讀實例來分擔主實例的壓力。DRDS 的讀寫分離功能不需要修改任何應用代碼,稱為透明讀寫分離。

非拆分模式

DRDS 支持不進行數據庫水平拆分而僅通過 DRDS 提供的透明讀寫分離來擴展數據庫的服務能力。這種模式稱為非拆分模式。

平滑擴容

DRDS 可通過增加存儲實例節點完成數據庫的擴容。擴容不影響原有數據的正常訪問,稱為平滑擴容。

小表廣播

DRDS 將一些數據量小且更新頻度不高的數據表存儲為單表模式,這些數據表稱為小表。通過數據同步將小表復制到與之 JOIN 的分庫上進而提升 JOIN 效率的解決方案稱為“小表廣播”或者“小表復制”。

全表掃描

數據庫拆分模式下,如果 SQL 語句中沒有指定拆分鍵,DRDS 將在所有分表上執行 SQL 並歸並結果返回,這個過程稱為全表掃描。為避免影響性能,用戶應盡量避免全表掃描。

全局唯一數字序列(DRDS Sequence)

DRDS 全局唯一數字序列(64位數字,對應 MySQL 中 BIGINT 類型)的主要目標是為了保證所定義唯一字段中的數據的全局唯一(比如 PRIMARY KEY,UNIQUE KEY 等)和有序遞增。

DRDS 自定義注釋(DRDS Hint)

DRDS 提供的自定義注釋,用於指定一些特殊行為,通過相關的語法影響 SQL 的執行方式,從而對 SQL 進行特殊的優化。

數據導入

  • 當待導入的數據量比較小時,如總數據量少於500萬條,可以使用 mysqldump 等工具導出數據,再使用 MySQL source 命令將數據導入到 DRDS 數據庫里。具體示例請參考數據導入與導出文檔。
  • 當數據量較大時,可以通過 DRDS 控制台導入數據。
  • 數據導入是通過阿里雲 DTS 服務實現,具體操作可以參考數據導入操作。在選擇目標庫時,實例類型選擇 DRDS。
    注意:通過 DTS 數據遷移到 DRDS,不支持結構導入,請先在 DRDS 庫上建表。
  • 通過 DTS 向 DRDS 導入數據時,由於記錄含有主鍵 ID,會導致 DRDS Sequence 無法變更,產生導入數據主鍵 ID 值領先於 DRDS Sequence 當前值,從而引起主鍵沖突的情況。為了避免出錯,需要修改 Sequence 起始值,方法可參考 Sequence 修改。

以下轉載自:http://www.cnblogs.com/ealenxie/p/8967046.html
DRDS的基礎原理是Sharding,即數據分片,是典型的水平擴展分布式數據庫模型,和傳統單機數據庫share anything架構不同,DRDS采用的是share nothing架構。

DRDS主要解決單機數據庫容量瓶頸,單機數據庫擴展困難,傳統數據庫使用成本高的問題,是高性價比,低運維成本的分布式數據庫。主要場景是大規模在線數據操作,如 : 高並發實時交易,海量數據存儲和訪問,數據庫雲上備份容災。

DRDS兼容MySQL協議和語法,支持分庫分表、平滑擴容、服務升降配、透明讀寫分離,分布式事務,分布式數據庫生命周期管理。

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默認支持只單機事務,不支持跨庫事務。分布式事務服務請單獨申請開通。


免責聲明!

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



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