天天看點

Tair學習

一.簡介

    Tair是一個高性能、分布式、可擴充、高可靠的Key-Value nosql結構存儲系統,專注于高速緩存場景。

    Tair有三種類型mdb,ldb,rdb:

    (1) mdb是定位于cache緩存,類似于memcache的一個支援kv 記憶體緩存架構

    (2) rdb是 定位于cache緩存,采用了redis的記憶體存儲結構的一個支援kv、list等複雜資料結構的緩存架構

    (3) ldb是一個定位于高性能存儲,并可選擇内嵌mdb cache加速,這種情況下cache與持久化存儲的資料一緻性由tair進行維護,支援kv及分級key存儲,資料排序的緩存架構

    其中,mdb可用于高速緩存或記憶體存儲,rdb可用于高速緩存,ldb可用于持久存儲。

Tair學習

二.基本概念

1.configID

    唯一辨別一個tair叢集,每個叢集都有一個對應的configID,在目前的大部分應用情況下configID是存放在diamond中的,對應了該叢集的configserver位址和groupname。業務在初始化tairclient的時候需要配置此ConfigID。

2.Namespace

    又稱area,是tair中配置設定給應用的一個記憶體或者持久化存儲區域,可以認為應用的資料存在自己的namespace中。支援不同的資料使用相同的key而内容不沖突。

3.quota配額

    對應了每個namespace儲存區的大小限制,超過配額後資料将面臨最近最少使用(LRU)的淘汰。

4.配額計算

    配額大小直接影響資料的命中率和資源利用效率,業務方需要給出一個合适的值,通常的計算方法是評估在保證一定命中率情況下所需要的記錄條數,這樣配額大小即為:記錄條數*平均單條記錄大小。

5.ExpireTime過期時間

    expiredTime 是指資料的過期時間,當超過過期時間之後,資料将對應用不可見,這個設定同樣影響到應用的命中率和資源使用率。不同的存儲引擎有不同的政策清理掉過期的資料。調用接口時,expiredTime機關是秒。可以是相對時間(比如:30s),也可以是絕對時間(時間戳,比如:當天23時,轉換成距離1970-1-1 00:00:00的秒數)。

    (1) 小于0,不更改之前的過期時間;

    (2) 如果不傳或者傳入0,則表示資料永不過期;

    (3) 大于0小于目前時間戳是相對時間過期;

    (4) 大于目前時間戳是絕對時間過期;

6.version

    Tair中存儲的每個資料都有版本号,版本号在每次更新後都會遞增,相應的,在Tair put接口中也有此version參數,這個參數是為了解決并發更新同一個資料而設定的,類似于樂觀鎖。 很多情況下,更新資料是先get,修改get回來的資料,然後put回系統。如果有多個用戶端get到同一份資料,都對其修改并儲存,那麼先儲存的修改就會被後到達的修改覆寫,進而導緻資料一緻性問題,在大部分情況下應用能夠接受,但在少量特殊情況下,這個是我們不希望發生的。

三.Tair架構

    一個Tair叢集主要包括3個必選子產品:ConfigServer、DataServer和Client,一個可選子產品:InvalidServer。

    通常情況下,一個叢集中包含2台configserver及多台dataServer。兩台configserver互為主備并通過維護和dataserver之間的心跳獲知叢集中存活可用的dataserver,建構資料在叢集中的分布資訊(對照表)。dataserver負責資料的存儲,并按照configserver的訓示完成資料的複制和遷移工作。client在啟動的時候,從configserver擷取資料分布資訊,根據資料分布資訊和相應的dataserver互動完成使用者的請求。invalidserver主要負責對等叢集的删除和隐藏操作,保證對等叢集的資料一緻。

Tair學習

1.ConfigServer功能

    (1) 通過維護和DataServer心跳來獲知叢集中存活節點的資訊

    (2) 根據存活節點的資訊來建構資料在叢集中的分布表

    (3) 提供資料分布表的查詢服務

    (4) 排程DataServer之間的資料遷移、複制

2.DataServer功能

    (1) 提供存儲引擎

    (2) 接受Client的put/get/remove等操作

    (3) 執行資料遷移,複制等

    (4) 插件:在接受請求的時候處理一些自定義功能

    (5) 通路統計

3.InvalidServer功能

    (1) 接收來自Client的invalid/hide等請求後,對屬于同一組的叢集(雙機房獨立叢集部署方式)做delete/hide操作,保證同一組叢集的一緻

    (2) 叢集斷網之後的,髒資料清理

    (3) 通路統計

4.Client功能

    (1) 在應用端提供通路Tair叢集的接口

    (2) 更新并緩存資料分布表和InvalidServer位址等

    (3) LocalCache,避免過熱資料通路影響tair叢集服務

    (4) 流控

四.技術點

1. 對照表【别名路由表】

    (1) 資料劃分:key/hash

    (2) 建表規則:考慮各個機器的負載均衡,考慮機架、叢集

    (3) 表重建和同步:重建就意味着會有遷移,有同步、異步遷移模式【主要是依賴于binlog】

    (4) Bucket【桶】:資料幾批會同時路由到一條機器

    (5) Version:每次表重建都會有個版本

    (6) 擴充性:有了對照表,可以随意擴充容量

    傳統的路由方法通常是将key的hash值對機器取模,這樣實作簡單,但是在伺服器數量發生變化時對原有分布沖擊很大。Tair中采用對照表的方法改進這個問題:

    key的hash值不是對伺服器節點數取模,而是和一個固定的數取模,這個數通常遠大于機器數,固定數範圍内的每個值都與一個節點相對應,一台實體機器可以和多個值對應。這是一緻性hash的一種變型。

2. 資料防丢:

    (1) binlog

    (2) 單備份

    (3) 雙備份

    (4) 雙機房雙備份

    (5) ConfigServer主備結構

3. 熱點:

    (1) load cache

    (2) 用戶端本地緩存

    (3) 某台server流控

    (4) 多執行個體

4. 資料複制

    (1) 對用戶端透明:就是說用戶端不應該知道這件事,且不應該對用戶端産生影響

    (2) 用戶端隻寫主DS:底層會進行複制同步

    (3) 由主DS負責複制

繼續閱讀