一文看懂分佈式數據庫中間件—sharding-sphere的前世今生

概述

當我們的業務發展到一定程度,分庫分表是一種必然的要求,分庫可以實現資源隔離,分表則可以降低單表數據量,提高訪問效率。

分庫分表的技術方案,一般有兩種理念:

  • 集中式的Proxy,實現MySQL客戶端協議,使用戶無感知
  • 分佈式的Proxy,在代碼層面進行增強,實現一個路由程序

這兩種方式是各有利弊的,集中式Proxy的好處是業務沒有感知,一切交給DBA把控,分佈式的Proxy其支持的語言有限,例如ShardingShpere-JDBC就只支持Java。

目前我們在通過MySQL的中間件(不改應用)實現讀寫分離,都可以看到有一大堆產品:Atlas, dbproxy, Ceus, Amoeba, Cobar,MyCat, ProxySQL...這些中間件哪個比較好用呢,這裡蓋總推薦了Sharding-Shpere ,京東維護的,所以今天我就主要介紹一下Sharding-Shper了。


一、簡介

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

ShardingSphere定位為關係型數據庫中間件,旨在充分合理地在分佈式的場景下利用關係型數據庫的計算和存儲能力,而並非實現一個全新的關係型數據庫。它通過關注不變,進而抓住事物本質。關係型數據庫當今依然佔有巨大市場,是各個公司核心業務的基石,未來也難於撼動,這個中間件更關注在原有基礎上的增量,而非顛覆。

官網:https://shardingsphere.apache.org/index_zh.html

文檔:https://shardingsphere.apache.org/document/

Github:https://github.com/sharding-sphere

一文看懂分佈式數據庫中間件—sharding-sphere的前世今生

一文看懂分佈式數據庫中間件—sharding-sphere的前世今生

一文看懂分佈式數據庫中間件—sharding-sphere的前世今生


二、三大核心模塊

三大核心模塊分別是Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar。

1、Sharding-JDBC

Sharding-JDBC是ShardingSphere的第一個產品,也是ShardingSphere的前身。 它定位為輕量級Java框架,在Java的JDBC層提供的額外服務。它使用客戶端直連數據庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全兼容JDBC和各種ORM框架。

  • 適用於任何基於JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 支持任何第三方的數據庫連接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
  • 支持任意實現JDBC規範的數據庫。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92標準的數據庫。

Sharding-JDBC可以通過Java,YAML,Spring命名空間和Spring Boot Starter四種方式配置。

一文看懂分佈式數據庫中間件—sharding-sphere的前世今生


2、Sharding-Proxy

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

  • 嚮應用程序完全透明,可直接當做MySQL/PostgreSQL使用。
  • 適用於任何兼容MySQL/PostgreSQL協議的的客戶端。
一文看懂分佈式數據庫中間件—sharding-sphere的前世今生

3、Sharding-Sidecar

Sharding-Sidecar是ShardingSphere的第三個產品,目前仍然在規劃中。 定位為Kubernetes或Mesos的雲原生數據庫代理,以DaemonSet的形式代理所有對數據庫的訪問。

通過無中心、零侵入的方案提供與數據庫交互的的齧合層,即Database Mesh,又可稱數據網格。 Database Mesh的關注重點在於如何將分佈式的數據訪問應用與數據庫有機串聯起來,它更加關注的是交互,是將雜亂無章的應用與數據庫之間的交互有效的梳理。使用Database Mesh,訪問數據庫的應用和數據庫終將形成一個巨大的網格體系,應用和數據庫只需在網格體系中對號入座即可,它們都是被齧合層所治理的對象。

一文看懂分佈式數據庫中間件—sharding-sphere的前世今生



三、sharding-sphere不同產品對比

ShardingSphere的3個產品的數據分片主要流程是完全一致的。 核心由SQL解析 => 執行器優化 => SQL路由 => SQL改寫 => SQL執行 => 結果歸併的流程組成

一文看懂分佈式數據庫中間件—sharding-sphere的前世今生

那他們之間有什麼區別呢?

Sharding-JDBC的優勢在於對Java應用的友好度。

Sharding-Proxy的優勢在於對異構語言的支持,以及為DBA提供可操作入口。

Sharding-Sidecar的優勢在於對Kubernetes和Mesos的雲原生支持。

一文看懂分佈式數據庫中間件—sharding-sphere的前世今生


覺得有用的朋友多幫忙轉發哦!後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~

一文看懂分佈式數據庫中間件—sharding-sphere的前世今生


分享到:


相關文章: