memcachedb-持久化存儲的緩存系統


Memcached 是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提供動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。

memcached是一套分布式的快取系統,當初是Danga Interactive為了LiveJournal所發展的,但目前被許多軟件(如MediaWiki)所使用。這是一套開放源代碼軟件,以BSD license授權釋出。[1]   memcached缺乏認證以及安全管制,這代表應該將memcached服務器放置在防火牆后。[1]   memcached的API使用三十二位元的循環冗余校驗(CRC-32)計算鍵值后,將資料分散在不同的機器上。當表格滿了以后,接下來新增的資料會以LRU機制替換掉。由於memcached通常只是當作快取系統使用,所以使用memcached的應用程式在寫回較慢的系統時(像是后端的數據庫)需要額外的程式碼更新memcached內的資料[1]   memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 為首開發的一款軟件。現在已成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務中提高Web應用擴展性的重要因素。許多Web應用都將數據保存到RDBMS中,應用服務器從中讀取數據並在瀏覽器中顯示。但隨着數據量的增大、訪問的集中,就會出現RDBMS的負擔加重、數據庫響應惡化、網站顯示延遲等重大影響。   這時就該memcached大顯身手了。memcached是高性能的分布式內存緩存服務器。一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。   Memcached 是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提供動態、數據庫驅動網站更快的運行速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。但是它並不提供冗余(例如,復制其hashmap條目);當某個服務器S停止運行或崩潰了,所有存放在S上的鍵/值對都將丟失。   Memcached由Danga Interactive開發,其最新版本發布於2010年,作者為Anatoly Vorobey和Brad Fitzpatrick。用於提升LiveJournal . com訪問速度的。LJ每秒動態頁面訪問量幾千次,用戶700萬。Memcached將數據庫負載大幅度降低,更好的分配資源,更快速訪問。


特征  memcached作為高速運行的分布式緩存服務器,具有以下的特點。   · 協議簡單   · 基於libevent的事件處理   · 內置內存存儲方式   · memcached不互相通信的分布式
協議
  memcached的服務器客戶端通信並不使用復雜的XML等格式,而使用簡單的基於文本行的協議。   因此,通過telnet也能在memcached上保存數據、取得數據。下面是例子。   $ telnet localhost 11211   Trying 127.0.0.1...   Connected to localhost.localdomain (127.0.0.1).   Escape character is '^]'.   set foo 0 0 3 (保存命令)   bar (數據)   STORED (結果)   get foo (取得命令)   VALUE foo 0 3 (數據)   bar (數據)
事件處理
  libevent是個程序庫,它將Linux的epoll、BSD類操作系統的kqueue等事件處理功能封裝成統一的接口。即使對服務器的連接數增加,也能發揮O(1)的性能。memcached使用這個libevent庫,因此能在Linux、BSD、Solaris等操作系統上發揮其高性能。關於事件處理這里就不再詳細介紹,可以參考Dan Kegel的The C10K Problem。
存儲方式
  為了提高性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。由於數據僅存在於內存中,因此重啟memcached、重啟操作系統會導致全部數據消失。另外,內容容量達到指定值之后,就基於LRU(Least Recently Used)算法自動刪除不使用的緩存。memcached本身是為緩存而設計的服務器,因此並沒有過多考慮數據的永久性問題。
通信分布式
  memcached盡管是“分布式”緩存服務器,但服務器端並沒有分布式功能。各個memcached不會互相通信以共享信息。那么,怎樣進行分布式呢?這完全取決於客戶端的實現。本文也將介紹memcached的分布式。功能  一個用PHP編寫的可視化的MemCached管理系統   MemAdmin是一款可視化的Memcached管理與監控工具,使用PHP開發,體積小,操作簡單。   主要功能:   服務器參數監控:STATS、SETTINGS、ITEMS、SLABS、SIZES實時刷新   服務器性能監控:GET、DELETE、INCR、DECR、CAS等常用操作命中率實時監控   支持數據遍歷,方便對存儲內容進行監視   支持條件查詢,篩選出滿足條件的KEY或VALUE   數組、JSON等序列化字符反序列顯示   兼容memcache協議的其他服務,如Tokyo Tyrant (遍歷功能除外)   支持服務器連接池,多服務器管理切換方便簡潔使用技巧  許多語言都實現了連接memcached的客戶端,其中以Perl、PHP為主。僅僅memcached網站上列出   的語言就有   · Perl   · PHP   · Python   · Ruby   · C#   · C/C++   · Lua   等等。   如何使用memcached-Server端   在服務端運行:   # ./memcached -d -m 2048 -l 10.0.0.40 -p 11211   這將會啟動一個占用2G內存的進程,並打開11211端口用於接收請求。由於32位系統只能處理4G內存的尋址,所以在大於4G內存使用PAE的32位服務器上可以運行2-3個進程,並在不同端口進行監聽。   如何使用memcached-Client端   在應用端包含一個用於描述Client的Class后,就可以直接使用,非常簡單。   PHP Example:   $options["servers"] = array("192.168.1.41:11211", "192.168.1.42:11212");   $options["debug"] = false;   $memc = new MemCachedClient($options);   $myarr = array("one","two", 3);   $memc->set("key_one", $myarr);   $val = $memc->get("key_one");   print $val[0]."\n"; // prints 'one‘   print $val[1]."\n"; // prints 'two‘   print $val[2]."\n"; // prints 3版本發布  2012年02月03日,Memcached 1.4.13 發布。[2]   2012年08月02日,Memcached 1.4.14 發布。[3]   2012年09月05日,Memcached 1.4.15 發布。[4]

memcachedb-持久化存儲的緩存系統
memcachedb故名思義就是 memcached + bdb,是基於memcached Socket層和berkeley-db存儲層結構的實現, 是新浪互動社區技術團隊2007年的一項重大的技術成果,現在應用於新浪互動社區多個產品線中,其中包括新浪博客等重頭產品。能夠實現任意memcache api的調用、數據實時落地以及主輔實時備份。

選擇memcachedb:沒 有什么特殊的原因,我們有最好的理由就是,在做到最大不犧牲數據讀、寫性能的前提下,我們能夠讓您原來存儲在memcache里的數據不再遭受系統宕機或 者系統掉電而丟失,即使服務器電源爆炸了,只要硬盤還能夠正常工作,換到另外一台服務器上,您的數據依然安然無恙地在硬盤上。

性能:我們做過小數據測試,小數據(幾十個字節)數據的讀寫,每秒鍾並發能夠維持在5000+(單塊146Scis硬盤,CPU和內存配置幾乎可以忽略因為這不是性能瓶頸)。基本上滿足所有互聯網高效存儲的應用。

應用場合:需 要頻繁讀寫的小數據。例如數字類服務就像點擊數,需要頻繁寫入小數據的例如評論系統,需要記錄用戶狀態的例如在線人數以及在線用戶等等。當然,如果您想用 來存儲單筆超過10K以上的數據,例如新聞或者文章或者論壇帖子也可以,但是我們沒有嘗試過,如果您真的用來這樣子玩了,可以反饋給我。

數據備份&&讀寫分離:memcachedb支持主輔實時無差異同步,配置主服務和輔服務僅僅需要很短的一條啟動命令。當然,您也可以利用這一便利特性來實現讀寫分離,那樣子會讓您的系統更加的高效。

穩定性:memcachedb目前被應用於新浪互動社區多個產品線中,具有鋼鐵般的品質。

缺點:memcached不支持內存對象的遍歷操作,當然更加不能支持復雜的查詢操作,只能支持根據已知的key去查詢對應的value。但后續我會介紹另外一個東東memcache_engine,它為mysql提供了一個memcached引擎。

一、安裝
直接在memcached-1.2.2.tar.gz找到INSTALL文件,按照步驟安裝就行了。很簡單。

二、啟動
#第一種,讀寫合並模式,即不做輔拷貝,即讀又寫,不做冗余備份
memcachedb -p21211 -d -r -u root -H /data/mdb_11211 -N

#第二種,讀寫分離/備份模式
#主服務器 192.168.0.1 讀寫監聽 11211 ,同步通過31211的端口完成,不占用繁忙的主服務端口
memcachedb -p21211 -d -r -u root -H /data/mdb_11211_m -N -R 127.0.0.1:31211 -M

# 輔服務器 192.168.0.2 只讀監聽 21212,從192.168.0.1 的 31211端口同步數據,同時再開一個31212端口對外提供數據同步服務
memcachedb -p21212 -d -r -u root -H /data/mdb_11211_from_16801_s -O 192.168.0.1:31211 -R 192.168.0.2:31212 -S


免責聲明!

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



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