常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别
1. 什么是 KV 存儲
KV 是 Key-Value 的縮寫,KV 存儲也叫鍵值對存儲。簡單來說,它是利用 Key 做索引來實現數據的存儲、修改、查詢和刪除功能。
常用的高性能 KV 存儲主要有 Redis 、Memcached 、etcd 、Zookeeper 等,其中
Redis和Memcached主要用來緩存業務數據;etcd和Zookeeper主要用來存儲元數據;
業務數據比較好理解,就是業務系統業務邏輯處理的數據。比如我們要在 API 服務中將活動信息快速讀取出來,就需要用 Redis 做緩存,降低耗時,提升數據的吞吐能力。
在分布式系統中,元數據就是系統的基本信息,包括系統名稱、服務名稱、服務配置、節點 IP 等。比如秒殺系統中,秒殺服務調用商品中心和交易中心的時候,就需要從服務注冊中心里獲取這兩個系統的元數據。
2. 為什么會選擇 Redis 而不是 Memcached
其實 Memcached 在性能上要稍微比 Redis 好,但在易用性和可用性上,Redis 要大大超過Memcached 。
2.1 易用性
Redis有五種數據類型:list、set、string、hash、zset。這表示在使用Redis存儲數據的時候將會更靈活,能節省很多開發成本。Memcached支持的數據類型比較簡單,只有string,無法滿足復雜業務場景的需求。
另外,Redis 還支持原子操作和事務,可以確保操作數據時的準確性,使用非常簡單。比如在秒殺中扣減和歸還庫存,就可以用 Redis 的原子操作和事務來保障庫存數據的準確性。
2.2 可用性
Redis 支持 Master-Slave 模式的數據備份,而 Memcached 不支持; 在故障轉移方面,Redis 的可用性也比 Memcached 高。
Memcached 是純內存的,崩潰后里面存儲的信息就丟失了,而 Redis 則可以通過命令將內存中的數據保存到磁盤上,讓數據持久化。
3. 為什么會選擇 etcd 而不是 Zookeeper
etcd 和 Zookeeper 都可以存儲集群元數據,以保障集群核心信息的高可用和高性能訪問。其中
etcd用的是Raft協議;Zookeeper用的是Paxos協議;- 存儲結構上
etcd v3是簡單的kv結構,而zk是樹形結構,訪問數據時要遍歷,所以etcd性能比zk好;
這兩種分布式協議都滿足 CAP 理論中的 CP。也就是說,它們都滿足一致性(Consistency)和分區容錯(Partition tolerance)的要求。
但相比 Zookeeper ,這幾年 etcd 在業界的認可度越來越高,多款重量級開源軟件(Kubernetes、Traefik、Casbin)都使用了它。
和 Zookeeper 相比,etcd 有以下優勢。
-
首先,
etcd支持HTTPS訪問、劃分命名空間、RBAC權限控制,可以有效保證數據安全。 -
在易用性方面,
etcd是用Golang實現的,簡單配置后就可以運行。同時,它還提供了HTTP接口和gRPC接口,非常方便客戶端使用。另外,etcd還支持訂閱某個Key下的數據變更,假如這個數據被修改了,客戶端能實時收到通知并獲取最新的數據。 -
可用性方面,
etcd會將數據寫入磁盤,不會因為節點宕機丟失數據。即便etcd集群當中有的節點宕機了,憑借Raft協議,也能保證集群穩定運行。
你可能會問了,什么是 Raft 協議,etcd 具體是如何用 Raft 協議做集群管理的呢?
簡單來說,Raft 協議是 etcd 中保證分布式系統強一致性的算法。Raft 協議維護了集群節點的角色狀態—— Leader(領導者)、Follower(跟隨者)、Candidate(候選者)。
其中,Leader 節點主要維護整個集群的運行狀態,它負責通過 Raft 協議將寫操作同步給所有節點,特別是通過心跳機制與 Follower 通信。而 Follower 節點主要負責把寫請求和自身運行狀態上報給 Leader,如果 Leader 任期結束或者心跳超時,Follower 會變成 Candidate 并發起選舉。
這里的 Candidate 就是選舉 Leader 過程中的候選者,當某個 Candidate 獲得一半以上的票數, Candidate 就會成為 Leader,承擔起維護集群運行的責任。其他 Candidate 自動轉變成 Follower,繼續發揮自己的作用。
除了選舉出 Leader 維護集群信息外,etcd 對于每個 Key 的每次修改都會生成一個自增 ID 用于版本控制,并且會帶上任期 ID, 確保集群各節點收到的數據版本一致并且是最新的。
以上便是 etcd 的高可用原理。可以說,正是因為 etcd 的這些優點,越來越多的系統開始用它保存關鍵數據。比如,秒殺系統經常用它保存各節點信息,以便控制消費 MQ 的服務數量。還有些業務系統的配置數據,也會通過 etcd 實時同步給業務系統的各節點,比如,秒殺管理后臺會使用 etcd 將秒殺活動的配置數據實時同步給秒殺 API 服務各節點。
總結
以上是生活随笔為你收集整理的常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022-2028年中国女式西装行业研究
- 下一篇: Redis 预防缓存穿透“神器” — 布