1. 程式人生 > >Sharding-Sphere 3.X萬眾矚目登場,如約而至!

Sharding-Sphere 3.X萬眾矚目登場,如約而至!

從Sharding-JDBC到Sharding-Sphere,老鐵粉陪它一同走過,新朋友也在陸續加入。Sharding-Sphere是什麼?做什麼?做的如何?三大經典提問幫助新老朋友一同溫故知新。

Sharding-Sphere是什麼?

Sharding-Sphere是一套開源的分散式資料庫中介軟體解決方案組成的生態圈,它由Sharding-JDBCSharding-ProxySharding-Sidecar這3款相互獨立的產品組成。他們均提供標準化的資料分片、讀寫分離、柔性事務和資料治理功能,可適用於如Java同構、異構語言、容器、雲原生等各種多樣化的應用場景。

Sharding-Sphere定位為關係型資料庫中介軟體,旨在充分合理地在分散式的場景下利用關係型資料庫的計算和儲存能力,而並非實現一個全新的關係型資料庫。它與NoSQL和NewSQL是並存而非互斥的關係。NoSQL和NewSQL作為新技術探索的前沿,是非常值得推薦的。而Sharding-Sphere關注未來不變的東西,進而抓住事物本質。關係型資料庫當今依然佔有巨大市場,是各個公司核心業務的基石,我們目前階段更加關注在原有基礎上的增量,而非顛覆。其架構如下圖所示:

d00c8b079f097d64f4b4aaba97b5477a725c81dd

Sharding-Sphere家族都有誰?

Sharding-JDBC, Sharding-Proxy以及Sharding-Sidecar 共同組成了Sharding-Sphere。他們分別定位、適用於不同的應用場景。您也可以將他們組合使用以得到增益的效能表現。

1. Sharding-JDBC

Sharding-JDBC是Sharding-Sphere的第一個產品,也是Sharding-Sphere的前身。 它定位為輕量級Java框架,在Java的JDBC層提供分庫分表、讀寫分離、資料庫治理、柔性事務等服務。它使用客戶端直連資料庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全相容JDBC和各種ORM框架。

2. Sharding-Proxy

Sharding-Proxy是Sharding-Sphere的第二個產品。 它定位為透明化的資料庫代理端,提供封裝了資料庫二進位制協議的服務端版本,用於完成對異構語言的支援。 Sharding-Proxy遮蔽了底層的分庫分表,您可以像使用一個簡單的資料庫一樣來操作分庫分表的資料。目前提供MySQL版本,它可以使用任何相容MySQL協議的訪問客戶端(如:MySQL Command Client, MySQL Workbench等)來訪問Sharding-Proxy,進而進行DDL/DML等操作來變更資料,對DBA更加友好。

3. Mixed scheme of Sharding-JDBC & Sharding-Proxy

為了得到更好的效能以及友好的互動體驗,您可以同時使用Sharding-JDBC和Sharding-Proxy。

線上應用使用Sharding-JDBC直連資料庫以獲取最優效能,使用MySQL命令列或UI客戶端連線Sharding-Proxy方便的查詢資料和執行各種DDL語句。它們使用同一個註冊中心叢集,通過管理端配置註冊中心中的資料,即可由註冊中心自動將配置變更推送至JDBC和Proxy應用。若資料庫拆分的過多而導致連線數會暴漲,則可以考慮直接在線上使用Sharding-Proxy,以達到有效控制連線數的目的。其架構如下如所示:

5a2ae2c2f4ace1b474a85f17ec83e08a214e7426

4. Sharding-Sidecar

Sharding-Sidecar是Sharding-Sphere的第三個產品,目前仍處在孵化中。 定位為Kubernetes或Mesos的雲原生資料庫代理。其核心思想是Database Mesh,即通過無中心、零侵入的方案提供與資料庫互動的齧合層。關注重點在於如何將分散式的資料訪問應用與資料庫有機串聯起來

Sharding-Sphere的功能特性

1. 分庫分表

為解決關係型資料庫面對海量資料由於資料量過大而導致的效能問題,將資料進行分片是行之有效的解決方案,而將集中於單一節點的資料拆分並分別儲存到多個數據庫或表,稱為分庫分表。作為分散式資料庫中介軟體,我們的目標是透明化分庫分表所帶來的影響,讓使用方儘量像使用一個數據庫一樣使用水平拆分之後的資料庫。

2. 讀寫分離

面對日益增加的系統訪問量,資料庫的吞吐量面臨著巨大瓶頸。 對於同一時間有大量併發讀操作和較少寫操作型別的應用系統來說,將單一的資料庫拆分為主庫和從庫,主庫負責處理事務性的增刪改操作,從庫負責處理查詢操作,能夠有效的避免由資料更新導致的行鎖,使得整個系統的查詢效能得到極大的改善。透明化讀寫分離所帶來的影響,讓使用方儘量像使用一個數據庫一樣使用主從資料庫,是讀寫分離中介軟體的主要功能。

3. 柔性事務

對於分散式的資料庫來說,強一致性分散式事務在效能方面存在明顯不足。追求最終一致性的柔性事務,在效能和一致性上則顯得更加平衡。 Sharding-Sphere目前支援最大努力送達型柔性事務,未來也將支援TCC柔性事務。若不使用柔性事務,Sharding-Sphere也會自動包含弱XA事務支援。

4. 資料治理

Sharding-Sphere提供註冊中心、配置動態化、資料庫熔斷禁用、呼叫鏈路等治理能力。

本期看點

相信很多朋友都想知道今天與大家隆重見面的3.X究竟給大家帶來了什麼新體驗,下面讓我們一睹為快吧~

Sharding-Sphere 3.X新功能:

  1. Sharding-Proxy MySQL版本上線,支援DML/DDL/DAL/DQL等基本 SQL。遮蔽底層所有分庫分表,可像使用單一MySQL資料庫一樣處理分庫分表資料。

  2. 新增對OR SQL語句的支援,例如:select * from t_order where (id>10 and id<20) or status=‘init’;

  3. 新增對INSERT批量插入的支援,例如 insert into t_order(order_id, user_id, status) values (1, 2, ‘init’), (2, 3, ‘init’), (3, 4, ‘init’);

  4. 優化對INSERT SQL語句的支援,主要包括不指定具體列進行INSERT操作,例如:insert into t_order values(1, 2,‘init’);

  5. 增加解析引擎對SQL的快取,進一步提升解析效能。

  6. Sharding-JDBC新增對InlineExpression佔位符$->{}的支援。

新的產品、新的特性、新的優化是不是讓你眼前一亮?那就趕快把Sharding-Sphere 3.X用起來吧!

暖心Tips:

① 使用Sharding-JDBC,可加入以下Maven依賴:

<dependency>

<groupId>io.shardingsphere</groupId

<artifactId>sharding-sphere</artifactId>

<version>3.0.0.M1</version>

</dependency>

② 使用Sharding-Proxy,可在這裡下載:

https://github.com/sharding-sphere/sharding-sphere-doc/raw/master/dist/sharding-proxy-3.0.0.M1.tar.gz

此外,我們的DOCKER下載命令如下所示:

docker pull shardingsphere/sharding-proxy

星路歷程

Sharding-Sphere自2016開源以來,不斷精進、不斷髮展,被越來越多的企業和個人認可:在Github上收穫4000+的star,1700+forks,60+的各大公司企業使用它,為Sharding-Sphere提供了重要的成功案例。此外,越來越多的企業夥伴和個人也加入到Sharding-Sphere的開源專案中,為它的成長和發展貢獻了巨大力量。

未來,我們將不斷優化當前的特性,精益求精;同時,大家關注的柔性事務、資料治理等更多新特性也會陸續登場。Sharding-Sidecar也將成為雲原生的資料庫中介軟體!