Aliware(企業級互聯網架構ACP)復習整理-DRDS


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,SimpleDRDS默認使用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