KV存儲系統


現在的KV存儲系統都是分布式的,首先介紹Zookeeper——針對大型分布式系統的高可靠的協調系統。

開發分布式系統是件很困難的事情,其中的困難主要體現在分布式系統的“部分失敗”。“部分失敗”是指信息在網絡的兩個節點之間傳送時候,如果網絡出了故障,發送者無法知道接收者是否收到了這個信息,而且這種故障的原因很復雜,接收者可能在出現網絡錯誤之前已經收到了信息,也可能沒有收到,又或接收者的進程死掉了。

Zookeeper就是解決分布式系統“部分失敗”的框架,當分布式系統碰到部分失敗時候,可以正確的處理此類的問題,讓分布式系統能正常的運行。zookeeper的實際運用場景:

  1. 集群中有服務器掛掉時,能檢測到並將其從列表中刪除,並能報告給管理員;當master掛掉時,會根據”選舉領導者算法”選出新的健康的master;
  2. 分布式鎖機制,保證集群中數據的一致性;
  3. 配置管理,快速地配置集群;
  4. 任務均衡等。

memcached

許多Web應用都將數據保存到RDBMS中,應用服務器從中讀取數據並在瀏覽器中顯示。 但隨着數據量的增大、訪問的集中,就會出現RDBMS的負擔加重、數據庫響應惡化、 網站顯示延遲等重大影響。memcached是高性能的分布式內存緩存服務器。 一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、 提高可擴展性。

NewImage

特點是:協議簡單、基於libevent的事件處理、內置內存存儲方式、memcached不互相通信的分布式。

由於數據僅存在於內存中,因此重啟memcached、重啟操作系統會導致全部數據消失。 另外,內容容量達到指定值之后,就基於LRU(Least Recently Used)算法自動刪除不使用的緩存。 memcached本身是為緩存而設計的服務器,因此並沒有過多考慮數據的永久性問題。 各個memcached不會互相通信以共享信息,分布策略由客戶端實現。

HBase

HBase是Apache Hadoop中的一個子項目,Hbase依托於Hadoop的HDFS作為最基本存儲基礎單元,通過使用hadoop的DFS工具可以看到這些數據存儲文件夾的結構,還可以通過Map/Reduce的框架(算法)對HBase進行操作(Hive更常用),如圖所示:

NewImage 

HBase在產品中還包含了Jetty,在HBase啟動時采用嵌入式的方式來啟動Jetty,因此可以通過web界面對HBase進行管理和查看當前運行的一些狀態,非常輕巧。

HBase不同於一般的關系數據庫,它是一個適合於非結構化數據存儲的數據庫。所謂非結構化數據存儲就是說HBase是基於列的而不是基於行的模式。HBase是介於Map Entry(key & value)和DB Row之間的一種數據存儲方式。就點有點類似於Memcache,但不僅僅是簡單的一個key對應一個 value,你很可能需要存儲多個屬性的數據結構,但沒有傳統數據庫表中那么多的關聯關系,這就是所謂的松散數據

一個數據行擁有一個可選擇的鍵和任意數量的列。表是疏松的存儲的,因此用戶可以給行定義各種不同的列,對於這樣的功能在大項目中非常實用,可以簡化設計和升級的成本。 

Tair

tair是淘寶自己開發的一個分布式 key/value存儲引擎。tair分為持久化和非持久化兩種使用方式,非持久化的tair可以看成是一個分布式緩存;持久化的tair將數據存放於磁盤中,為了解決磁盤損壞導致數據丟失,tair可以配置數據的備份數目,tair自動將一份數據的不同備份放到不同的主機上,當有主機發生異常,無法正常提供服務的時候,其於的備份會繼續提供服務。tair是加強版的memcached,提供了數據長期保存的策略。

tair作為一個分布式系統,是由一個中心控制節點和一系列的服務節點組成。我們稱中心控制節點為config server,服務節點是data server。config server負責管理所有的data server,維護data server的狀態信息。data server對外提供各種數據服務,並以心跳的形式將自身狀況匯報給config server。config server是控制點,而且是單點,目前采用一主一備的形式來保證其可靠性。所有的 data server 地位都是等價的,tair支持自定義的備份數。

Structure

tair的分布采用的是一致性哈希算法,對於所有的key,分到Q個桶中,桶是負載均衡和數據遷移的基本單位。config server根據一定的策略把每個桶指派到不同的data server上,因為數據按照key做hash算法,所以可以認為每個桶中的數據基本是平衡的。保證了桶分布的均衡性,就保證了數據分布的均衡性。

Interface

Redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。

與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件(RDB和AOF兩種方式),並且在此基礎上實現了master-slave(主從)同步。Redis數據庫

KV系統對比:Redis/HBase/Tair比較


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM