웹마스터 팁

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

(참조 자료)

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 은 뮤텍스의 키 설정으로 뮤텍스 락을 설정할 그룹군을 설정할 수 있습니다. 프로그램 전체에 대해서 뮤텍스 락을 설정하는 것은 비효율적인데 이 키를 잘 활용하면 뮤텍스 락 그룹군 설정하여 성능적으로 효율을 높일 수 있습니다.
제목 글쓴이 날짜
파시ㅇ 예제입니다. [3] file 유창화 2015.11.13
CentOS PHP TS/NTS 모드 설치 방법 마루디자인 2015.11.10
글 수정일때만 업데이트 아이콘이 뜨게 하고 싶은 경우 ( 댓글 입력시에는 별도로 안 뜨고) sejin7940 2015.11.02
모바일 글쓰기 페이지 경고창 [2] file 자동차 2015.09.26
자바스크립트로 get값 추철하기 [1] 한꼬마 2015.10.28
게시판 하단 검색대상의 순서,노출항목 들 제어하는 방법 [1] sejin7940 2013.10.16
한 XE1.8.11 게시판을 다른 XE1.8.11 웹에 옮기려면 어떤 절차를 밟아야 되나요? [3] 유샤인 2015.10.24
누리고쇼핑몰 postcodify 주소모듈 설치시 최근배송지 클릭시 오류해결방법 [5] garnecia 2015.03.28
member_srl 만으로 닉네임값 출력하기 키큰아이 2015.10.24
게시판 작성시 본문에 자동으로 삽입 스크립트 한꼬마 2015.10.23
cron 에서 서비스 컨트롤에 따른 소소한 팁 마루디자인 2015.10.22
폰갭 admob 이용버전이 바뀌었습니다. 한꼬마 2015.10.19
[자료실 모듈] 경로 사용 해제후에 자료 정보 수정시 경로값 필요 문구 발생시 불금 2015.10.19
크롬브라우저 모바일 개발시 해상도 조절 [1] file 픽스소프트 2014.09.17
외부 페이지에서 회원 프로필 정보(확장변수) 나타내기 한꼬마 2015.10.14
jquery 플러그인: rolVideo.min.js 공개하였습니다. [1] 딴죽을거는남자 2015.10.04
nginx, php-fpm, opcache, memcached, xcache 등을 모두 알아서 설치해주는 centminmod 라고 아시나요? [9] 그럴수 2015.08.21
[작고 왜소한 팁] 각종 loop 반복문에서 각기 다른 아이디값이나 클래스값부여하기 [1] 410contents 2015.10.02
"이 페이지 나가기" 경고창이 뜨는 사이트의 경우 [23] 투씨 2014.02.15
모바일 게시판 스킨에서 댓글 작성자 레벨 아이콘이 나오지 않는 오류 수정하기 [3] 퍼니엑스이 2015.09.16