lw nb1411-01-memcached+php+my sql

6
Memcached + PHP + MySQL Lowy Shin 日本語バージョンのご希望の方はお気軽にご連絡ください。 (最後ページのLinked Inプロフィールにメッセージをください。:) )

Upload: lowy-shin

Post on 18-Jul-2015

99 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Lw nb1411-01-memcached+php+my sql

Memcached + PHP + MySQL

Lowy Shin

日本語バージョンのご希望の方はお気軽にご連絡ください。(最後ページのLinked Inプロフィールにメッセージをください。:) )

Page 2: Lw nb1411-01-memcached+php+my sql

Basic Structure

Web Server

Web Server

Web Server

memcached

memcached

MySQL

memcached 는 MySQL 서버에부하를발생시키는것을줄이기위해만들어진 DB Cache 서버입니다.

위의구조로보면웹서버는유저에따라서무한히늘리면되고, memcached 서버는자체허용량에맞추어늘리거나이중화구성을하는용도로늘립니다.

memcached의목적은 DB엑세스를줄이기위해자주요청하는 Query 의결과셋을 memcached의메모리에저장하여빨리보여줌으로서 DB의부하를줄여주기위함입니다.

Web Server

Web Server

Web Server

memcached

memcached

MySQL

memcached

웹서버에같이 memcached를설치하는방법도있는데나쁜것같진않네요.

Page 3: Lw nb1411-01-memcached+php+my sql

Supported Language

(Web) Server memcached MySQL

일반적으로 Linux위에 memcached를설치하는데윈도우버전은개인이만들어서 no promise, no

support 라고적혀있습니다. memcached.org에서는리눅스버전만다운로드받을수있습니다.

설치방법은너무많이나와있고설치가간단하므로설치는생략합니다.

간단한설정으로다음두언어로호출이가능합니다.

- PHP

- Python

호출하는포인트는위그림의첫번째인 (Web) Server에서입니다. 웹서버에 memcached, MySQL을전부설치여동일서버에서호출하는경우도있지만, 서비스용보다는테스트용일때그렇게구축하겠죠.

.net(닷넷) 기반의클라이언트가있긴하지만역시 memcached.org에서제공하지않는개인이만든클라이언트입니다.

python 예제 :

http://code.openark.org/blog/mysql/using-memcached-functions-for-mysql-an-automated-alternative-to-

query-cache

PHP 예제 :

http://pureform.wordpress.com/2008/05/21/using-memcache-with-mysql-and-php/

Page 4: Lw nb1411-01-memcached+php+my sql

mysql_query_cache Architecture

SQL sendFInd SQL statement

from memcache

SQL exist?

execute SQL

Get from memcachedSet SQL statement and

Data to memcached

Return Data

Web Server에서 SQL을실행시키려합니다.

이때 memcached에서동일한 SQL문이메모리상에남아있는지확인합니다.

memcached에동일한 SQL문이있다면, 해당 SQL문의 Data를메모리에서추출하며리턴합니다. MySQL

DB를거치지않는것이죠.

만약 memcached에 SQL문이없다면 DB에서 SQL을실행합니다.

그결과값을 memcached에저장하고결과를웹서버에제공합니다.

결국같은 SQL이라면 memcached를이용하게되므로횟수만큼 MySQL에부하가줄어들수있습니다.

하지만, 가장중요한것은위알고리즘대로 PHP소스를만들어야한다는것입니다.

전페이지의 URL에서의소스가바로위알고리즘의 Select만을구현한것입니다. 이제여러분이 Insert,

Update, Delete를구현해야겠지요.. ^^;;

Page 5: Lw nb1411-01-memcached+php+my sql

Exception

DB Data ChangedFlush relatied queries

Query값이변경되지않았지만, 다른 query로인해 DB의데이터가변경된경우가종종발생합니다.

이미개발설계에서도 memcached를사용하는경우이경우까지생각해서처리함수를만들어야겠지요.

우선 DB data가변경되는경우, row베이스로 flush할것인지, table베이스로 flush할것인지를결정합니다.

그리고 DB의 data가변경된다음변경이있을법한 query statement를찾아서 flush를해주어야합니다.

memcached의 flush 명령은해당데이터를메모리상에서지우는명령입니다.

즉, 메모리에서지워지면자연히값이없으므로같은 query가오더라도 MySQL을거쳐가게되겠죠.

Page 6: Lw nb1411-01-memcached+php+my sql

Epilogue

memcached는 APM, LAMP베이스의서비스에상당히많이사용되어지고있습니다.

간단하고, 관리가편리하기때문이죠.

요즘같은하이브리드클라우드(Hybrid Cloud)환경에서는더할나위없이훌륭한서비스입니다.

하지만위의내용처럼예외처리및 memcached의용량초과로인해 memcached를늘렸을때서로의정합성문제등을충분히고려하여설계, 개발을하지않으면데이터의정합성문제가반드시나타납니다.

어떤용도로사용할것인지를미리확인하고, 그에대한시스템설계, 개발모듈설계를통해서잘만들어지기만한다면상당한퍼포먼스를얻을수있을것입니다.

author : Lowy Shin

Profile :

https://www.linkedin.com/pub/lowy-shin/23/700/211

Global Infrastructure Information Management Platform :

http://msp.littleworld.net

Personal linkbook management :

http://link.littleworld.net