1. 程式人生 > >redis單機版和叢集版特性(學習筆記1)

redis單機版和叢集版特性(學習筆記1)

關係型資料庫&nosql

1、複雜的查詢
在傳統的關係型資料庫中查詢一個複雜的業務需要寫很複雜的 sql 語句。
2、伸縮性
在傳統的關係型資料庫業務增大系統需要擴容只能是縱向的形式擴充套件.操作效能也與遇到瓶頸
3、傳統資料庫遵循 ACID 規則。而 Nosql 一般為分散式而分散式一般遵循 CAP 定理。

ACID

  • A (Atomicity) 原子性
  • C (Consistency) 一致性
  • I (Isolation) 獨立性
  • D (Durability) 永續性

CAP

  • 一致性(Consistency) (所有節點在同一時間具有相同的資料) ;
  • 可用性(Availability) (保證每個請求不管成功或者失敗都有響應)
  • 分隔容忍(Partition tolerance) (系統中任意資訊的丟失或失敗不會影響系統的繼續運作)

介紹:
NoSQL 稱作 Not Only SQL 的縮寫,是對不同於傳統的關係型資料庫的資料庫管理系統的統稱。

nosql  分類

名稱 

儲存
redis 鍵值對(key-value)
Hbase  寬列(wide cloumn)
mongoDb 文件(document)
Neo4j 圖(graph)

Redis  介紹

介紹:Redis 是一個由 Salvatore Sanfilippo 寫的 key-value 儲存系統。Redis 是一個開源的使用 ANSI  C 語言編寫、遵守 BSD 協議、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value 資料庫,並提供多種語言的 API。它通常被稱為資料結構伺服器,因為值(value)可以是 字串(String), 雜湊(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等型別。

Redis  單機版

單機版三個問題:
1、記憶體容量有限 2、處理能力有限 3、無法高可用。

Redis 多機版

特性:1、複製(Replication)2、哨兵(Sentinel) 3、叢集(Cluster)
Redis 多機版特性功能:
複製:擴充套件系統對於讀的能力
哨兵:為伺服器提供高可用特性,減少故障停機出現
叢集: 擴充套件記憶體容量,增加機器,提高效能讀寫能力和儲存以及提供高可用特性

複製

Redis 的複製(replication)功能允許使用者根據一個 Redis 伺服器來建立任意多個該伺服器的複製品,其中被複制的伺服器為主伺服器(master),而通過複製創建出來的伺服器複製品則為從伺服器(slave)。只要主從伺服器之間的網路連線正常,主從伺服器兩者會具有相同的資料,主伺服器就會一直將發生在自己身上的資料更新同步 給從伺服器,從而一直保證主從伺服器的資料相同。

特點:

  1. master/slave 角色
  2. master/slave 資料相同
  3. 降低 master 讀壓力在轉交從庫

問題:

  1. 無法保證高可用
  2. 沒有解決 master 寫的壓力

哨兵

Redis sentinel 是一個分散式系統中監控 redis 主從伺服器,並在主伺服器下線時自動進
行故障轉移。其中三個特性:

  1. 監控(Monitoring ):  Sentinel  會不斷地檢查你的主伺服器和從伺服器是否運作正常。
  2. 提醒(Notification ): 當被監控的某個 Redis 伺服器出現問題時, Sentinel 可以通過 API 向管理員或者其他應用程式傳送通知。
  3. 自動故障遷移(Automatic failover ): 當一個主伺服器不能正常工作時, Sentinel會開始一次自動故障遷移操作。

特點:

  1. 保證高可用
  2. 監控各個節點
  3. 自動故障遷移

缺點:

  1. 主從模式,切換需要時間丟資料(重新選舉出master需要時間)
  2. 沒有解決 master 寫的壓力

叢集(proxy  型)

Twemproxy 是一個 Twitter 開源的一個 redis 和 memcache 快速/輕量級代理伺服器;
Twemproxy 是一個快速的單執行緒代理程式,支援 Memcached ASCII 協議和 redis 協議。
特點:

  1. 多種 hash 演算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins
  2. 支援失敗節點自動刪除
  3. 後端 Sharding 分片邏輯對業務透明,業務方的讀寫方式和操作單個 Redis 一致

缺點:

  1. 增加了新的 proxy,需要維護其高可用。
  2. failover 邏輯需要自己實現,其本身不能支援故障的自動轉移
  3. 可擴充套件性差,進行擴縮容都需要手動干預

叢集(直連型3.0版本之後才支援):

特點:

  1. 無中心架構(不存在哪個節點影響效能瓶頸),少了 proxy 層。
  2. 資料按照 slot 儲存分佈在多個節點,節點間資料共享,可動態調整資料分佈。
  3. 可擴充套件性,可線性擴充套件到 1000 個節點,節點可動態新增或刪除。
  4. 高可用性,部分節點不可用時,叢集仍可用。通過增加 Slave 做備份資料副本
  5. 實現故障自動 failover,節點之間通過 gossip 協議交換狀態資訊,用投票機制完成 Slave到 Master 的角色提升。

缺點:

  1. 資源隔離性較差,容易出現相互影響的情況。
  2. 資料通過非同步複製,不保證資料的強一致性