1. 背景
許多Web 應用程式都将資料儲存到RDBMS中,應用伺服器從中讀取資料并在浏覽器中顯示。但随着資料量的增大,通路的集中,就會出現REBMS的負擔加重,資料庫響應惡化,網站顯示延遲等重大影響。Memcached是高性能的分布式記憶體緩存伺服器。一般的使用目的是通過緩存資料庫查詢結果,減少資料庫的通路次數,以提高動态Web 應用的速度、提高擴充性。如圖:
Memcached作為高速運作的分布式緩存伺服器具有以下特點。
1. 協定簡單
memcached的伺服器用戶端通信并不使用複雜的MXL等格式,而是使用簡單的基于文本的協定。
2. 基于libevent的事件處理
libevent是個程式庫,他将Linux 的epoll、BSD類作業系統的kqueue等時間處理功能封裝成統一的接口。memcached使用這個libevent庫,是以能在Linux、BSD、Solaris等作業系統上發揮其高性能。
3. 内置記憶體存儲方式
為了提高性能,memcached中儲存的資料都存儲在memcached内置的記憶體存儲空間中。由于資料僅存在于記憶體中,是以重新開機memcached,重新開機作業系統會導緻全部資料消失。另外,内容容量達到指定的值之後memcached回自動删除不适用的緩存。
4. Memcached不互通信的分布式
memcached盡管是“分布式”緩存伺服器,但伺服器端并沒有分布式功能。各個memcached不會互相通信以共享資訊。他的分布式主要是通過用戶端實作的。
5. Memcached的記憶體管理
最近的memcached預設情況下采用了名為Slab Allocatoion的機制配置設定,管理記憶體。在改機制出現以前,記憶體的配置設定是通過對所有記錄簡單地進行malloc和free來進行的。但是這中方式會導緻記憶體碎片,加重作業系統記憶體管理器的負擔。
Slab Allocator的基本原理是按照預先規定的大小,将配置設定的記憶體分割成特定長度的塊,已完全解決記憶體碎片問題。Slab Allocation 的原理相當簡單。将配置設定的記憶體分割成各種尺寸的塊(chucnk),并把尺寸相同的塊分成組(chucnk的集合)如圖:
<a href="https://s1.51cto.com/wyfs02/M01/8C/B5/wKioL1h1n3rQnWlFAAGyeiicrzc268.png" target="_blank"></a>
而且slab allocator 還有重複使用已配置設定記憶體的目的。也就是說,配置設定到的記憶體不會釋放,而是重複利用。
Slab Allocation 的主要術語
Page :配置設定給Slab 的記憶體空間,預設是1MB。配置設定給Slab 之後根據slab 的大小切分成chunk.
Chunk : 用于緩存記錄的記憶體空間。
Slab Class:特定大小的chunk 的組。
2. 環境
<a href="https://s5.51cto.com/wyfs02/M00/8E/99/wKioL1jGpcTipnJwAABcxE0crWg502.jpg" target="_blank"></a>
3. 安裝(下載下傳源碼包全部放至/usr/local/src目錄下,先cd切換到/usr/local/src目錄下工作)
安裝libevent(memcache網絡庫部分基于libevent庫開發,解決了不同平台的差異性)
解壓: tar xf libevent-2.1.8-stable.tar.gz
進入目錄: cd libevent-2.1.8-stable
安裝: ./configure --prefix=/usr/local/libevent-2.1.8 && make && make install
做軟連結 ln -s /usr/local/libevent-2.1.8 /usr/local/libevent
安裝memcached
解壓: tar xf memcached-1.4.35.tar.gz
進入目錄: cd memcached-1.4.35
編譯安裝:./configure --prefix=/usr/local/memcached-1.4.35 --with-libevent=/usr/local/libevent && make && make install
做軟連結: ln -s /usr/local/memcached-1.4.35 /usr/local/memcached
建立系統使用者, 并且不建立家目錄
useradd -r -s /sbin/nologin -M memcached
編輯并添加memcached啟動腳本(目前路徑還在memcached-1.4.35源碼包目錄裡)
進入腳本目錄: cd scripts
複制腳本至init.d目錄下: cp memcached.sysv /etc/init.d/memcached
建立memcached運作目錄, 并改變其使用者與使用者組為memcached
mkdir /var/run/memcached
chown memcached.memcached /var/run/memcached
編輯腳本: (/etc/init.d/memcached)
daemon memcached -d -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS 改為 daemon /usr/local/memcached/bin/memcached -d -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS
(可選)删除腳本中以下内容
PORT=11211
USER=nobody
MAXCONN=1024
CACHESIZE=64
OPTIONS=""
建立參數腳本并添加參數
建立touch /etc/sysconfig/memcached
更改使用者與使用者組 chown memcached.memcached /etc/sysconfig/memcached
添加内容
PORT=11211
USER=memcached
OPTIONS="-l 0.0.0.0,::1"
将memcached添加進service管理,并開機啟動
chkconfig --add memcached
chkconfig memcached on
4. 測試
啟動: /etc/init.d/memcached start 或者 service memcached start
<a href="https://s3.51cto.com/wyfs02/M01/8E/9B/wKiom1jGrZ2APgRVAAEhZ7pJ9FI013.jpg" target="_blank"></a>
啟動成功
5. 連接配接(通過telnet測試連接配接)
telnet 127.0.0.1 11211
<a href="https://s4.51cto.com/wyfs02/M01/8E/99/wKioL1jGrhShGEbKAABxUxDqF9A834.jpg" target="_blank"></a>
6. 總結
以需求驅動技術,技術本身沒有優略之分,隻有業務之分。
本文轉自asd1123509133 51CTO部落格,原文連結:http://blog.51cto.com/lisea/1906122,如需轉載請自行聯系原作者