Plugin Memcached%20 Study
description
Transcript of Plugin Memcached%20 Study
![Page 1: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/1.jpg)
Memcachedhttp://download.tangent.org/talks/Memcached%20Study.pdf
Thursday, April 23, 2009
![Page 2: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/2.jpg)
memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
Thursday, April 23, 2009
![Page 3: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/3.jpg)
Who?
• Yahoo
• Amazon
• LiveJournal
• Mixi
• ...
Thursday, April 23, 2009
![Page 4: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/4.jpg)
Why?(aka why would I...)
Thursday, April 23, 2009
![Page 5: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/5.jpg)
Thursday, April 23, 2009
![Page 6: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/6.jpg)
LiveJournal
• Origin of memcached
• 30G of cache. Terabytes of data
• Writes to DB based on reads from the DB, not cache
Thursday, April 23, 2009
![Page 7: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/7.jpg)
Mixi
• Memcached on dedicated servers
• 300 servers in production (reuse old MySQL Servers)
• 4/8 gigs of Memory
• 15,000 qps / 400Mbps throughput
Thursday, April 23, 2009
![Page 8: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/8.jpg)
Thursday, April 23, 2009
![Page 10: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/10.jpg)
Grazr
Thursday, April 23, 2009
![Page 11: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/11.jpg)
Memcached
Incoming Data
Processing
100+ Nodes2gigs a Node
Thursday, April 23, 2009
![Page 12: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/12.jpg)
How
Thursday, April 23, 2009
![Page 13: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/13.jpg)
Server
• Slab Allocator
• Libevent based
• Simple Protocol (no xml)
• Server has Internal Hash Table
• Servers know nothing about each other
Thursday, April 23, 2009
![Page 14: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/14.jpg)
Clients
• Client hashes Key to Server List (distribution)
• Serializes the Object (server just likes byte arrays)
• Compresses data
Thursday, April 23, 2009
![Page 15: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/15.jpg)
Consistent Hash
Thursday, April 23, 2009
![Page 16: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/16.jpg)
So what should I ask?
• How do I dump data?
• How is it redundant? *
• How does it handle failover?*
• How does it authenticate?
Thursday, April 23, 2009
![Page 17: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/17.jpg)
Details on the Server?
• set/get/replace/add
• append/prepend
• increment/decrement
• cas (compare and swap atomic!)
• stats (detail)
Thursday, April 23, 2009
![Page 18: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/18.jpg)
Platforms
• FreeBSD and Linux are top tier
• Windows exists
• Solaris (as of 1.2.5)
• OSX Good Support
Thursday, April 23, 2009
![Page 19: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/19.jpg)
Examples
Thursday, April 23, 2009
![Page 20: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/20.jpg)
Ruby
Thursday, April 23, 2009
![Page 21: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/21.jpg)
# Set up client object
require 'memcache' servers = ['127.0.0.1:43042', '127.0.0.1:43043'] CACHE = MemCache.new(servers, :namespace => 'my_app')
Thursday, April 23, 2009
![Page 22: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/22.jpg)
# Get; fall through to Rails' MySQL load if missing
key = "recent_posts" # Try to get; returns nil on failure posts = CACHE.get(key)
unless posts # Load from DB posts = Post.find(:all, :limit => 10, :order => 'id DESC') # Cache the new value, which is automatically serialized CACHE.set(key), posts, 60 end
Thursday, April 23, 2009
![Page 23: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/23.jpg)
# Ghetto locking implementation for memcache-client # from http://fauna.rubyforge.org/svn/interlock/trunk/lib/interlock/lock.rb
def lock(key, lock_expiry = 30, retries = 5) retries.times do |count| # Try to acquire the lock response = CACHE.add("lock:#{key}", "Locked by #{Process.pid}", lock_expiry) if response == "STORED\r\n" # We got it begin # Yield the current value to the closure value = yield(CACHE.get(key)) # Set the new value returned from the closure CACHE.set(key, value) # We're done ('ensure' block will still run) return value ensure # Release the lock CACHE.delete("lock:#{key}") end else # Exponentially back off requests if the lock can't be acquired sleep((2**count) / 2.0) end end # We waited and waited but our turn never came raise MemCacheError, "Couldn't acquire lock for #{key}" end
Thursday, April 23, 2009
![Page 24: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/24.jpg)
PHP
Thursday, April 23, 2009
![Page 25: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/25.jpg)
/** * Initalize Memcache object and add local server 127.0.0.1 using port 11211 */ $cache = new Memcache; $cache->addServer("127.0.0.1",11211);
Thursday, April 23, 2009
![Page 26: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/26.jpg)
/** Look in cache, if not found, set object (misses null) **/ if (!$user = $cache->get($user_key)) { /** * Set object with expire of 1 hour and no compression */ $cache->set($user_key,$value,NULL, $expire); $user = $value; }
Thursday, April 23, 2009
![Page 27: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/27.jpg)
/* Get user counter value (does not handle add fail) */ if (!$counter = $cache->get($counter_key)) { /* No counter, set to 1 */ $cache->add($counter_key,1); } else { /* Increment by 1 */ $cache->increment($counter_key); }
Thursday, April 23, 2009
![Page 28: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/28.jpg)
/* Print out stats from memcached server */ print_r($cache->getStats()); /* Print out extended stats from memcached server */ print_r($cache->getExtendedStats()); /* Flush memcached (bad idea in production)*/ var_dump($cache->flush());
Thursday, April 23, 2009
![Page 29: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/29.jpg)
C
Thursday, April 23, 2009
![Page 30: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/30.jpg)
libmemcached
• C/C++ (many language wrappers)
• Multiget support
• Async/Sync Modes (including buffered)
• Supports Binary Protocol (TCP/UDP)
• Read Through Cache Support
Thursday, April 23, 2009
![Page 31: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/31.jpg)
memcached_st *memc; memcached_return rc; memc= memcached_create(NULL); ...do stuff... memcached_free(memc);
Thursday, April 23, 2009
![Page 32: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/32.jpg)
memcached_server_st *servers; memcached_st *memc= memcached_create(NULL); char servername[]= "0.example.com"; servers= memcached_server_list_append(NULL, servername, 400, &rc); for (x= 0; x < 20; x++) { char buffer[SMALL_STRING_LEN]; snprintf(buffer, SMALL_STRING_LEN, "%u.example.com", 400+x); servers= memcached_server_list_append(servers, buffer, 401, &rc); } rc= memcached_server_push(memc, servers); memcached_server_free(servers); memcached_free(memc);
Thursday, April 23, 2009
![Page 33: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/33.jpg)
char *key= "foo"; char *value; size_t value_length= 8191; unsigned int x; value = (char*)malloc(value_length);
for (x= 0; x < value_length; x++) value[x] = (char) (x % 127); for (x= 0; x < 1; x++) { rc= memcached_set(memc, key, strlen(key), value, value_length, (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); } free(value);
Thursday, April 23, 2009
![Page 34: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/34.jpg)
memcached_return rc; char *keys[]= {"fudge", "son", "food"}; size_t key_length[]= {5, 3, 4}; uint32_t flags; char return_key[MEMCACHED_MAX_KEY]; size_t return_key_length; char *return_value; size_t return_value_length;
rc= memcached_mget(memc, keys, key_length, 3);
while ((return_value= memcached_fetch(memc, return_key, &return_key_length, &return_value_length, &flags, &rc))) { free(return_value); }
Thursday, April 23, 2009
![Page 35: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/35.jpg)
Memcached foo; char *value_set= "Data for server A"; char *master_key_a= "server-a"; char *master_key_b= "server-b"; char *key= "xyz"; char *value; size_t value_length;
foo.set_by_key(master_key_a, key, value_set, strlen(value_set)); value= foo.get_by_key(master_key_a, key, &value_length);
assert((memcmp(value, value_set, value_length) == 0));
value= foo.get_by_key(master_key_b, key, &value_length); assert((memcmp(value, value_set, value_length) == 0));
return 0;
Thursday, April 23, 2009
![Page 36: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/36.jpg)
Application Integration
Thursday, April 23, 2009
![Page 37: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/37.jpg)
lighttpd/mod_memcache
• Cache files from disk
• Specify mime/types
• Create Expire Times
Thursday, April 23, 2009
![Page 38: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/38.jpg)
Apache (mod_memcached)• CAS operations exposed
• GET/PUT/DELETE operations
• Still Alpha
• (pandoraport.com!)
Thursday, April 23, 2009
![Page 39: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/39.jpg)
NGINX
• Support variable Time outs
• Based on Perl
• http://wiki.codemongers.com/NginxHttpMemcachedModule
• http://www.igvita.com/2008/02/11/nginx-and-memcached-a-400-boost/
Thursday, April 23, 2009
![Page 40: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/40.jpg)
Memcached Functions for MySQL
(and Drizzle)
Thursday, April 23, 2009
![Page 41: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/41.jpg)
Overview...
• Uses UDF API and libmemcached
• Manage memcached Cluster via SQL
• Read through Cache
• Write through Cache
Thursday, April 23, 2009
![Page 42: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/42.jpg)
Thursday, April 23, 2009
![Page 43: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/43.jpg)
Installation
• CREATE FUNCTION memc_servers_add RETURNS INT SONAME "libmemcached_functions_mysql.so";
• CREATE FUNCTION memc_set RETURNS INT SONAME "libmemcached_functions_mysql.so";
• CREATE FUNCTION memc_get RETURNS STRING SONAME "libmemcached_functions_mysql.so";
Thursday, April 23, 2009
![Page 44: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/44.jpg)
Functions Available
• memc_servers_set();
• memc_servers_behavior_set()
• memc_set()
• memc_get()
• memc_append()
• memc_prepend()
Thursday, April 23, 2009
![Page 45: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/45.jpg)
Setting via SELECT
select id, url, memc_set(concat('feeds', md5(url)), url) from feeds;
select memc_get(concat('feeds', md5(url))) from feeds;+-------------------------------------------------------+| memc_get(concat('feeds', md5(url))) |+-------------------------------------------------------+| http://feeds.feedburner.com/littlegreenfootballs/Ilds | | http://del.icio.us/rss/jacomien | | http://del.icio.us/rss/tags/rmj20 | | http://www.jihadwatch.org/index.rdf | | http://www.connotea.org/rss/user/rmj20 | | http://devblog.grazr.com/?feed=rss2x | | http://feeds.feedburner.com/littlegreenfootballs/kyeH | +-------------------------------------------------------+
Thursday, April 23, 2009
![Page 46: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/46.jpg)
Trigger
insert into feeds (url) values ('http://grazr.com/feedlist.xml');
select memc_get(concat('feeds:', md5('http://grazr.com/feedlist.xml')));+------------------------------------------------------------------+| memc_get(concat('feeds:', md5('http://grazr.com/feedlist.xml'))) |+------------------------------------------------------------------+| http://grazr.com/feedlist.xml | +------------------------------------------------------------------+
DROP TRIGGER IF EXISTS feed_insert;CREATE TRIGGER feed_insert BEFORE INSERT ON feeds FOR EACH ROW BEGIN SET @mm= memc_set(concat('feeds:',md5(NEW.url)), NEW.url);END |
Thursday, April 23, 2009
![Page 47: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/47.jpg)
Memcached Replication via MySQL
INSERT INTO table_a VALUES (“key”, “value”, “values”); INSERT INTO blackhole_table VALUES (memc_delete(“key”));
Thursday, April 23, 2009
![Page 48: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/48.jpg)
Implementation
Thursday, April 23, 2009
![Page 49: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/49.jpg)
Limits
• Key Size (250 bytes) (1.2 <)
• Data Size (under 1 megabyte)
• 32bit/64bit (maximum size of the process)
• Maxbytes (limits item cache, not everything!)
Thursday, April 23, 2009
![Page 50: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/50.jpg)
LRU
• Least recently accessed items are up for eviction
• One LRU exists per “slab class”
• LRU evictions don't need to be common
• Can be common if you set expiration to 0
• Monitor evictions via 'stats items' command
Thursday, April 23, 2009
![Page 51: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/51.jpg)
Threads
• No single-threading in versions past 1.2
• Great for large instances (16G+)
• Also great for large multiget requests
• Improvements in 1.3+
• Don't set too many threads
• One per CPU
• No more than 8 total for 1.2
Thursday, April 23, 2009
![Page 52: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/52.jpg)
Slab Allocator
• Memory permanently allocated from OS
• Classes created by chunk size
• Cannot (presently) reassign slab pages
• Carefully use 'stats sizes' to test efficiency
Thursday, April 23, 2009
![Page 53: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/53.jpg)
Binary Protocol
EXTRA FIELD(Command Specific)
HEADER
KEY
VALUE
24 bytes
Required
As neededSizes are defined in the header
* Values must be in network byte order.
Thursday, April 23, 2009
![Page 54: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/54.jpg)
Binary ProtocolMAGIC
(1 byte)Key Length
(2 bytes)Opcode
(1 byte)
Extra Length(1 byte)
Data Type(1 byte)
Reserved(2 bytes)
Total Body Length(4 bytes)
Opaque(4 bytes)
CAS (Compare and Swap)(8 bytes)
Thursday, April 23, 2009
![Page 55: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/55.jpg)
Response HeaderMAGIC
(1 byte)Key Length
(2 bytes)Opcode
(1 byte)
Extra Length(1 byte)
Data Type(1 byte)
Status(2 bytes)
Total Body Length(4 bytes)
Opaque(4 bytes)
CAS (Compare and Swap)(8 bytes)
Thursday, April 23, 2009
![Page 56: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/56.jpg)
Tools
Thursday, April 23, 2009
![Page 57: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/57.jpg)
Protocol
• Telnet’able (see doc/protocol.txt)
• Store commands are binary (no escaping)
• WireShark support for Binary Protocol
Thursday, April 23, 2009
![Page 58: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/58.jpg)
Thursday, April 23, 2009
![Page 59: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/59.jpg)
memcached-tool
• Example minimal monitoring tool
• Shows details of server stats, slabs
• memcached-tool 10.0.0.1 display
• memcached-tool 10.0.0.1 stats
Thursday, April 23, 2009
![Page 60: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/60.jpg)
libmemcached Tools
• memcp
• memrm
• memstat
• memslap (hahahhaha)
Thursday, April 23, 2009
![Page 61: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/61.jpg)
MRTG
• Plenty of interfaces monitored
• Old technology, been around forever
Thursday, April 23, 2009
![Page 62: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/62.jpg)
Thursday, April 23, 2009
![Page 63: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/63.jpg)
...and others
• Cacti
• http://dealnews.com/developers/cacti/memcached.html
• Ganglia
• http://ganglia.wiki.sourceforge.net/
Thursday, April 23, 2009
![Page 64: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/64.jpg)
Current Connections
Thursday, April 23, 2009
![Page 65: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/65.jpg)
Requests Per Second
Thursday, April 23, 2009
![Page 66: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/66.jpg)
DTrace
• User static DTrace probes to probe application logic
• Hot keys
• hash efficiency
• lock contention
Thursday, April 23, 2009
![Page 67: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/67.jpg)
Tuning
Thursday, April 23, 2009
![Page 68: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/68.jpg)
Connections
• Don't fear setting -c (max conns) too high!
• Watch 'listen_disabled_num' (1.2.8+)
• Audit any firewalls on the system (can run out of firewall states!)
• Watch for connection overload. Probably an application bug
Thursday, April 23, 2009
![Page 69: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/69.jpg)
Memory• Don't set -m (max bytes) too high
• -m only controls memory for stored values
• Other memory is used for connection handling, LRU tracking, the hash table, etc
• Especially if running under 32bit (-m 2048 bad!)
• Careful of -k. Could force server to swap
• Monitor server well! If you are swapping, memcached will be slow
Thursday, April 23, 2009
![Page 70: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/70.jpg)
Things to remember!
• Memcached is great for scaling, but abuse will slow down your page rendering time
• Fetching 10,000 separate keys to build a page will not be fast
• Use persistent connections if possible
• Don't fetch more than you need. Takes time to serialize/deserialize 100k+ of data
Thursday, April 23, 2009
![Page 71: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/71.jpg)
Shrink data!
• Especially if you use multiget, try to use shorter keys
• “fooooooooooooooooooooooo-$MD5” will take more data packets than “foo1”
• Try using smaller keys anyway, saves memory if your data is small too
Thursday, April 23, 2009
![Page 72: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/72.jpg)
Future Solutions!• Evaluate the binary protocol in 1.3
• New tricks will be possible, such as smashing many commands into fewer packets
• 'noreply' commands. Don't wait for the response if you don't have to
• ('noreply' is in 1.2, but not recommended for use)
Thursday, April 23, 2009
![Page 73: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/73.jpg)
1.2.8• Bugfixes
• New stats
• listen_disabled_num
• cmd_flush (are you flushing your cache and not realizing it? :) )
• evicted_time under 'stats items'
• Only bugfixes and minor features planned for 1.2 series
Thursday, April 23, 2009
![Page 74: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/74.jpg)
1.3.* Beta
• Scalability improvements
• New stats (per-slab get/miss/etc counters)
• Binary protocol
• Memory optimizations (disable CAS support)
Thursday, April 23, 2009
![Page 75: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/75.jpg)
Binary Protocol
0
75
150
225
300
1 2 4 8 16 32 64 128
ASCII Protocol vs Binary Protocol (memcached-1.3.1 Development Branch)
task
com
plet
ion
time
(sec
s)
concurrent connections
ASCII ProtocolBinary Protocol
Thursday, April 23, 2009
![Page 76: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/76.jpg)
Future• 1.4.0 stable
• Multiple Engine Support
• Durable
• Highly Threaded
• New Slab Features
Thursday, April 23, 2009
![Page 77: Plugin Memcached%20 Study](https://reader034.fdocuments.net/reader034/viewer/2022042606/548352d4b4af9f6e0d8b49e0/html5/thumbnails/77.jpg)
More Resources...
• http://danga.com/memcached/
• #memcached on Freenode
• http://tangent.org/552/libmemcached.html
• http://groups.google.com/groups/memcached
• http://dev.mysql.com/doc/refman/5.1/en/ha-memcached.html
Thursday, April 23, 2009