Tair分散式快取

  • 2019 年 10 月 10 日
  • 筆記

Tair是為了解決什麼問題而生?

Redis很好用,相比memcached多了很多數據結構,支援持久化。但是在很長一段時間裡,原生是不支援分散式的。後來就出現了很多redis集群類產品,Tair是其中勝出的優秀作品之一。

所以Tair的特性都是一些集群的特性,比如:容錯、解決單點故障、跨機房管理、多集群管理、支援副本等。總而言之,是redis的高可用版本。

Tair的架構

Tair的整體風格是簡約實用,包括三個必選模組:client、configserver和dataserver。一個可選模組:invalidserver。還有一個必要軟設施:一致性哈希演算法提供分散式的負載均衡計算。

client的作用

1. 在應用端提供訪問Tair集群的介面

2.更新並快取數據分布表和invalidserver 地址等 3. 本地快取,避免過熱數據訪問影響Tair集群服務

4. 流控

configserver的作用

1. 通過維護和dataserver心跳來獲取集群存活節點的資訊

2.通過存活節點的資訊來構建數據在集群中的分布表

3. 提供數據分布表的查詢服務

4. 調度dataserver之間的數據遷移、複製

dataserver的作用

1. 提供存儲引擎

2. 接受client和put、get、remove等操作

3. 執行數據遷移、複製等

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

5. 訪問統計

invallidserver的作用

1. 接收來自client和invalid、hide等請求後,對屬於同一組的集群(雙機房獨立集群部署方法)做delete、hide操作,保證同一組集群的一致

2.集群斷網之後的臟數據清理

3. 訪問統計

一致性哈希的作用

1. 增加和減少dataserver的時候,進行rehash重哈希。並在遷移過程中保持原數據對外提供服務

2. 負載均衡,並行多個key進行計算合併結果(mget)

Tair的使用場景

  1. 快取
  2. 分散式鎖
  3. 作為nosql資料庫,提供簡單類型存儲(K/V存儲,無複雜查詢)

Tair使用QA

1.Q:tair可以支援支援什麼類型?

A:內部是序列化成二進位的,就是說理論上支援任何類型。

2.Q:tair有mget的功能可以一次性返回多個結果,這個個數有上限嗎?

A:理論上沒有。實際使用中建議1次在100個以下。因為多個請求要等所有的結果回來再進行聚合。聚合等待太多,錯誤就會發生。好比一個機器故障率是萬分之一。那麼10000條記錄一起請求結果,那麼故障率就非常高了,可能多數情況下都是失敗的。

3.Q:tair的分散式鎖使用有什麼最佳實踐?

A:分散式鎖使用建議使用帶有過期時間的分散式鎖,過期時間可傳一個絕對的時間戳。解鎖時可傳入一個非常大的整數,以解掉所有的鎖。