728x90
반응형

Memcached 란?

 

- 분산 메모리 캐싱 시스템

 

- 데이터 베이스의 부하를 줄여 동적 웹 어플리케이션의 속도 개선을 위해 사용되기도 함

 

- DB나 API 호출 또는 Rendering 등으로부터 받아오는 결과 데이터를 작은 Key-Value 형태로 메모리에 저장하는 방식

 

- Memcached는 필요량보다 많은 메모리를 가졌을때, 시스템으로부터 메모리를 사용하고 필요로 하는 메모리가 부족한 경우 이를 더 쉽게 가져다 사용할 수 있도록 함

 

 

 

메모리 운영 방식

 

 

- Memcached를 사용하지 않을 경우 분리되어 있는 메모리에 대해 각각의 서버에서 사용할 수 있는 것은 할당된 메모리의 크기만큼인데 Memcached를 적용할 경우 논리적으로 결합되어 있기 때문에 각 웹서버는 전체 메모리 캐시만큼의 용량을 사용할 수 있음 (효율성있게 메모리 운영이 가능해진다는 것)

 

 

Memcached를 사용하지 않을 경우

 

- 각 노드는 완벽하게 독립적

 

- 고전적으로 사용되던 방식으로 총 캐시 크기가 Web Farm (여러대를 사용해서 웹 사이트를 구축한 형태)의 실제 용량의 일부분으로만 사용이 가능하다는 점에서 낭비가 심함

 

- 각각의 서버에 할당된 캐시 크기만큼 사용할 수 있으므로 Web Farm의 캐시 사이즈는 128MB이지만 각 서버에서 사용할 수 있는 사이즈는 64MB

(그림 상 Web Farm의 용량은 64MB * 2 = 128MB 이지만 실제 캐시의 크기는 64MB)

 

 

Memcached를 사용할 경우

 

- Memcached로 묶인 모든 서버는 동일한 가상 메모리 풀을 공유 (특정한 항목이 주어졌을 때 전체 웹 클러스터에서 항상 동일한 위치에 저장되고 검색되어짐을 의미)

 

- 분산 메모리 캐시를 적용하게 되는 것이므로 캐싱을 통해 DB나 API 호출에 대한 횟수를 줄이고 이로 인해 응용프로그램의 수요나 DB 데이터 접근에 대한 부하를 줄여 성능 향상

 

 

 

웹 어플리케이션 적용 법

 

- TCP 스펙상 접속을 끊은 후 TIME_WAIT가 발생할 수 있음 (TIME_WAIT의 갯수는 netstat 명령을 통해 확인 가능 - # netstat -na | grep -i time_wait | wc -l)

 

- TIME_WAIT가 발생하는 시간은 30-240초로 설정할 수 있는데 대부분의 운영체제에서는 240초가 기본 값

 

- 기본 값을 사용시 Memcached를 운영하는 환경에서는 너무 길고, 트래픽이 많은 곳에서 Memcached와 빈번하게 통신을 하다보면 수만개의 TIME_WAIT가 발생하는 경우가 생김

(Memcached에 접속이 안되는 현상이 발생하는 경우가 생김)

 

- Memcached를 실행한 서버는 TIME_WAIT 발생 시간을 30초로 설정 (일반적인 상황에서는 최소 60초 이상으로 설정할 것을 권장

( # vim /etc/sysctl.conf 

net.ipv4.tcp_fin_timeout=30 )

 

 

참조 URL

 

https://brownbears.tistory.com/43

https://idchowto.com/?p=38249

반응형

'Other' 카테고리의 다른 글

Git  (0) 2019.04.09
Gradle  (0) 2019.04.09
Sharding (샤딩)  (0) 2019.04.09
Redis  (0) 2019.04.09
AAA Protocol  (0) 2019.04.09

+ Recent posts