• -동두천 4.1℃
  • -강릉 16.1℃
  • 흐림서울 6.4℃
  • 맑음대전 5.0℃
  • 맑음대구 9.2℃
  • 맑음울산 14.7℃
  • 안개광주 7.4℃
  • 맑음부산 13.4℃
  • -고창 6.7℃
  • 연무제주 11.8℃
  • -강화 3.4℃
  • -보은 2.8℃
  • -금산 2.8℃
  • -강진군 7.6℃
  • -경주시 9.3℃
  • -거제 11.1℃
기상청 제공
출처 : http://wiki.heedy.pe.kr/index.php/Memcached

1 서론
2 memcached의 캐쉬 방식
3 memcache의 인스톨
4 memcache의 기동
5 memcache의 동작확인


서론

memcached는 고속의 분산형 Memory Cache이며, 주로 DB에의 참조 결과를 Cache, 웹시스템에 있어서의 성능향상을 위해 많이 사용된다.

  • 웹시스템에 있어서의 부하대책
    1. 서버의 구성을 살펴본다.
      • Scale Out (서버의 수를 늘린다)
      • Scale Up (CPU/Memory 등의 하드웨어를 향상시킨다)
    2. OS/Middleware의 설정을 살펴본다.
    3. 네트워크구성을 살펴본다.
    4. 어플리케이션 로직을 살펴본다.
  • 위의 대책 중에 DB서버에의 대책에는 데이터의 배치, 데이터 액세스방법을 어떻게 구현했는지가 문제가 된다.
    1. DB서버에의 부하를분산 (DB파티션팅 등의 기술을 사용해 Scale Out)
    2. DB서버에 있어서의 쓸때없는 처리를 줄인다. (DB Query를 다시 살펴본다)

바로 memcache가 위의 문제가 될 수 있는 곳의 해결책이 될 수 있을 것 같다.

  • memcached에 의한 성능향상
    1. 파일 입출력 (File I/O)가 줄어듬
      • 파일의 내용을 캐쉬해 둠으로써 파일 입출력에 의한 부하가 줄어든다.
    2. 세션정보의 공유
      • 유져의 세션정보를 캐쉬해 둠으로써, 복수의 아팟치서버사이의 세션정보를 공유한다.

memcached의 캐쉬 방식

  • 분산형

memcache서버 자체에는 분산장치을 가지고 있지않다. 하지만 memcache의 클라이언트 라이브러리가 존재하며, 분산장치는 이를 이용해 클라이언트에서 구현해 주면 된다.

  • 휘발성

memcache는 onmemory 캐쉬서버이므로 데이터를 계속적으로 가지고 있지 못한다. 프로세스가 종료되면 데이터도 모두 없어진다.

  • 키와 값의 매핑

memcache는 hashmap처럼 키와 값의 매핑정보를 보유한다. 키는 250문자까지 공백을 포함하지 않는 텍스트로 지정하고, 값은 1MB 까지의 임의의 데이터를 입력할 수 있다.

  • LRU 와 유효기간에 의한 캐쉬소거

memcache의 캐쉬데이터의 소거 방식은 LRU(Least Recently Used)이다. 즉 캐쉬에 빈자리가 없을 경우는 가장 오래된 순으로 소거된다. 하지만 키별로 유효기간을 정할 수 있으므로 소거 정책을 정할 수 있다.

memcache의 인스톨

  • 선행으로 인스톨 되어야 할 라이브러리 : libevent
# wget http://www.monkey.org/~provos/libevent-1.4.8-stable.tar.gz

# tar xvfz libevent-1.4.8-stable.tar.gz
# cd libevent-1.4.8-stable
# ./configure
# make
# make install
  • memcached의 인스톨
# wget http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz

# tar xvfz memcached-1.2.6.tar.gz
# cd memcached-1.2.6
# ./configure
# make
# make install

memcache의 기동

  • -vv (very verbose) 옵션과 함께 기동, -p 포트, -u root로 실행
# memcached -vv -p 11211 -u root &
sh-3.2# memcached -vv -p 11211 -u root
slab class   1: chunk size     88 perslab 11915
slab class   2: chunk size    112 perslab  9362
slab class   3: chunk size    144 perslab  7281
slab class   4: chunk size    184 perslab  5698

 ..중략..

slab class  38: chunk size 391224 perslab     2
slab class  39: chunk size 489032 perslab     2
<4 server listening
<5 server listening
<6 send buffer was 9216, now 7456540
<6 server listening (udp)
  • -p 옵션으로 복수의 프로세스를 실행 시킬 수 있으며, -d 옵션으로 백그라운드 기동이 가능.
# memcached -p 11211 -d -u root
# memcached -p 11212 -d -u root
# memcached -p 11213 -d -u root

memcache의 동작확인

  • 접속확인
# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
  • 상태확인 (telnet 상태에서)
stats
STAT pid 13041
STAT uptime 171
STAT time 1225958288
STAT version 1.2.6
STAT pointer_size 32
STAT rusage_user 0.001480
STAT rusage_system 0.002299
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT curr_connections 3
STAT total_connections 4
STAT connection_structures 4
STAT cmd_get 0
STAT cmd_set 0
STAT get_hits 0
STAT get_misses 0
STAT evictions 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 67108864
STAT threads 1
END
  • get/set 동작확인 (telnet 상태에서)
set key1 0 0 6
Hello!
STORED
get key1
VALUE key1 0 6
Hello!
END