1. 程式人生 > >Sharding-JDBC 3.x 原理篇之基本介紹(一)

Sharding-JDBC 3.x 原理篇之基本介紹(一)

簡介

Sharding-JDBC是噹噹開源的資料庫水平切分的中介軟體,其代表了客戶端類的分庫分表技術框架(這一點與MyCat不同,MyCat本質上是一種資料庫代理)。Sharding-JDBC定位為輕量級資料庫驅動,由客戶端直連資料庫,以jar包形式提供服務,未使用中間層,無需額外部署,無其他依賴,業務系統開發人員與資料庫運維人員無需改變原有的開發與運維方式。因此Sharding-JDBC即為增強版的JDBC驅動,可以實現舊程式碼遷移零成本的目標。 目前社群較為活躍。目前已廣泛應用於現各大網際網路公司。通過社群得知,Sharding-JDBC的作者已去京東做全職的Sharding-JDBC開發,相信未來Sharding-JDBC社群的發展將會更好。

功能介紹

目前Sharding-JDBC共有3個主要模組,分別為Sharding-JDBC、Sharding-Proxy、Sharding-Sidecar

Sharding-JDBC

定位為輕量級Java框架,在Java的JDBC層提供的額外服務。 它使用客戶端直連資料庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全相容JDBC和各種ORM框架。

  • 適用於任何基於Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 基於任何第三方的資料庫連線池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
  • 支援任意實現JDBC規範的資料庫。目前支援MySQL,Oracle,SQLServer和PostgreSQL。 在這裡插入圖片描述

Sharding-Proxy

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

  • 嚮應用程式完全透明,可直接當做MySQL使用。
  • 適用於任何相容MySQL協議的客戶端。 在這裡插入圖片描述

Sharding-Sidecar

定位為Kubernetes或Mesos的雲原生資料庫代理,以DaemonSet的形式代理所有對資料庫的訪問。 通過無中心、零侵入的方案提供與資料庫互動的的齧合層,即Database Mesh,又可稱資料網格。

Database Mesh的關注重點在於如何將分散式的資料訪問應用與資料庫有機串聯起來,它更加關注的是互動,是將雜亂無章的應用與資料庫之間的互動有效的梳理。使用Database Mesh,訪問資料庫的應用和資料庫終將形成一個巨大的網格體系,應用和資料庫只需在網格體系中對號入座即可,它們都是被齧合層所治理的物件。 在這裡插入圖片描述

各大版本間的區別與變化

1.x

Sharding-JDBC是一款基於JDBC的資料庫中介軟體產品,對Java的應用程式無任何改造成本,只需配置分片規則即可無縫整合進遺留系統,使系統在資料訪問層直接具有分片化和分散式治理的能力。

Sharding-JDBC 1.x關注SQL相容性、分庫分表、讀寫分離、分散式主鍵、柔性事務等分片功能;Sharding-JDBC 2.x提供了全新的Orchestration模組,關注資料庫和資料庫訪問層應用的治理。2.0.0在治理方面的主要更新是:

配置動態化。可以通過zookeeper或etcd作為註冊中心動態修改資料來源以及分片規則。 資料治理。提供熔斷資料庫訪問程式對資料庫的訪問和禁用從庫的訪問的能力。 跟蹤系統支援。可以通過sky-walking等基於Opentracing協議的APM系統中檢視Sharding-JDBC的呼叫鏈,並提供sky-walking的自動探針。 提供Sharding-JDBC的spring-boot-starter。

2.x

通過2.x提供的資料治理能力,sharding-jdbc的架構圖是:

在這裡插入圖片描述

2.x沿用了1.x的SQL解析、SQL路由、SQL改寫、SQL執行以及結果歸併的這一套分片化體系。與1.x的最大區別是增加了為資料治理使用的註冊中心模組,目前支援最常用的zookeeper和etcd兩種註冊中心的實現。Sharding-JDBC對分散式配置、分散式治理以及呼叫鏈路追蹤分析這幾個分散式應用的幾個核心關注點進行了實現,與服務治理框架類似,資料庫訪問層的治理可以提供更加細粒度的層級進行熔斷等操作。

配置動態化將Sharding-JDBC的配置資訊放入註冊中心。Sharding-JDBC的配置較為靈活,同時支援Java Config、YAML、Spring名稱空間和Spring-boot-starter四種方式。配置動態化模組將不同的配置方式統一轉換為JSON,並存儲至註冊中心,並通過監聽配置節點的來探知配置資訊的修改。配置資訊修改會觸發Sharding-JDBC資料來源的重建,可以在不重啟應用的前提下重新整理資料來源配置,以動態增減資料庫和修改分片策略。

資料治理部分,Sharding-JDBC目前主要提供熔斷和禁用相關的能力,未來會做進一步的擴充套件。熔斷是針對資料庫訪問的應用,可以通過設定註冊中心相關節點達到熔斷某一執行中的應用對資料庫的訪問,而不間斷其其他行為。在實際應用場景中,對於某些對整體資料庫帶來操作壓力的服務,可以採用該方式減輕資料庫的壓力,而相關服務會自動降級,所有對資料庫的訪問將返回空結果集,或通過訂閱異常的方式自定義降級行為。禁用功能主要是針對於讀寫分離中的從庫,Sharding-JDBC支援可支援分庫分表+讀寫分離或獨立使用讀寫分離的兩種方式。讀寫分離目前採用一主多從的方式,可以通過對某個從庫的禁用以做到從庫的不停機動態切換。

和服務化呼叫鏈類似,資料庫訪問同樣需要採集、追蹤和分析其呼叫鏈路。Sharding-JDBC完全遵守Opentracing協議,將資料庫的分片SQL和資料來源傳送至支援Opentracing協議的APM產品。Sharding-JDBC還與sky walking深度合作,提供了sky walking的自動探針,可以讓使用Sharding-JDBC的應用自動將呼叫鏈路追蹤對接至任何標準系統。

本次2.0版本的開發,受到了數人云的大力支援,他們不但貢獻了Sharding-JDBC的核心程式碼,還提供了hawk的統一配置中心平臺,也會於近期開源。通過對Sharding-JDBC註冊中心的讀寫,提供了對配置的圖形化介面支援。Hawk的架構圖如下: 在這裡插入圖片描述

著名的apm開源軟體Sky-walking也將於近期採用Sharding-JDBC作為其底層儲存追蹤日誌的儲存引擎。整合了Sharding-JDBC作為儲存引擎的Sky-walking架構圖如下: 在這裡插入圖片描述

Sharding-JDBC將與配置中心hawk,APM的sky-walking一起打造分散式服務的生態圈。

3.x

Sharding-Sphere正式釋出

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

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

Sharding-Sphere家族都有誰?

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