【轉】tair與redis比較總結

1. Tair總述

1.1 系統架構

    一個Tair集羣主要包括3個必選模塊:configserver、dataserver和client,一個可選模塊:invalidserver。一般狀況下,一個集羣中包含2臺configserver及多臺dataServer。兩臺configserver互爲主備並經過維護和dataserver之間的心跳獲知集羣中存活可用的dataserver,構建數據在集羣中的分佈信息(對照表)。dataserver負責數據的存儲,並按照configserver的指示完成數據的複製和遷移工做。client在啓動的時候,從configserver獲取數據分佈信息,根據數據分佈信息和相應的dataserver交互完成用戶的請求。invalidserver主要負責對等集羣的刪除和隱藏操做,保證對等集羣的數據一致。redis

    從架構上看,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) 插件:在接受請求的時候處理一些自定義功能ide

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.redis目前研究人員比較少,社區不是很活躍。

5.3 redis優點

a.在單節點的性能比較方面,redis是性能比tair高大概1/5

b.redis目前研究人員比較多,社區比較活躍。

c.在支持多種數據結構方面tair沒有redis支持的全面。

5.4 redis弱勢

a.目前發佈版不支持分佈式,測試版支持,測試版對分佈式支持比較弱,是用主備支持高可能,沒有副本。

b.容災性相比tair弱,緣由是redis的分佈式不支持多副本。

相關文章
相關標籤/搜索