metadata 和 routing

來源:互聯網
上載者:User

標籤:ase   相關   分代   分析   源碼   rest   content   結構   uil   

雖然在剛開始源碼概述時把代碼分為分布式和資料兩部分,但是它們的界限並不明顯。之前這幾篇可以說是這兩部分的銜接。我們在快速接近資料(index)部分。本篇分析一下之前分析cluster遺留下的問題:Metadata與routing,雖然這兩部分的代碼在cluster中,但是卻直接和index相關。

metadata部分主要是和索引相關的一些中繼資料構建和操作。中繼資料部分主要包括別名中繼資料(AliasMetaData):索引別名相關,將索引通過別名映射到相關的路由上;索引中繼資料(IndexMetaData):索引相關的,如shard數目replica數目, 建立時間等;索引模板中繼資料(IndexTemplateMetaData):模板相關,如預設的mapping, aliases等 ;mapping中繼資料(MappingMetadata):mapping相關的中繼資料,如id,routing等;及RestoreMetadata和 SnapshortMetadata等。這些metadata囊括了索引相關的所有中繼資料,這些中繼資料都是叢集層級,我個人認為這也是這部分放到cluster的原因。

metadata是相關功能叢集層級的配置資訊,它們大都類似於資料類本身的邏輯並不複雜,都是由field和一些對field的set和get方法組成,但是它的有些field本身又是類。而且有些metadata類提供了更加複雜的資料操作方法,如MappingMetadata會有build及對於一些資料格式分析的方法。這裡簡單分析兩個進行說明。是IndexMetadata的部分fields:

可以看到就是一些index相關的中繼資料,很多都是使用中必須解除到的。如Mapping等。方法上也大多是get與set,並沒有太多複雜的邏輯。不同於IndexMetadata,MappingMetaData的filed則多數是內部分類,如所示:

這裡的id,routing和timestamp欄位都是內部類,因為這些欄位還包含其它邏輯,無法通過基礎資料型別 (Elementary Data Type)實現。而Mapping中的關鍵區段內容欄位對應則是一個壓縮字串(source),這是一個json格式的字串。因此MappingMetadata則包含了很多更複雜的方法用來解析source。

其它的metadata類跟著兩個非常類似就不再一一說明,有興趣的話請參考相關源碼。最後來看一下MetaData相關的service,這些service對外提供了對相關MetaData讀取和操作的介面。這裡以MappingMetaDataService為例做個簡單的說明,它的類圖如下所示:

MappingMetaDataService對外提供了MappingMetaData的更新,移除等相關操作,這些方法涉及到了索引的相關操作,這裡就不展開,在後面索引的分析中會有涉及。

以上就metadata的相關分析,這一部分自身不涉及太複雜的邏輯,複雜的邏輯都在service中,但是因為service的方法會牽扯到Index的操作,因此這裡就先簡單分析,後面索引的相關分析中再來仔細說明相關方法。

同MetaData類似,routing這一部分主要是叢集中索引的路由的相關中繼資料,但和MetaData不同的是,這一部分有階層。ShardRouting是最基本元素,由它構成index的IndexRoutingTable,最後由IndexRoutingTable構成叢集的RoutingTable。首先看看shardRouting,繼承關係如所示:

一個Routing本質上是一個可以序列化的XContent,ImmutableShardRount中是Routing中不可變的欄位及他們的set和get方法如id, version等。MutableShardRouting中主要是相關的shard操作,如重分配,primaryshard的變動等。一個shard的primary和所有的replica組成一個shardRoutingTable,它的部分代碼如下所示:

public class IndexShardRoutingTable implements Iterable<ShardRouting> {    final ShardShuffler shuffler;    final ShardId shardId;    final ShardRouting primary;    final ImmutableList<ShardRouting> primaryAsList;    final ImmutableList<ShardRouting> replicas;    final ImmutableList<ShardRouting> shards;    final ImmutableList<ShardRouting> activeShards;    final ImmutableList<ShardRouting> assignedShards;......}

ShardRoutingTable中記錄著一個shard所有狀態的replica。index由多個shard組成,因此IndexRoutingTable由ShardRoutingTable組成,代碼如下所示:

public class IndexRoutingTable implements Iterable<IndexShardRoutingTable> {    private final String index;    private final ShardShuffler shuffler;    // note, we assume that when the index routing is created, ShardRoutings are created for all possible number of    // shards with state set to UNASSIGNED    private final ImmutableOpenIntMap<IndexShardRoutingTable> shards;    private final ImmutableList<ShardRouting> allShards;    private final ImmutableList<ShardRouting> allActiveShards;.......}

最後所有的IndexRoutingTable組成了叢集的RoutingTable:

public class RoutingTable implements Iterable<IndexRoutingTable> {    public static final RoutingTable EMPTY_ROUTING_TABLE = builder().build();    private final long version;    // index to IndexRoutingTable map    private final ImmutableMap<String, IndexRoutingTable> indicesRouting;.........}

這是indexRoutingTable這條線,另外還有一條RoutingTable,那就是nodeRoutingTable,這條RoutingTable線記錄了每個節點上的shard的路由資訊,由shardRouting構成nodeRoutingTable,然由NodeRoutingTable構成NodesRoutingTable(叢集shardRouting)。

同所有是其它模組一樣,這些Routing的相關操作也是由service對外提供,另外這一部分還有以下shard操作的相關類如ShardIterator,ShardShuffle等。

總結:本篇從結構上對metadata和Routing部分進行了簡單說明,這兩部分串連著cluster和index。這裡的說明並沒有深入到方法層面,一則這裡的邏輯大部分很簡單,另外這些方法在後面的資料(index)部分的分析中會有涉及。 

 

metadata 和 routing

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.