웹마스터 팁

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

(참조 자료)

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 은 뮤텍스의 키 설정으로 뮤텍스 락을 설정할 그룹군을 설정할 수 있습니다. 프로그램 전체에 대해서 뮤텍스 락을 설정하는 것은 비효율적인데 이 키를 잘 활용하면 뮤텍스 락 그룹군 설정하여 성능적으로 효율을 높일 수 있습니다.
제목 글쓴이 날짜
file 모듈 insertFile() manual_insert 시 디렉토리생성 에러 문제 해결 방법 onTrust 2019.01.02
모듈에서 무조건 JSON/XML 형식으로 출력하기 [1] Devel0per 2015.04.03
새글/업데이트/이미지/동영상/첨부파일 아이콘 없애기 [18] file 老姜君 2008.11.21
무료 psd, html 탬플릿, 아이콘 사이트공유합니다. 허허길드짱 2018.11.27
act로 다른 페이지 보여주기 [1] 이온디 2018.07.25
단축url API 사용하시는 분들... 미스터강 2018.06.01
확장변수값 계산하여 게시판 리스트에 출력하기(총계 게시판) [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
CKEditor 이용시 몇가지 유용한 설정 [11] prologos 2015.05.02
Google 스프레드시트에서 구글 번역으로 XE 다국어 내용 만들기(Lang.xml 용도) file 달빛늑대 2018.07.17
Code-Highlighter 3.0.83 가로 스크롤바를 어디론가 보내 버리고 싶으신 분. 달빛늑대 2018.07.16
[수정]알림센터 Lite에 메일발송 기능을 추가하기 [11] file 매실茶 2013.11.25
고정도메인 host 변경하기 해피정닷컴 2016.03.11
도메인 변경 또는 설치 폴더 변경시 이미지 주소변경하기 file 해피정닷컴 2018.06.08