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可用於持久存儲。


二.基本概念

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主要負責對等集羣的刪除和隱藏操作,保證對等集羣的數據一致。
 

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負責複製

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章