웹마스터 팁

최근 경합 처리를 해야하는 업무가 있어 이를 해결한 방법 공유드리겠습니다.

(참조 자료)

1. http://wordpressxe.tistory.com/8

2. https://github.com/arvenil/ninja-mutex

 

(유의사항)

기존 운영되는 서버에 설치 시 세션 관련 문제가 발생할 수 있으니 설치 시 유의해 주세요.

ex) phpMyAdmin 접속 안될 수 있음. (하기 방식으로 phpMyAdmin 접속 해소 가능)

-------------------------------------------

config.inc.php 최상단 하기 문구 삽입

ini_set('session.save_path', '');

ini_set('session.save_handler', 'files');

-------------------------------------------

기 운영되고 있는 서버에 설치보다는 별도 경합이 많이 발생하는 프로세스 처리 서버에 설치 시도하여 충분한 테스트 및 검증 후 도입하세요.

 

1. Memcached 설치

- 먼저 Memcached를 설치하기전 libevent를 설치 합니다. (libvirt를 설치할때 의존성 패키지들도 같이 설치 됩니다.)

# yum install libvirt

 

- Memcached 설치

# yum install memcached

 

- Memcached PHP 확장 모듈 설치 (보통 위 설치하면 아래 두개는 이미 설치되었다고 나옴)

# yum install php php-pecl-memcache <-memcache용 

# yum install php php-pecl-memcached <-memcached용  

 

- Memcached 설정 (보통 기본값으로 아래 내용이 작성되어 있음)

# vi /etc/sysconfig/memcached

-----------------------

PORT="11211"

USER="memcached"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS=""

-----------------------

 

- 재부팅시 자동시작 설정

# chkconfig memcached on

 

- Memcached 시작

# service memcached start

 

- Memcached실행 및 작동 확인

# echo stats | nc localhost 11211

 

- php.ini 파일 변경

# vi /etc/php.ini

-------------------------------

[Session]

session.save_handler = files 

...

session.save_path = "/var/lib/php/session"

-------------------------------

이부분을 

-------------------------------

[Session]

session.save_handler = memcached

...

session.save_path = "127.0.0.1:11211"

-------------------------------

이렇게 변경해 줍니다.

 

 

 

- 아파치 재시작 

* 웹서버를 재시작 해줘야 설정값이 적용 됩니다.

# service httpd restart

 

 

2. 닌자 뮤텍스 모듈 설치 (아래 Installation 참고)

https://github.com/arvenil/ninja-mutex

 

* 유의사항1 : root 계정으로 하면 안됨. 일반 사용자 계정으로 해야 함.

* 유의사항2 : 설치 시 Composer 부분 두 문구만 실행하면됨. Running tests, Something doesn't work 는 안해도 됨 

 

Usage 부분의 Mutex 로 테스트 해보면 됨.

 

3. 테스트

test.php 를 생성하여 하기 입력.

<?php

require '../libs/ninja-mutex/vendor/autoload.php';

 

use NinjaMutex\Lock\MemcacheLock;

use NinjaMutex\Mutex;

 

$memcache = new Memcache();

$memcache->connect('127.0.0.1', 11211);

$lock = new MemcacheLock($memcache);

$mutex = new Mutex('very-critical-stuff', $lock);

if ($mutex->acquireLock(10000)) {

    // Do some very critical stuff

    sleep(10);

 

    // and release lock after you finish

    $mutex->releaseLock();

} else {

    throw new Exception('Unable to gain lock!');

}

?>

 
* 부연 설명1 : 빨간색 부분의 10000 은 경합 대기 시간으로 10초 동안 락을 얻지 못하면 예외 발생하여 프로그램 중단시키게 됩니다.
* 부연 설명2 : 빨간색 부분의 sleep(10); 은 테스트 목적으로 10초 슬립합니다. 터미널1에서 php test.php 를 실행 후 터미널2에서 php test.php 를 실행하게 되면 뮤텍스 락이 정상 동작하는 것을 확인할 수 있습니다.
* 부연 설명3 : 파란색 부분 very-critical-stuff 은 뮤텍스의 키 설정으로 뮤텍스 락을 설정할 그룹군을 설정할 수 있습니다. 프로그램 전체에 대해서 뮤텍스 락을 설정하는 것은 비효율적인데 이 키를 잘 활용하면 뮤텍스 락 그룹군 설정하여 성능적으로 효율을 높일 수 있습니다.
제목 글쓴이 날짜
최신이미지 추출시 사진 아래 내용들 중간 정돈 방법 [4] file 팔공산 2007.08.23
상단메뉴 개수를 지정한 만큼만 보여주고자 할 경우 [9] 똑디 2007.08.23
여러 개의 메뉴를 달아보자! [5] file 고라리 2007.08.23
제로보드 관리자 레벨이 관리자 레벨로 안나올때 [5] 나무넷 2007.08.23
위지웍에디터가 갑자기 작동을 안할때 팔공산 2007.08.23
w3c.org의 웹페이지 유효성 검사기 file 바람처럼831 2007.08.24
(달력/Archive 문제해결법) 날짜로 검색하는 것이 제대로 안될때 [8] 베니 2007.08.25
확장변수 [2] 다케루 2007.08.25
0.1.1 패치하시면 가입시 기본 회원 그룹 선택해야해요. [2] 다케루 2007.08.26
로그인 불가 - APM 관리자일 때 (일반적인 경우 아님) [3] Sx3 2007.08.26
플래쉬 화일을 헤더와 푸터에 넣어보기 [11] file choi2007 2007.08.27
분류(카테고리) 색상 지정하기. [12] file 송암 2007.08.27
올블로그에서 제로보드가 깨질때.. [1] file 스컬리지금어디야 2007.08.27
홈페이지에 게시판을 iframe, include로 이용하시는분들 느까끼 2007.08.27
썸네일 크기 줄이는 법 [6] 느까끼 2007.08.27
템플릿 컴파일 파일 지우기 귀찮을때 [1] 젬스송 2007.08.28
최신댓글에 닉네임 출력하기... [5] 똑디 2007.08.28
템플릿 파일에서 일반 PHP 코드 사용 [3] 화니군 2007.08.28
게시판 분류(카테고리)를 텍스트&이미지로 나열 하기 [11] Simulz 2007.08.29
xe_layout 을 자신의 웹 첫화면과 연결 [2] justrue 2007.08.29