ShardingSphere

ShardingSphere 是一個開源的分布式數據庫中間件生態系統,由 Apache 基金會孵化和維護。它的主要目標是幫助開發者解決分庫分表、分布式事務和數據加密等分布式數據庫應用中的常見問題。ShardingSphere 提供了多種組件,如 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar,以滿足不同的應用場景。以下是對 ShardingSphere 及其主要組件的詳細介紹:

ShardingSphere 的核心功能

  1. 數據分片(Sharding)

    • 支持水平分表和分庫,即將一個表的數據按照一定的規則分布到多個表或多個數據庫中。
    • 支持多種分片策略,包括范圍分片、哈希分片、復合分片等。
    • 動態分片配置,支持在運行時調整分片策略。
  2. 分布式事務

    • 支持基于 XA 協議的強一致性事務和基于 TCC(Try-Confirm-Cancel)模型的柔性事務。
    • 提供分布式事務的解決方案,保證數據的一致性和可靠性。
  3. 數據加密

    • 支持對敏感數據進行加密和解密,保障數據在存儲和傳輸過程中的安全。
    • 提供透明的數據加密機制,開發者無需對業務代碼進行額外修改。
  4. 讀寫分離

    • 支持主從復制架構,自動將讀請求路由到從庫,提高系統的讀性能。
    • 提供強一致性、弱一致性等多種讀寫分離策略。
  5. 影子庫壓測

    • 支持影子庫壓測功能,可以在不影響生產環境的情況下進行性能測試。

ShardingSphere 的主要組件

  1. Sharding-JDBC

    • 以 Jar 包的形式嵌入到應用程序中,為 Java 應用提供透明化的數據分片、讀寫分離和分布式事務支持。
    • 兼容多種 ORM 框架,如 MyBatis、Hibernate 等,幾乎不需要修改現有代碼。
  2. Sharding-Proxy

    • 作為獨立的數據庫代理層,提供與 MySQL、PostgreSQL 等數據庫協議兼容的接口。
    • 適用于非 Java 應用,如 PHP、Python、Node.js 等語言的應用程序,可以通過配置數據庫連接來實現數據分片和讀寫分離。
  3. Sharding-Sidecar(計劃中)

    • 基于 Service Mesh 的架構,提供輕量級的 Sidecar 模式,適用于 Kubernetes 等容器化環境。
    • 提供細粒度的服務治理功能,實現數據訪問的動態管理和監控。

讀寫分離

ShardingSphere 實現讀寫分離的原理和配置較為簡單,通過配置主從數據源,ShardingSphere 會自動將寫操作路由到主庫,將讀操作路由到從庫,從而實現讀寫分離。下面詳細講解 ShardingSphere 如何實現讀寫分離。

1. 讀寫分離原理

讀寫分離的基本思想是將寫操作(INSERT、UPDATE、DELETE)定向到主數據庫,將讀操作(SELECT)定向到從數據庫。ShardingSphere 通過在配置文件中定義主從數據源,并通過內部路由策略實現自動的讀寫分離。

2. 配置主從數據源

以下是一個基本的配置示例,展示了如何配置主從數據源,實現讀寫分離。

數據源配置

在配置文件中定義主從數據源:

schemaName: my_databasedataSources:master_ds:type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://localhost:3306/master_dbusername: rootpassword: rootslave_ds_0:type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://localhost:3306/slave_db_0username: rootpassword: rootslave_ds_1:type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://localhost:3306/slave_db_1username: rootpassword: root
讀寫分離規則配置

配置讀寫分離規則,指定主從數據源和負載均衡策略:

rules:- !READWRITE_SPLITTINGdataSources:pr_ds:writeDataSourceName: master_dsreadDataSourceNames:- slave_ds_0- slave_ds_1loadBalancerName: round_robinloadBalancers:round_robin:type: ROUND_ROBIN
配置解析
  1. dataSources:定義主從數據源,其中 master_ds 是主數據源,slave_ds_0slave_ds_1 是從數據源。
  2. readwrite-splitting:配置讀寫分離規則,writeDataSourceName 指定主數據源,readDataSourceNames 指定從數據源列表。
  3. loadBalancerName:指定負載均衡策略,ShardingSphere 提供了多種負載均衡策略,如輪詢(ROUND_ROBIN)、隨機(RANDOM)等。

3. 配置示例(Spring Boot)

在 Spring Boot 項目中,可以通過 Java 配置類來實現讀寫分離:

Maven 依賴

添加 ShardingSphere 的 Maven 依賴:

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0</version>
</dependency>
Application.yaml 配置
spring:shardingsphere:datasource:names: master_ds, slave_ds_0, slave_ds_1master_ds:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/master_dbusername: rootpassword: rootslave_ds_0:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/slave_db_0username: rootpassword: rootslave_ds_1:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/slave_db_1username: rootpassword: rootrules:readwrite-splitting:data-sources:pr_ds:write-data-source-name: master_dsread-data-source-names: slave_ds_0, slave_ds_1load-balancer-name: round_robinload-balancers:round_robin:type: ROUND_ROBIN

總結

ShardingSphere 通過提供數據分片、分布式事務、數據加密和讀寫分離等功能,幫助開發者輕松構建高性能、高可用的分布式數據庫系統。其靈活的架構設計和豐富的功能模塊,使其成為現代分布式數據庫中間件的優秀選擇。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40417.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40417.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40417.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Using a text embedding model locally with semantic kernel

題意&#xff1a;在本地使用帶有語義核&#xff08;Semantic Kernel&#xff09;的文本嵌入模型 問題背景&#xff1a; Ive been reading Stephen Toubs blog post about building a simple console-based .NET chat application from the ground up with semantic-kernel. Im…

idea中maven全局配置

配置了就不需要每次創建項目都來設置maven倉庫了。 1.先把項目全關了 2. 進入全局設置 3.設置maven的倉庫就可以了

SpringBoot實現多數據源切換

1. 概述 隨著項目規模的擴大和業務需求的復雜化&#xff0c;單一數據源已經不能滿足實際開發中的需求。在許多情況下&#xff0c;我們需要同時操作多個數據庫&#xff0c;或者需要將不同類型的數據存儲在不同的數據庫中。這時&#xff0c;多數據源場景成為必不可少的解決方案。…

【CentOS7.6】docker部署EMQX教程,本地鏡像直接導入(附下載鏈接),沒法在云服務器上魔法拉取鏡像的快來

總覽 先把下載鏈接放在這里吧&#xff0c;這是 EMQX 的 tar 包&#xff0c;能夠直接導入 CentOS 的 docker&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1rSGSLoVvj83ai6d5oolg8Q?pwd0108 提取碼&#xff1a;0108 一、安裝配置教程 1.將 EMQX-latest.tar 包導入…

服務器重裝系統時數據丟失?有哪些方法可以避免

為了避免在服務器重裝系統時數據丟失&#xff0c;可以采取以下預防措施&#xff1a; 1. 數據備份&#xff1a;在重裝系統之前&#xff0c;備份所有重要的數據和配置文件。備份可以通過以下方式進行&#xff1a; - 使用外部存儲設備(如USB硬盤、NAS等)進行備份。 - 利用備份軟件…

學習成績總是上不去?中學生把握好這5個環節,助你提高成績

在中學時代&#xff0c;考試我們并不陌生。每隔一段時間&#xff0c;學校就會安排我們參加考試。學生時代&#xff0c;我們參加的考試有很多。對于中學生來說&#xff0c;考試成績是我們一直關心的事情。很多學生非常努力的學習&#xff0c;成績卻上不去。這是非常可惜的&#…

[圖解]企業應用架構模式2024新譯本講解19-數據映射器1

1 00:00:01,720 --> 00:00:03,950 下一個我們要講的就是 2 00:00:04,660 --> 00:00:07,420 數據映射器這個模式 3 00:00:09,760 --> 00:00:13,420 這個也是在數據源模式里面 4 00:00:13,430 --> 00:00:14,820 用得最廣泛的 5 00:00:16,250 --> 00:00:19,170…

【軟件工程中的噴泉模型及其優缺點】

文章目錄 一、噴泉模型是什么&#xff1f;二、噴泉模型的優點1. 靈活性和適應性2. 迭代開發3. 風險控制 三、噴泉模型的缺點1. 需求不明確性2. 可能造成資源浪費3. 需要良好的溝通與協作 一、噴泉模型是什么&#xff1f; 噴泉模型是一種迭代增量開發模型&#xff0c;其核心理念…

鏈篦機回轉窯球團生產工藝

生球在回轉窯氧化焙燒&#xff0c;回轉窯頭部設有燃燒器&#xff0c;燃料可以采用氣體、固體、液體。 來自環冷機一冷卻段的高溫廢氣作為二次風進入窯內參與燃燒&#xff0c;燒成成品球進入環冷機。 環冷機采用鼓風冷卻&#xff0c;熱風風箱分為四段&#xff1a; 一段氣體引至…

無人機有哪些關鍵技術?

一、控制技術 無人機的核心還是在控制上&#xff0c;飛控系統的可靠性、穩定性及可擴展性是其中重要的指標。可靠性上&#xff0c;除了器件選型之外&#xff0c;目前主要靠多余度來增加&#xff1b;穩定性主要體現在多場景下仍能保持良好的工作狀態&#xff0c;主要靠算法來進…

QML-各類布局

Colunm布局 Column{id:colspacing: 30Repeater{id:repmodel: ListModel{}Button{width: 100height: 50text: "btn"index}}//開始時候移動move: Transition {NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce }}//添加時變化add:Transi…

【Nginx】docker運行Nginx及配置

Nginx鏡像的獲取 直接從Docker Hub拉取Nginx鏡像通過Dockerfile構建Nginx鏡像后拉取 二者區別 主要區別在于定制化程度和構建過程的控制&#xff1a; 直接拉取Nginx鏡像&#xff1a; 簡便性&#xff1a;直接使用docker pull nginx命令可以快速拉取官方的Nginx鏡像。這個過程…

通透!手把教你如何從頭構建一個機器學習模型

目錄 1.業務理解 2.數據收集和準備 數據采集 探索性數據分析 (EDA) 和數據清理 特征選擇 3.建立機器學習模型 選擇正確的模型 分割數據 訓練模型 模型評估 4.模型優化 5.部署模型 今天我將帶領大家一步步的來構建一個機器學習模型。 我們將按照以下步驟開發客戶流失…

賽博解壓板

目錄 開頭程序程序的流程圖程序的解壓效果(暫無&#xff0c;但可以運行一下上面的代碼)結尾 開頭 大家好&#xff0c;我叫這是我58。今天&#xff0c;我們要看關于賽博解壓板的一些東西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #define ROW 6//ROW表示行數&#xff0c;可…

【ARM 常見匯編指令學習 7.1 -- LDRH 半字讀取指令】

請閱讀【嵌入式開發學習必備專欄】 文章目錄 LDRH 使用介紹LDRH&#xff08;Load Register Half-word&#xff09;總結 LDRH 使用介紹 在ARMv9架構中&#xff0c;匯編指令LDRH用于從內存中載入數據到寄存器的指令&#xff0c;下面將分別對它進行詳細介紹&#xff1a; LDRH&am…

【基礎算法】UE中實現輪播

本期作者&#xff1a;尼克 易知微3D引擎技術負責人 當前N 總數M 從0到M-1 從1到M 感謝閱讀&#xff0c;以上內容均由易知微3D引擎團隊原創設計&#xff0c;以及易知微版權所有&#xff0c;轉載請注明出處&#xff0c;違者必究&#xff0c;謝謝您的合作。申請轉載授權后臺回復【…

【WebKit屏幕方向API全解析】掌握現代Web應用的方向感應

標題&#xff1a;【WebKit屏幕方向API全解析】掌握現代Web應用的方向感應 WebKit作為許多現代瀏覽器的內核&#xff0c;提供了對HTML5和CSS3的廣泛支持&#xff0c;包括對屏幕方向的控制。屏幕方向API&#xff08;Screen Orientation API&#xff09;允許Web應用知道屏幕的方向…

左耳聽風_114_113_Go編程模式修飾器

你好&#xff0c;我是陳浩&#xff0c;我名多爾多house.之前呢我寫過一篇文章叫做python修飾器的函數式編程。 那這種模式呢可以很輕松的把一些函數啊裝配到另外一些函數上。 讓你的代碼呢更加簡單&#xff0c;也可以讓一些小功能性的代碼復用性更高。 讓代碼中的函數呢可以…

掌握XD數字設計:打造令人驚艷的用戶體驗

xd是adobe旗下一款主打UI界面設計-建立原型的軟件&#xff0c;它可以將wireframe、design、以及prototype等UI/UX設計流程整合到一個軟件中&#xff0c;算是一款與sketch對打的軟件。 與PS相比&#xff0c;在UI設計方面&#xff0c;Adobe XD有非常突出的3個優點&#xff1a;能…

從0到1手寫vue源碼

模版引擎 數組join法&#xff08;字符串&#xff09; es6反引號法&#xff08;模版字符串換行&#xff09; mustache (小胡子) 引入mustache 模版引擎的使用 mustache.render(templatestr,data) mustache.render 循環簡單數組 循環復雜數組 循環單項數組 數組的嵌套 musta…