33
Memcached Technology Karn Sakulsak IT Manager, THiNKNET Co., Ltd.

Memcached Server Technology2.pdf

Embed Size (px)

DESCRIPTION

Memcached Server Technology2

Citation preview

Page 1: Memcached Server Technology2.pdf

Memcached Technology

Karn SakulsakIT Manager, THiNKNET Co., Ltd.

Page 2: Memcached Server Technology2.pdf

Agenda

● What is memcached?● Lab: Interactive memcached session● Inside memcached● PHP interface to memcached● Case study: Memcached as PHP session storage

 Case study is used for tur

Page 3: Memcached Server Technology2.pdf

What is memcached?

Page 4: Memcached Server Technology2.pdf

What is memcached?

● Multi-purpose network memory○ Can store anything○ Can be shared among group of servers

● Plain text TCP protocol● In 2004, Livejournal.com has 28 memcached instances on

10 servers, caching total 30GB of data with 92% hit rate● Benefits

○ Off-load database server○ Boost performance for often used look up tables

● Drawbacks○ No security in memcached protocol so we must secure

it with network policy

Page 5: Memcached Server Technology2.pdf

What is memcached?

● Installation (Linux)○ sudo yum install memcached

● Usage○ memcached -d -u memcached -m 64 -l 127.0.0.1 -p

11211

Page 6: Memcached Server Technology2.pdf

Interactive session

 

Page 7: Memcached Server Technology2.pdf

Memcached protocol

● Store command○ <command> <key> <flags> <exptime> <bytes>\r\n○ command = set/add/replace/append/prepend/cas

● Retrieval command○ <command> <key>*\r\n○ command = get/gets

● Deletion○ delete <key> [<time>]\r\n

● Increment / Decrement○ <command> <key> <value>\r\n○ command = incr/decr

● Statistics○ stats [items|slabs]

Page 8: Memcached Server Technology2.pdf

Memcached protocol

● Note: Store command○ <flags> = Per client used such as PHP use value 1 to

indicate that the stored value is Array, 0 for String○ <exptime> 0 = No expiration time (will be destroyed

by manual deletion or eviction)

Page 9: Memcached Server Technology2.pdf

Inside memcached

 

Page 10: Memcached Server Technology2.pdf

Memcached storage schemamemcached allocated memory

page page

slab

slab

Page 11: Memcached Server Technology2.pdf

Memcached storage schema

● Storage rule○ Each page allocation will not be over 1MB○ Every slabs in the same page have same size○ Each key will be stored in one slab

● So we can store at most "1MB" of data per key● Pages with same-size slab are called "Slab class"● Page size

○ slab size x number of slabs per page <= 1MB● Page will not be deallocated or change slab size after

created ● We can pre set minimum slab size and its growth to be

optimized with our application (via -n, -f)

Page 12: Memcached Server Technology2.pdf

Memcached retrieval mechanism

● Key indexing○ O(1) hashing algorithm

● No key list function● Multiple memcached server

○ Client module is responsible for server hashing so that retrieval time is O(1) + O(1)

Page 13: Memcached Server Technology2.pdf

PHP interface

 

Page 14: Memcached Server Technology2.pdf

PHP interface with memcached

● Memcached module○ Can be installed via pecl○ sudo yum install php-pecl-memcache

● Usage○ Memcache class

■ Memcache::connect■ Memcache::addServer ■ Memcache::set■ Memcache::get■ Memcache::delete

Page 15: Memcached Server Technology2.pdf

Sample code$memcache = new Memcache;$memcache->addServer('localhost', 11211) or die ("Could not connect");$memcache->addServer('localhost', 11212) or die ("Could not connect");if($value = $memcache->get($key)) {  echo "get $key (".strlen(serialize($value)).")- OK\n";} else {  echo "get $key - Not found\n";}if($memcache->set($key, str_pad('', $size, $pad), false, 0)) {  echo "set $key - OK\n";} else {  echo "set $key - FAIL\n";}

Page 16: Memcached Server Technology2.pdf

Case study: Memcached as PHP session storage

 

Page 17: Memcached Server Technology2.pdf

Memcached as PHP session storage

● What do we have?○ session_set_save_handler○ session_set_cookie_params

● session_set_save_handler○ Customize how session work

■ How to store / retrieve / destroy session data ● session_set_cookie_params

○ Customize parameter of session cookie■ Expiration time■ Path■ Domain

Page 18: Memcached Server Technology2.pdf

Walk through code snippet

function mcs_start($param) {  global $__mcs_memcached;  global $__mcs_timeout;  ...  $__mcs_memcached->connect($host['host'], $host['port']);  ...  session_set_save_handler("__mcs_open", "__mcs_close", "__mcs_read", "__mcs_write", "__mcs_destroy", "__mcs_gc");  session_set_cookie_params(0, '/', $domain);  session_start();}

Page 19: Memcached Server Technology2.pdf

Walk through code snippet

function __mcs_openfunction __mcs_closefunction __mcs_gc {  return true;}

Page 20: Memcached Server Technology2.pdf

Walk through code snippet

function __mcs_read($id) {  global $__mcs_memcached;    if(isset($__mcs_memcached)) {    if($sess_data = $__mcs_memcached->get(MCS_KEYPREFIX.$id)) {    } else {      $sess_data = '';    }    return $sess_data;  } else {    return '';  }}

Page 21: Memcached Server Technology2.pdf

Walk through code snippet

function __mcs_write($id, $sess_data) {  global $__mcs_memcached;  global $__mcs_timeout;    if(isset($__mcs_memcached) && isset($__mcs_timeout)) {    return $__mcs_memcached->set(MCS_KEYPREFIX.$id, $sess_data, false, $__mcs_timeout);  } else {    return false;  }}

Page 22: Memcached Server Technology2.pdf

Walk through code snippet

function __mcs_destroy($id) {  global $__mcs_memcached;    if(isset($__mcs_memcached)) {    return $__mcs_memcached->delete("mcs_$id");  } else {    return false;  }}

Page 23: Memcached Server Technology2.pdf

Usage test: set.php

set.php-----------require('lib.mcsession.php'); mcs_start(array(    'server' => 'localhost',    'port' => '11211',    'domain' => '.thinknet.co.th'));$_SESSION['username'] = 'thinknet';echo "USERNAME[".$_SESSION['username']."]";

Page 24: Memcached Server Technology2.pdf

Usage test: get.php

get.php-----------require('lib.mcsession.php'); mcs_start(array(    'server' => 'localhost',    'port' => '11211',    'domain' => '.thinknet.co.th'));echo "USERNAME[".$_SESSION['username']."]";

Page 25: Memcached Server Technology2.pdf

Usage test: Run

Output from set.php:USERNAME[thinknet]Output from get.php:USERNAME[]

Why can't we get the username session variable in get.php?!!!

Page 26: Memcached Server Technology2.pdf

Debug

We found this in our error_log:PHP Fatal error:  Call to a member function set() on a non-object in ...

Why?Because __mcs_write (session write) is called after memcached connection object is destroyed!

Page 27: Memcached Server Technology2.pdf

Debug

Solution

function mcs_end() {  session_write_close(); }

Usage:This function, mcs_end, must be called once follow last session-related statement or before script end.

We can modify our mcs_start to register mcs_end as shutdown function for PHP script via "register_shutdown_function". (This mod is implemented in mcsession 0.1.2)

Page 28: Memcached Server Technology2.pdf

Usage test #2: set.php

set.php-----------require('lib.mcsession.php'); mcs_start(array(    'server' => 'localhost',    'port' => '11211',    'domain' => '.thinknet.co.th'));$_SESSION['username'] = 'thinknet';echo "USERNAME[".$_SESSION['username']."]";mcs_end();

Page 29: Memcached Server Technology2.pdf

Usage test #2: get.php

get.php-----------require('lib.mcsession.php'); mcs_start(array(    'server' => 'localhost',    'port' => '11211',    'domain' => '.thinknet.co.th'));echo "USERNAME[".$_SESSION['username']."]";mcs_end();

Page 30: Memcached Server Technology2.pdf

Usage test #2: Run

Output from set.php:USERNAME[thinknet]Output from get.php:USERNAME[thinknet]

   CHAIYO!!!

Page 31: Memcached Server Technology2.pdf

Conclusion

● Benefits○ We can use memcached as shared-session among

group of servers so that our web users can move along server farm without loss session related data.

● Drawbacks○ Session security is compromised by being network-

accessible, we must keep it hidden in our own private network and using firewall protection

○ At current version of mcsession, 0.1.1, we cannot browse session data

Page 32: Memcached Server Technology2.pdf

Q & A

 

Page 33: Memcached Server Technology2.pdf

References

● Fitzpatrick, Brad. memcached: a distributed memory object caching system [homepage on the Internet] Available from: http://www.danga.com/memcached/

● Memcached protocol document [document on the Internet]Available from: http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt

● Fitzpatrick, Brad. Distributed Caching with Memcached [document on the Internet] Available from: http://www.linuxjournal.com/article/7451

● PHP Manual [document on the Internet]Available from: http://php.net/manual/en/index.php