웹마스터 팁

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

(참조 자료)

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 은 뮤텍스의 키 설정으로 뮤텍스 락을 설정할 그룹군을 설정할 수 있습니다. 프로그램 전체에 대해서 뮤텍스 락을 설정하는 것은 비효율적인데 이 키를 잘 활용하면 뮤텍스 락 그룹군 설정하여 성능적으로 효율을 높일 수 있습니다.
제목 글쓴이 날짜
확장변수값 계산하여 게시판 리스트에 출력하기(총계 게시판) [1] file klaist 2009.11.30
PHP 뮤텍스 락 설치법(memcached 활용) [1] 에이트 2018.09.03
PHP 뮤텍스 락 설치법(redis 활용) 에이트 2018.09.11
위젯 가운데 정렬 하는법 [3] 불금 2015.07.05
요즘 제가 jquery 웹앱 솔루션을 개발했습니다. [2] file 안드류KIM 2018.04.03
썸네일 방식으로 이미지 원본 주소 가져오기 에이트 2018.08.22
다른 서버 간 서브도메인 쿠키 공유 에이트 2018.08.04
DB를 손쉽게 관리 [1] EISOFT 2018.07.15
act로 다른 페이지 보여주기 이온디 2018.07.25
CKEditor 이용시 몇가지 유용한 설정 [11] prologos 2015.05.02
Google 스프레드시트에서 구글 번역으로 XE 다국어 내용 만들기(Lang.xml 용도) file 달빛늑대 2018.07.17
Code-Highlighter 3.0.83 가로 스크롤바를 어디론가 보내 버리고 싶으신 분. 달빛늑대 2018.07.16
XE용 CKEditor v4.9.2 (다크 스킨 수정) file 큰돌♡ 2018.07.04
[수정]알림센터 Lite에 메일발송 기능을 추가하기 [13] file 매실茶 2013.11.25
고정도메인 host 변경하기 해피정닷컴 2016.03.11
도메인 변경 또는 설치 폴더 변경시 이미지 주소변경하기 file 해피정닷컴 2018.06.08
게시판글 엑셀 파일 보내기 php7용 file 황금날개 2018.06.05
단축url API 사용하시는 분들... 미스터강 2018.06.01
글 작성시 미리 저장된 서식 불러오기. [10] file 개돌 2009.07.09
[PHP] 이름 및 연락처 마스킹 처리 ppumweb 2018.05.21