轉自:https://blog.csdn.net/farphone/article/details/53522383
1. Tair總述
1.1 系統架構
一個Tair叢集主要包括3個必選子產品:configserver、dataserver和client,一個可選子產品:invalidserver。通常情況下,一個叢集中包含2台configserver及多台dataServer。兩台configserver互為主備并通過維護和dataserver之間的心跳獲知叢集中存活可用的dataserver,建構資料在叢集中的分布資訊(對照表)。dataserver負責資料的存儲,并按照configserver的訓示完成資料的複制和遷移工作。client在啟動的時候,從configserver擷取資料分布資訊,根據資料分布資訊和相應的dataserver互動完成使用者的請求。invalidserver主要負責對等叢集的删除和隐藏操作,保證對等叢集的資料一緻。
從架構上看,configserver的角色類似于傳統應用系統的中心節點,整個叢集服務依賴于configserver的正常工作。但實際上相對來說,tair的configserver是非常輕量級的,當正在工作的伺服器當機的時候另外一台會在秒級别時間内自動接管。而且,如果出現兩台伺服器同時當機的最惡劣情況,隻要應用伺服器沒有新的變化, tair依然服務正常。而有了configserver這個中心節點,帶來的好處就是應用在使用的時候隻需要配置configserver的位址(現在可以直接配置Diamond key),而不需要知道内部節點的情況。
1.1.1 ConfigServer的功能
1) 通過維護和dataserver心跳來獲知叢集中存活節點的資訊
2) 根據存活節點的資訊來建構資料在叢集中的分布表。
3) 提供資料分布表的查詢服務。
4) 排程dataserver之間的資料遷移、複制。
1.1.2 DataServer的功能
1) 提供存儲引擎
2) 接受client的put/get/remove等操作
3) 執行資料遷移,複制等
4) 插件:在接受請求的時候處理一些自定義功能
5) 通路統計
1.1.3 InvalidServer的功能
1) 接收來自client的invalid/hide等請求後,對屬于同一組的叢集(雙機房獨立叢集部署方式)做delete/hide操作,保證同一組叢集的一緻。
2) 叢集斷網之後的,髒資料清理。
3) 通路統計。
1.1.4 client的功能
1) 在應用端提供通路Tair叢集的接口。
2) 更新并緩存資料分布表和invalidserver位址等。
3) LocalCache,避免過熱資料通路影響tair叢集服務。
4) 流控
2.tair的使用場景
2.1 tair 的使用場景
2.1.1 Tair緩存使用的場景
1. 資料可以以key/value的形式存儲
2. 資料可以接受丢失
3. 通路速度要求很高
4. 單個資料大小不是很大,一般在KB級别
5. 資料量很大,并且有較大的增長可能性
6. 資料更新不頻繁
2.1.2 Tair持久化适用的場景
1. 資料可以以key/value的形式存儲
2. 資料需要持久化
3. 資料量很大,并且有較大的增長可能性
4. 單個資料大小不是很大,一般在KB級别
5. 資料的讀寫比例較高
2.2 不适Tair用的場景
1.對資料有查詢需求,比如對key的模糊查詢,或者根據value反查詢key等
2.單條資料很大
3.讀寫比例很低
3.tair與redis關系
3.1 功能對比
産品比較項 | Tair | REDIS |
開源情況 | 完全開源 | 完全開源 |
使用語言 | 伺服器端C++;用戶端支援C、JAVA、PHP等 | ANSI C語言編寫 ,提供多種語言(C/C++/JAVA/PHP等)的API |
分布式 | 支援 | 目前redis的3.0已經支援分布式式,特點是主從的方式支援即主從庫方式添加代理進行管理。3.0版本處于測試版 |
叢集 | 支援 | 不支援,3.0測試版支援 |
動态擴充 | 支援 | 不支援,3.0測試版支援 |
持久化 | 可配,fdb方式實作持久化 | 支援,快照及aof方式都支援 |
效率 | mdb 較高,fdb稍次 | 較高 |
容錯 | 支援,資料在寫入主節點後,會異步同步到輔節點;如果主節點不可用,則輔節點會自動接管為主節點;當有節點不可用時,能自動複制資料,保證資料的備份數。 | 支援,主從節點互為備份 |
緩存過期移除政策 | 支援 | 支援 |
緩存資料方式 | 持久化和非持久化兩種,前者和memcached類似的緩存資料方式。 | 支援,一是 key/value,一是關系資料庫。 |
吞吐量 | 每秒高達66000次(mdb),fdb時,吞吐量減半 | 每秒高達60000次 |
KEY/VALUE | key :1024個字元;value: 1M個位元組。 | key :254個字元;value: 高達1G個位元組。 |
單點故障 | 已解決,通過備份 | 存在 |
記憶體管理 | 支援 | 支援 |
其他資料結構 | 支援redis的記憶體存儲結構。支援k/v,list,hash,set等資料結構。 | 本身支援持k/v,list,hash,set,sortedset等資料結構 |
跨機房管理 | 支援 | 不支援 |
多叢集管理 | 支援 | 不支援 |
是否支援副本 | 支援 | 不支援 |
使用情況 | 國内淘寶網 在最大規模的使用 | 國内新浪微網誌,以前曾出現過故障 |
3.2 關系總結
tair及redis內建關系:Tair是淘寶開源的分布式KV緩存系統,内部将功能子產品化,抽離出底層存儲細節,可以接入不同的存儲引擎。redis是一個開源的、高效的key-value存儲,提供了strings、hashs、lists、sets、sorted sets等多種進階資料結構。redis作為Tair的存儲引擎接入,稱為rdb,rdb從redis繼承了豐富的操作,包括list、hash、sorted set、set(與mdb相比,list不再那麼ugly)。
總結:rdb:是tair內建從redis繼承了豐富的操作,包括list、hash、sorted set、set(與mdb相比,list不再那麼ugly),Tair将Redis的存儲部分抽離出來,作為非持久化的存儲引擎rdb(目前代碼裡面沒有rdb代碼,即沒有開源);
4 tair與redis叢集管理
4.1 redis叢集介紹
首先增加一個代理端,作用是檢測處理應用請求,如果是讀代理會嘗試在tair及redis兩個系統查找資料,傳回給應用;如果是寫資料代理直接将資料寫入tair。
4.1.1 目前readis系統
4.1.2 redis目前測試版本的結構
4.2 tair 目前現狀
4.2.1 tair支援的叢集一個機房
支援副本,管理結點是主從,資料結點是多個,不同資料結點之間沒有主從關系,有副本。
4.2.2 tair雙機房單叢集單份
雙機房單叢集單備份數是指,該Tair叢集部署在兩個機房中(也就是該Tair叢集的機器分别在兩個機房), 資料存儲份數為1, 該類型叢集部署示意圖如下所示。資料伺服器(Dataserver)分布在兩個機房中,他們都屬于同一叢集
4.2.3 雙機房獨立叢集是指,在兩個機房中同時部署2個獨立的Tair叢集,這兩個叢集沒有直接關系。下圖是一個典型的雙機房獨立集部署示意圖,可以看到,cm3和cm4各有一個完整的tair叢集(2個configserver+多個dataserver)。圖中還多了一個invalidserver的角色, invalidserver接收用戶端的invalid或者hide請求後,會對各機房内的叢集進行delete或者hide操作,以此保障Tair中的資料和後端資料源保持一緻的。
4.2.3 雙機房單叢集雙份
雙機房單叢集雙份,是指一個Tair叢集部署在2個機房中,資料儲存2份,并且同一資料的2個備份不會放在同一個資料伺服器上。根據資料分布政策的不同,還可以将同一份資料的不同備份分布到不同的機房上。該類型的叢集部署方式與雙機房單叢集單份資料的部署方式一樣。其不同之處,資料儲存份數不一樣。該類型叢集部署方式示意圖如下圖所示,資料伺服器分别部署在兩個不同的機房裡,所有的資料伺服器都被相同的配置伺服器管理,在邏輯上,他們構成一個獨立的叢集。
4.2.4 雙機房主備叢集
這種部署方式中,存在一個主叢集和一個備份叢集,分别在兩個機房中。如下圖所示,不妨假設CM3中部署的是主叢集,CM4中部署的是備份叢集。那麼,在正常情況下,使用者隻使用主叢集,讀寫資料都與主叢集互動。主備叢集會自動同步資料(不需要業務去更新兩邊),保證兩個機房資料的最終一緻性。當一個機房發生故障後,備叢集會自動切換成主叢集,提供服務,保證系統可用性。
5 tair與redis比較總結
5.1 tair優勢
a.在分布式叢集支援方面tair支援副本,支援多種叢集結構,如:一機房一個叢集、雙 機房單叢集單份、雙機房獨立叢集、雙機房單叢集雙份、雙機房主備叢集;
b.對于讀寫性能根據結點添加對線性上升,原因是各個結點之間是沒有關系,節點增多相應性能提升。
c.高可用比較強,任何小于副本數結點挂掉,不會影響正常業務。
e.淘寶在多個實際應用場景應用,滿足不同業務需求。
F.支援跨機房資料分布。
5.2 tair弱勢
a.在單節點的性能比較方面,redis是性能比tair高大概1/5
b.tair目前研究人員比較少,社群不是很活躍。
5.3 redis優勢
a.在單節點的性能比較方面,redis是性能比tair高大概1/5
b.redis目前研究人員比較多,社群比較活躍。
c.在支援多種資料結構方面tair沒有redis支援的全面。
5.4 redis弱勢
a.目前釋出版不支援分布式,測試版支援,測試版對分布式支援比較弱,是用主備支援高可能,沒有副本。
b.容災性相比tair弱,原因是redis的分布式不支援多副本。