ShardingSphere中配置體系是如何設(shè)計(jì)的

這篇文章給大家分享的是有關(guān)ShardingSphere中配置體系是如何設(shè)計(jì)的的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)長(zhǎng)期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為響水企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站建設(shè),響水網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

什么是行表達(dá)式?

行表達(dá)式是 ShardingSphere 中用于實(shí)現(xiàn)簡(jiǎn)化和統(tǒng)一配置信息的一種工具,在日常開發(fā)過程中應(yīng)用得非常廣泛。它的使用方式非常直觀,只需要在配置中使用 ${expression} 或 $->{expression} 表達(dá)式即可。

基于行表達(dá)式語法,${begin..end} 表示的是一個(gè)從"begin"到"end"的范圍區(qū)間,而多個(gè) ${expression} 之間可以用"."符號(hào)進(jìn)行連接,代表多個(gè)表達(dá)式數(shù)值之間的一種笛卡爾積關(guān)系。

類似場(chǎng)景也可以使用枚舉的方式來列舉所有可能值。行表達(dá)式也提供了 ${[enum1, enum2,…, enumx]} 語法來表示枚舉值,所以"ds${0..1}.user${0..1}"的效果等同于"ds${[0,1]}.user${[0,1]}"。

由于 ${expression} 與 Spring 本身的屬性文件占位符沖突,而 Spring 又是目前主流的開發(fā)框架,因此在正式環(huán)境中建議你使用 $->{expression} 來進(jìn)行配置。

ShardingSphere有哪些核心配置?

對(duì)于分庫分表、讀寫分離操作而言,配置的主要任務(wù)是完成各種規(guī)則的創(chuàng)建和初始化。配置是整個(gè)ShardingSphere的核心,也是我們?nèi)粘i_發(fā)過程中的抓藥工作??梢哉f,只要我們掌握了ShardingSphere的核心配置項(xiàng),就相當(dāng)于掌握了這個(gè)框架的使用方法。那么,ShardingSphere 有哪些核心配置呢?這里以分片引擎為例介紹最常用的幾個(gè)配置項(xiàng),而與讀寫分離、數(shù)據(jù)脫敏、編排治理相關(guān)的配置項(xiàng)我們會(huì)在介紹具體的應(yīng)用場(chǎng)景時(shí)再做展開。

ShardingRuleConfiguration

DataSource是我們使用ShardingSphere的入口,創(chuàng)建DataSource的過程中使用到了一個(gè)ShardingDataSourceFactory類,這個(gè)工廠類的構(gòu)造函數(shù)中需要傳入一個(gè)ShardingRuleConfiguration對(duì)象。顯然,從命名上看,這個(gè)ShardingRuleConfiguration就是用于分片規(guī)則的配置入口。

ShardingRuleConfiguration中所需要配置的規(guī)則比較多,下面通過一張圖例來進(jìn)行簡(jiǎn)單說明

ShardingSphere中配置體系是如何設(shè)計(jì)的

事實(shí)上,對(duì)于ShardingRuleConfiguration而言,必須要設(shè)置的只有一個(gè)配置項(xiàng),即TableRuleConfiguration。

TableRuleConfiguration

從命名上看,TableRuleConfiguration是表分片規(guī)則配置,但事實(shí)上,這個(gè)類同時(shí)包含了對(duì)分庫和分表兩種場(chǎng)景的設(shè)置,TableRuleConfiguration包含很多重要的配置項(xiàng):

  • actualDataNodes:代表真實(shí)的數(shù)據(jù)節(jié)點(diǎn),由數(shù)據(jù)源名+表名組成,支持行表達(dá)式。例如:ds${0..1}.user${0..1}

  • databaseShardingStrategyConfig:代表分表策略,如果不設(shè)置也會(huì)使用默認(rèn)分表策略,這里的默認(rèn)分表策略同樣來自ShardingRuleConfiguration中的defaultTableShardingStrategyConfig配置

  • keyGeneratorConfig:代表分布式環(huán)境下的自增列生成器配置,ShardingSphere中集成了雪花算法等分布式ID的生成器實(shí)現(xiàn)。

ShardingStrategyConfiguration

dataBaseShardingStrategyConfig和tableShardingStrategyConfig的類型都是一個(gè)ShardingStrategyConfiguration對(duì)象。在ShardingSphere中,ShardingStrategyConfiguration實(shí)際上是一個(gè)空接口,存在一系列的實(shí)現(xiàn)類,其中的每個(gè)實(shí)現(xiàn)類都代表一種分片策略:

ShardingSphere中配置體系是如何設(shè)計(jì)的

在這些具體的分片策略中,通常需要指定一個(gè)分片列 shardingColumn 以及一個(gè)或多個(gè)分片算法 ShardingAlgorithm。

KeyGeneratorConfiguration

可以想象,對(duì)于一個(gè)自增列而言,KeyGeneratorConfiguration 中首先需要指定一個(gè)列名 column。同時(shí),因?yàn)?ShardingSphere 中內(nèi)置了一批自增列的實(shí)現(xiàn)機(jī)制(例如雪花算法 SNOWFLAKE 以及通用唯一識(shí)別碼 UUID),所以需要通過一個(gè) type 配置項(xiàng)進(jìn)行指定

ShardingSphere提供了哪些配置方式?

ShardingSphere提供了4種配置方式。用于不同的使用場(chǎng)景:

  • Java代碼配置

  • Yaml配置

  • Spring命名空間配置

  • Spring Boot配置

[詳細(xì)配置看官網(wǎng)](https://shardingsphere.apache.org/document/legacy/4.x/document/cn/manual/sharding-jdbc/configuration/ "詳細(xì)配置看官網(wǎng)")

ShardingSphere的配置體系是如何實(shí)現(xiàn)的?

ShardingRuleConfiguration配置體系

對(duì)于ShardingSphere而言,配置體系的作用本質(zhì)上就是用來初始化DataSource等JDBC對(duì)象。例如,ShardingDataSourceFactory就是基于傳入的數(shù)據(jù)源Map、ShardingRuleConfiguration以及Properties來創(chuàng)建一個(gè)ShardingDataSource對(duì)象:

public final class ShardingDataSourceFactory {

    public static DataSource createDataSource(
            final Map<String, DataSource> dataSourceMap, final ShardingRuleConfiguration shardingRuleConfig, final Properties props) throws SQLException {
        return new ShardingDataSource(dataSourceMap, new ShardingRule(shardingRuleConfig, dataSourceMap.keySet()), props);
	} 
}

在 ShardingSphere 中,所有規(guī)則配置類都實(shí)現(xiàn)了一個(gè)頂層接口 RuleConfiguration。RuleConfiguration 是一個(gè)空接口,ShardingRuleConfiguration 就是這個(gè)接口的實(shí)現(xiàn)類之一,專門用來處理分片引擎的應(yīng)用場(chǎng)景。下面這段代碼就是 ShardingRuleConfiguration 類的實(shí)現(xiàn)過程:

public final class ShardingRuleConfiguration implements RuleConfiguration {
    //表分片規(guī)則列表
    private Collection<TableRuleConfiguration> tableRuleConfigs = new LinkedList<>();
    //綁定表規(guī)則列表
    private Collection<String> bindingTableGroups = new LinkedList<>();
    //廣播表規(guī)則列表
    private Collection<String> broadcastTables = new LinkedList<>();
    //默認(rèn)數(shù)據(jù)源
    private String defaultDataSourceName;
    //默認(rèn)分庫策略
    private ShardingStrategyConfiguration defaultDatabaseShardingStrategyConfig;
    //默認(rèn)分表策略
    private ShardingStrategyConfiguration defaultTableShardingStrategyConfig;
    //默認(rèn)自增列值生成器
    private KeyGeneratorConfiguration defaultKeyGeneratorConfig;
    //讀寫分離規(guī)則
    private Collection<MasterSlaveRuleConfiguration> masterSlaveRuleConfigs = new LinkedList<>();
    //數(shù)據(jù)脫敏規(guī)則
    private EncryptRuleConfiguration encryptRuleConfig;
}

可以看到,ShardingRuleConfiguration 中包含的就是一系列的配置類定義,通過前面的內(nèi)容介紹,我們已經(jīng)明白了這些配置類的作用和使用方法。其中,核心的 TableRuleConfiguration 定義也比較簡(jiǎn)單,主要包含了邏輯表、真實(shí)數(shù)據(jù)節(jié)點(diǎn)以及分庫策略和分表策略的定義:

public final class TableRuleConfiguration {
    //邏輯表
    private final String logicTable;
    //真實(shí)數(shù)據(jù)節(jié)點(diǎn)
    private final String actualDataNodes;
    //分庫策略
    private ShardingStrategyConfiguration databaseShardingStrategyConfig;
    //分表策略
    private ShardingStrategyConfiguration tableShardingStrategyConfig;
    //自增列生成器
    private KeyGeneratorConfiguration keyGeneratorConfig;

    public TableRuleConfiguration(final String logicTable) {
        this(logicTable, null);
    }

    public TableRuleConfiguration(final String logicTable, final String actualDataNodes) {
        Preconditions.checkArgument(!Strings.isNullOrEmpty(logicTable), "LogicTable is required.");
        this.logicTable = logicTable;
        this.actualDataNodes = actualDataNodes;
    }
}

無論采用哪種配置方式,所有的配置項(xiàng)都是在這些核心配置類的基礎(chǔ)之上進(jìn)行封裝和轉(zhuǎn)換。最終生成ShardingRuleConfiguration,然后通過ShardingDataSourceFatory生成ShardingDataSource獲取連接。

感謝各位的閱讀!關(guān)于“ShardingSphere中配置體系是如何設(shè)計(jì)的”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

文章題目:ShardingSphere中配置體系是如何設(shè)計(jì)的
轉(zhuǎn)載注明:http://bm7419.com/article26/pcisjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、Google企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化