可以不會 ,不能不知的SpringBoot+Sharding-JDBC分庫分表項目實戰

可以不會 ,不能不知的SpringBoot+Sharding-JDBC分庫分表項目實戰

引言

微服務、分佈式大行其道也是當下,中、高JAVA高級工程師面試的高頻詞彙,這些知識不瞭解面試通過率不會太高。你可以不會用,但你不能不知道,就是這麼一種現狀。技術名詞大多晦澀難懂,不要死記硬背理解最重要,當你捅破那層窗戶紙,發現其實它也就那麼回事。

什麼是Sharding-JDBC

在介紹Sharding-JDBC之前,我們需要先說明下Sharding-Sphere。

Sharding-Sphere是一套開源的分佈式數據庫中間件解決方案組成的生態圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(計劃中)這3款相互獨立的產品組成。他們均提供標準化的數據分片、分佈式事務和數據庫治理功能,可適用於如Java同構、異構語言、容器、雲原生等各種多樣化的應用場景。

一、Sharding-JDBC

Sharding-JDBC是一個開源的分佈式數據庫中間件,它無需額外部署和依賴,舊代碼遷移成本幾乎為零。Sharding-JDBC 作為面向開發的微服務雲原生基礎類庫,完整地實現了分庫分表、讀寫分離和分佈式主鍵功能,並初步實現柔性事務。

它使用客戶端直連數據庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全兼容JDBC和各種ORM框架。

(1)適用於任何基於Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。

(2)基於任何第三方的數據庫連接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。

(3)支持任意實現JDBC規範的數據庫。目前支持MySQL,Oracle,SQLServer和PostgreSQL。

二、Sharding-Proxy

Sharding-Proxy定位為透明化的數據庫代理端,提供封裝了數據庫二進制協議的服務端版本,用於完成對異構語言的支持。目前先提供MySQL版本,它可以使用任何兼容MySQL協議的訪問客戶端(如:MySQL Command Client, MySQL Workbench等)操作數據,對DBA更加友好。

畫外音:分佈式數據庫中間件可以歸結為Client模式和Proxy模式。

可以不會 ,不能不知的SpringBoot+Sharding-JDBC分庫分表項目實戰

三、常用Client模式和Proxy模式

Client模式屬於客戶端直連方案。此方案的優勢在於輕便、兼容性、性能以及對DBA影響小。

Proxy模式屬於中間層方案,在應用程序和MySQL之間搭建一層Proxy。中間層介於應用程序與數據庫間,需要做一次轉發,而基於JDBC協議並無額外轉發,直接由應用程序連接數據庫,性能上有些許優勢。這裡並非說明中間層一定不如客戶端直連,除了性能,需要考慮的因素還有很多,中間層更便於實現監控、數據遷移、連接管理等功能。

Client模式:阿里的TDDL、噹噹網的sharding-jdbc、Cobar-Client

Proxy模式:阿里的cobar、民間組織的MyCAT、MySQL-Proxy、Amoeba for MySQL、Atlas(360)、MaxScale

面試常問的幾個問題

一、為什麼要分庫分表

關係型數據庫以MySQL為例,單機的存儲能力、連接數是有限的,它自身就很容易會成為系統的瓶頸。當單表數據量在百萬以裡時,我們還可以通過添加從庫、優化索引提升性能。一旦數據量朝著千萬以上趨勢增長,再怎麼優化數據庫,很多操作性能仍下降嚴重。為了減少數據庫的負擔,提升數據庫響應速度,縮短查詢時間,這時候就需要進行分庫分表。

二、如何分庫分表

分庫分表就是要將大量數據分散到多個數據庫中,使每個數據庫中數據量小響應速度快,以此來提升數

據庫整體性能。核心理念就是對數據進行切分(Sharding),以及切分後如何對數據的快速定位與整合。

針對數據切分類型,大致可以分為:垂直(縱向)切分和水平(橫向)切分兩種。

1、垂直分片

• 按照業務拆分的方式稱為垂直分片,又稱為縱向拆分,它的核心理念是專庫專用。在拆分之前,一個數據庫由多個數據表構成,每個表對應著不同的業務。而拆分之後,則是按照業務將表進行歸類,分佈到不同的數據庫中,從而將壓力分散至不同的數據庫。下圖展示了根據業務需要,將用戶表和訂單表垂直分片到不同的數據庫的方案。

可以不會 ,不能不知的SpringBoot+Sharding-JDBC分庫分表項目實戰

2、水平切分

• 水平分片又稱為橫向拆分。相對於垂直分片,它不再將數據根據業務邏輯分類,而是通過某個字段(或某幾個字段),根據某種規則將數據分散至多個庫或表中,每個分片僅包含數據的一部分。例如:根據主鍵分片,偶數主鍵的記錄放入0庫(或表),奇數主鍵的記錄放入1庫(或表)

可以不會 ,不能不知的SpringBoot+Sharding-JDBC分庫分表項目實戰

四、課程大綱

可以不會 ,不能不知的SpringBoot+Sharding-JDBC分庫分表項目實戰

通過以上內容,大家對Sharding-JDBC有了新的瞭解,如果你實戰中想要體驗分佈式開發新技能,可以參與到我們的新項目實戰中!

課程上新Q&A

1. 適合人群:

SpringBoot 基礎

2. 使用的版本號是?

SpringBoot 2.1.1

3. 沒有Spring Boot基礎怎麼辦?

需要先學習Spring Boot基礎(從零開始學SpringBoot)【可以在實訓邦學習

4. 現在的學習資料和視頻大多都是1.4、1.5的,2.0比較少,對於學習有影響嘛?

(1)1.0版本到2.0版本的跨越,主要是新特性的增加,舊的特性還是一樣的,學習完1.0版本的,升級到2.0版本是比較容易的。

(2)阿里現在有些項目還是使用1.4.7和1.5.8版本的,對於實際項目還是穩定為主,而不是追求最新的。

(3)官網1.X的版本也有在維護,目前最新版本是1.5.18。



分享到:


相關文章: