當前位置:首頁 » 存儲配置 » 中間件配置策略怎麼看

中間件配置策略怎麼看

發布時間: 2024-10-20 14:46:05

1. 資料庫分庫分表中間件的整理

本文將總結介紹常見的資料庫分庫分表中間件,並探討它們的選擇依據和資料庫拆分策略。

首先,市面上的分庫分表中間件包括cobar、TDDL、atlas、sharding-jdbc和mycat。cobar曾由阿里團隊開發,但因更新停滯,基本被遺棄,不建議使用。TDDL是淘寶的解決方案,支持讀寫分離,但依賴外部管理系統,使用范圍有限。atlas由360開源,社區維護已滯後,使用公司較少。sharding-jdbc由當當開源,提供了豐富的SQL支持,2.0版本支持多種功能,活躍度較高,是當前的可選方案之一。mycat基於cobar,功能完善且流行,社區活躍,但相對較新。

在選擇中間件時,client層方案如sharding-jdbc(如中小型公司)優點在於輕量級、運維成本低,但升級時需系統同步;proxy層方案mycat(如中大型公司)雖運維成本高,但對項目透明,適合大型團隊使用。對於資料庫拆分,有水平拆分(將數據分散到多個庫)和垂直拆分(根據訪問頻率拆表)兩種方式,水平拆分利於並發和擴展,垂直拆分利於緩存優化。

分庫分表策略包括范圍分庫(按時間或范圍劃分)和哈希分庫(均勻分布)。范圍分庫易於擴容,但可能導致熱點問題;哈希分庫負載均衡,但擴容時需要數據遷移。實現不停機遷移和動態擴容縮容的方法包括預設資料庫伺服器配置,調整路由規則,利用工具遷移數據,修改配置,然後發布系統,調整路由即可。

2. 分庫分表:中間件最全方案對比

分庫分表是互聯網公司數據管理的重要策略,在數據規模到達一定階段後,通過將數據分散存儲在不同的資料庫實例中,以提高系統的性能和擴展性。以MySQL為例,水平分片技術將單表拆分,減少B+樹索引的深度,提升查詢速度,同時通過分庫實現負載均衡,減輕單個資料庫的壓力。分庫分表技術主要分為應用層依賴類中間件和中間層代理類中間件兩大類。

應用層依賴類中間件,如TDDL、sharding-jdbc、TSharding、CTrip-DAL等,其特點在於與應用層緊密耦合,需要在應用層中依賴特定的jar包。這些中間件通過重新實現JDBC API,如DataSource、PrepareStatement等,使應用層在基本不改變業務代碼的情況下,實現分庫分表的能力。其主要工作流程包括SQL解析、SQL重寫、SQL路由等,最終通過傳統方法執行SQL並合並結果集返回給應用層。這類中間件的優點是無需額外部署,只需要與應用綁定一起發布。然而,缺點是不能跨語言,限制了使用范圍。

ShardingSphere是一個由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar組成的分布式資料庫中間件解決方案。ShardingSphere提供標准化的數據分片、分布式事務和資料庫治理功能,適用於各種語言、容器和雲原生環境。Sharding-JDBC定位為輕量級java框架,提供增強的JDBC功能,無需額外部署。Sharding-Proxy作為透明化的資料庫代理端,提供MySQL協議的封裝服務,支持異構語言的訪問。Sharding-Sidecar(待開發)預計為Kubernetes或Mesos的雲原生資料庫代理,提供分布式數據訪問應用與資料庫的交互治理。

混合架構中,OLTP(聯機事務處理)和OLAP(聯機分析處理)是數據處理的主要分類。OLTP系統注重資料庫內存效率,強調並發操作,而OLAP系統則聚焦數據分析,重視SQL執行性能。ShardingSphere通過混合使用Sharding-JDBC和Sharding-Proxy,並採用統一的注冊中心配置分片策略,支持靈活構建適用於不同場景的應用系統。

中間層代理類中間件,如Amoeba、Cobar和Mycat等,通過在應用與資料庫之間建立代理層,實現標准MySQL協議的轉發,支持多種編程語言。Mycat是一個開源分布式資料庫系統,提供了MySQL協議的伺服器功能,實現分表分庫,支持與多個MySQL伺服器通信或使用JDBC協議與其他資料庫通信。這類中間件在技術實現上與應用層依賴類中間件相似,但強調標准協議的兼容性,易於跨語言使用。

在分庫分表技術選型時,需綜合考慮產品功能、可擴展性、成熟度和實際應用情況。應用層依賴類中間件適用於與應用緊密耦合的場景,而中間層代理類中間件則提供了更廣泛的跨語言支持。最終選擇應基於具體的業務需求和技術棧考慮。在上述過程中,ShardingSphere因其全面的功能、跨語言支持和成熟度,成為了一個值得推薦的中間件解決方案。

3. 將緩存數據分片到集群的不同節點,分片規則可以使用什麼演算法

以每24小時作為一份時間(而非自然日),根據用戶的配置有兩種工作模式:帶狀模式中,用戶僅定義開始日期時,從開始日期(含)開始,每份時間1個分片地無限增加下去;環狀模式中,用戶定義了開始日期和結束日期時,以結束日期(含)和開始日期(含)之間的時間份數作為分片總數(分片數量固定),以類似取模的方式路由到這些分片里。

1. DBLE 啟動時,讀取用戶在 rule.xml 配置的 sBeginDate 來確定起始時間
2. 讀取用戶在 rule.xml 配置的 sPartionDay 來確定每個 MySQL 分片承載多少天內的數據
3. 讀取用戶在 rule.xml 配置的 dateFormat 來確定分片索引的日期格式
4. 在 DBLE 的運行過程中,用戶訪問使用這個演算法的表時,WHERE 子句中的分片索引值(字元串),會被提取出來嘗試轉換成 Java 內部的時間類型
5. 然後求分片索引值與起始時間的差,除以 MySQL 分片承載的天數,確定所屬分片

1. DBLE 啟動時,讀取用戶在 rule.xml 配置的起始時間 sBeginDate、終止時間 sEndDate 和每個 MySQL 分片承載多少天數據 sPartionDay
2. 根據用戶設置,建立起以 sBeginDate 開始,每 sPartionDay 天一個分片,直到 sEndDate 為止的一個環,把分片串聯串聯起來
3. 讀取用戶在 rule.xml 配置的 defaultNode
4. 在 DBLE 的運行過程中,用戶訪問使用這個演算法的表時,WHERE 子句中的分片索引值(字元串),會被提取出來嘗試轉換成 Java 內部的日期類型
5. 然後求分片索引值與起始日期的差:如果分片索引值不早於 sBeginDate(哪怕晚於 sEndDate),就以 MySQL 分片承載的天數為模數,對分片索引值求模得到所屬分片;如果分片索引值早於 sBeginDate,就會被放到 defaultNode 分片上

與MyCat的類似分片演算法對比

中間件
DBLE
MyCat

分片演算法種類 date 分區演算法 按日期(天)分片
兩種中間件的取模範圍分片演算法使用上無差別

開發注意點
【分片索引】1. 必須是字元串,而且 java.text.SimpleDateFormat 能基於用戶指定的 dateFormat 來轉換成 java.util.Date
【分片索引】2. 提供帶狀模式和環狀模式兩種模式
【分片索引】3. 帶狀模式以 sBeginDate(含)起,以 86400000 毫秒(24 小時整)為一份,每 sPartionDay 份為一個分片,理論上分片數量可以無限增長,但是出現 sBeginDate 之前的數據而且沒有設定 defaultNode 的話,會路由失敗(如果有 defaultNode,則路由至 defaultNode)
【分片索引】4. 環狀模式以 86400000 毫秒(24 小時整)為一份,每 sPartionDay 份為一個分片,以 sBeginDate(含)到 sEndDate(含)的時間長度除以單個分片長度得到恆定的分片數量,但是出現 sBeginDate 之前的數據而且沒有設定 defaultNode 的話,會路由失敗(如果有 defaultNode,則路由至 defaultNode)
【分片索引】5. 無論哪種模式,分片索引欄位的格式化字元串 dateFormat 由用戶指定
【分片索引】6. 無論哪種模式,劃分不是以日歷時間為准,無法對應自然月和自然年,且會受閏秒問題影響

運維注意點
【擴容】1. 帶狀模式中,隨著 sBeginDate 之後的數據出現,分片數量的增加無需再平衡
【擴容】2. 帶狀模式沒有自動增添分片的能力,需要運維手工提前增加分片;如果路由策略計算出的分片並不存在時,會導致失敗
【擴容】3. 環狀模式中,如果新舊 [sBeginDate,sEndDate] 之間有重疊,需要進行部分數據遷移;如果新舊 [sBeginDate,sEndDate] 之間沒有重疊,需要數據再平衡

配置注意點
【配置項】1. 在 rule.xml 中,可配置項為 <propertyname="sBeginDate"> 、 <propertyname="sPartionDay"> 、 <propertyname="dateFormat"> 、 <propertyname="sEndDate"> 和 <propertyname="defaultNode">
【配置項】2.在 rule.xml 中配置 <propertyname="dateFormat">,符合 java.text.SimpleDateFormat 規范的字元串,用於告知 DBLE 如何解析sBeginDate和sEndDate

【配置項】3.在 rule.xml 中配置 <propertyname="sBeginDate">,必須是符合 dateFormat 的日期字元串

【配置項】4.在 rule.xml 中配置 <propertyname="sEndDate">,必須是符合 dateFormat 的日期字元串;配置了該項使用的是環狀模式,若沒有配置該項則使用的是帶狀模式

【配置項】5.在 rule.xml 中配置 <propertyname="sPartionDay">,非負整數,該分片策略以 86400000 毫秒(24 小時整)作為一份,而 sPartionDay 告訴 DBLE 把每多少份放在同一個分片

【配置項】6.在 rule.xml 中配置 <propertyname="defaultNode"> 標簽,非必須配置項,不配置該項的話,用戶的分片索引值沒落在 mapFile 定義

熱點內容
編程腦子疼 發布:2024-11-24 02:31:23 瀏覽:169
c語言狀態機 發布:2024-11-24 02:26:56 瀏覽:281
用友加密狗破解 發布:2024-11-24 02:23:16 瀏覽:707
鴻蒙系統如何變回安卓桌面 發布:2024-11-24 02:18:26 瀏覽:412
c語言填充 發布:2024-11-24 02:10:48 瀏覽:822
命名空間存儲 發布:2024-11-24 02:10:45 瀏覽:472
java重載與重寫 發布:2024-11-24 01:59:05 瀏覽:699
通緝令2ftp 發布:2024-11-24 01:59:04 瀏覽:295
android賽車游戲 發布:2024-11-24 01:58:18 瀏覽:105
女神聯盟賬號密碼哪裡找 發布:2024-11-24 01:58:12 瀏覽:479