memcached proxy server development and operation

105
memcached proxy server development and operation Tatsuhiko Kubo [email protected] 13920日金曜日

description

memcached proxy server development and operaiton

Transcript of memcached proxy server development and operation

Page 1: memcached proxy server development and operation

memcached proxy server development and operation

Tatsuhiko [email protected]

13年9月20日金曜日

Page 2: memcached proxy server development and operation

About me

✦ Tatsuhiko Kubo([email protected])✦ @cubicdaiya(twitter, github)✦ Senior Software Engineer@pixiv Inc.

13年9月20日金曜日

Page 3: memcached proxy server development and operation

Recent Work

✦ mruby_nginx_module✦ Embedded mruby into Nginx

✦ ngx_small_light✦ Dynamic Image Transformation for Nginx

✦ Contributions/pull requests to many other projects on github

13年9月20日金曜日

Page 4: memcached proxy server development and operation

Recent WorkWEB+DB PRESS Vol.72

□detailed nginx

flexible configuration and

brilliant scalability

□collaborators

@harukasan@semind

13年9月20日金曜日

Page 5: memcached proxy server development and operation

memcached proxy server development and operation

13年9月20日金曜日

Page 6: memcached proxy server development and operation

memcached proxy server development and operation

~at pixiv~

13年9月20日金曜日

Page 7: memcached proxy server development and operation

Before that,

13年9月20日金曜日

Page 8: memcached proxy server development and operation

Background

13年9月20日金曜日

Page 9: memcached proxy server development and operation

or

13年9月20日金曜日

Page 10: memcached proxy server development and operation

About datastore & caching strategy

at pixiv

13年9月20日金曜日

Page 11: memcached proxy server development and operation

Previously(2 years ago...)

・・・ ・・・

13年9月20日金曜日

Page 12: memcached proxy server development and operation

Previously(2 years ago...)

There was a memcached on each application server.

・・・ ・・・

13年9月20日金曜日

Page 13: memcached proxy server development and operation

Previously(2 years ago...)

・・・ ・・・

13年9月20日金曜日

Page 14: memcached proxy server development and operation

Previously(2 years ago...)

AP connected through UNIX domain socket.

・・・ ・・・

13年9月20日金曜日

Page 15: memcached proxy server development and operation

Previously(2 years ago...)

Connects through TCP socket, too.(For data synchronization)

13年9月20日金曜日

Page 16: memcached proxy server development and operation

rough-and-ready patch for this

13年9月20日金曜日

Page 17: memcached proxy server development and operation

Problems

✦ data synchronization is straining✦ TCP connection overhead✦ processing time is directly proprtional the

number of APs

✦ data restoration is painful✦ memcached is not persistent✦ e.g, when AP server goes down.

13年9月20日金曜日

Page 18: memcached proxy server development and operation

Migration to KyotoTycoon

✦ KyotoTycoon supports

✦ data persistency.

✦ data expiration

✦ memcached ASCII protocol.✦ We could migrate without modifying application!

13年9月20日金曜日

Page 19: memcached proxy server development and operation

After migration

13年9月20日金曜日

Page 20: memcached proxy server development and operation

KyotoTycoon overwhelmed!

13年9月20日金曜日

Page 21: memcached proxy server development and operation

KyotoTycoon overwhelmed

✦ KyotoTycoon(using memcached protocol plugin) compared with memcached, ✦ Lower performance

13年9月20日金曜日

Page 22: memcached proxy server development and operation

KyotoTycoon overwhelmed

✦ KyotoTycoon(using memcached protocol plugin) compared with memcached, ✦ Lower performance

Even so, persistency is some good!

13年9月20日金曜日

Page 23: memcached proxy server development and operation

KyotoTycoon overwhelmed

✦ KyotoTycoon(using memcached protocol plugin) compared with memcached, ✦ Lower performance

Even so, persistency is some good!We wanted it at that time!

13年9月20日金曜日

Page 24: memcached proxy server development and operation

Other Problems

✦ We needed

✦ seamless fail-over mechanism

✦ convenient monitoring mechanism

✦ slow query log(like MySQL)

✦ statistics for whole queries

13年9月20日金曜日

Page 25: memcached proxy server development and operation

dealing with these problems

✦ Scale out(For example, add servers)✦ This was difficult for us at least at that time...

✦ Scale up(For example, buy expensive servers)

✦ This was more difficult for us.

✦ Use proxy server!

✦ Actually, I developed one in C.

✦ Twemproxy was not released yet.

13年9月20日金曜日

Page 26: memcached proxy server development and operation

✦ Scale out(For example, add servers)✦ This was difficult for us at least at that time...

✦ Scale up(For example, buy expensive servers)

✦ This was more difficult for us.

✦ Use proxy server!

✦ Actually, I developed one in C.

✦ Twemproxy was not released yet.

dealing with these problems

13年9月20日金曜日

Page 27: memcached proxy server development and operation

Currently

13年9月20日金曜日

Page 28: memcached proxy server development and operation

Currently

✦ Applications connect to neoagent by UNIX domain socket✦ reduced consumption of local-ports

✦ neoagent keeps persistent TCP connections to KyotoTycoon✦ bypass overhead of TCP connection

13年9月20日金曜日

Page 29: memcached proxy server development and operation

neoagent~A Yet Another Memcached Protocol Proxy Server~

13年9月20日金曜日

Page 30: memcached proxy server development and operation

neoagent✦ event-driven & multi-threaded server

✦ proxies a subset of memcached protocol

✦ get, set, add, delete, incr, decr, quit

✦ supports following features

✦ connection-pooling

✦ graceful-restart & online-update

✦ convenient monitoring

✦ etc...13年9月20日金曜日

Page 31: memcached proxy server development and operation

neoagent architecture✦ core

✦ written in C (C99 style)✦ tools(CLI)

✦ written in Python✦ dependencies

✦ libev, json-c, pthread(core)✦ SCons, Sphinx(tools)

13年9月20日金曜日

Page 32: memcached proxy server development and operation

neoagent architecture

✦ Single-master and multiple workers✦ Configuration by JSON✦ Multi-threaded✦ Event-driven

13年9月20日金曜日

Page 33: memcached proxy server development and operation

Single Master and multiple workers

13年9月20日金曜日

Page 34: memcached proxy server development and operation

neoagentprocess 1

neogentprocess 2

neoagent process 3

KyotoTycoon

KyotoTycoon

KyotoTycoon

proxies

proxies

proxies

Apache(mod_php)

send request

Previously

13年9月20日金曜日

Page 35: memcached proxy server development and operation

Previously

✦ each neoagent-process was independent✦ neoagent-process was daemonized by

daemontools

13年9月20日金曜日

Page 36: memcached proxy server development and operation

neoagentprocess 1 KyotoTycoon

proxies

neoagent processes spawn gradually

13年9月20日金曜日

Page 37: memcached proxy server development and operation

neoagentprocess 1 KyotoTycoon

proxies

neoagentprocess 2 KyotoTycoon

proxies

neoagent processes spawn gradually

13年9月20日金曜日

Page 38: memcached proxy server development and operation

neoagentprocess 1 KyotoTycoon

proxies

neoagentprocess 2 KyotoTycoon

proxies

neoagentprocess 3 KyotoTycoon

proxies

neoagent processes spawn gradually

13年9月20日金曜日

Page 39: memcached proxy server development and operation

neoagentprocess 1 KyotoTycoon

proxies

neoagentprocess 2 KyotoTycoon

proxies

neoagentprocess 3 KyotoTycoon

proxies

・・・

neoagent processes spawn gradually

13年9月20日金曜日

Page 40: memcached proxy server development and operation

neoagentprocess 1 KyotoTycoon

proxies

neoagentprocess 2 KyotoTycoon

proxies

neoagentprocess 3 KyotoTycoon

proxies

neoagentprocess n KyotoTycoon

proxies

・・・

neoagent processes spawn gradually

13年9月20日金曜日

Page 41: memcached proxy server development and operation

Previously

13年9月20日金曜日

Page 42: memcached proxy server development and operation

(ノ`Д´)ノ┻┻

13年9月20日金曜日

Page 43: memcached proxy server development and operation

neoagentworker

process 1

neogentworker

process 2

neoagentworker

process 3

KyotoTycoon

KyotoTycoon

KyotoTycoon

proxies

proxies

proxies

Currentlyneoagentmasterprocess

fork

13年9月20日金曜日

Page 44: memcached proxy server development and operation

neoagentworker

process 1

neogentworker

process 2

neoagentworker

process 3

KyotoTycoon

KyotoTycoon

KyotoTycoon

proxies

proxies

proxies

Apache(mod_php)

send request

Currentlyneoagentmasterprocess

13年9月20日金曜日

Page 45: memcached proxy server development and operation

single-master and multiple workers

✦ Master is responsible for✦ controlling worker processes

✦ Workers are responsible for✦ processing user’s requests

✦ Supervisor may control only Master✦ Now we use Monit instead of daemontools

13年9月20日金曜日

Page 46: memcached proxy server development and operation

Configuration by JSON

13年9月20日金曜日

Page 47: memcached proxy server development and operation

Configuration by JSON{ "ctl" : { "sockpath" : "/var/run/neoagent_ctl.sock", "logpath" : "/var/run/neoagent_ctl.log", }, "environments" : [ { "name" : "env1", "sockpath" : "/var/run/neoagent.sock", "target_server" : "127.0.0.1:11212", "backup_server" : "127.0.0.1:11213", (abbreviated) }, { "name" : "env2", "sockpath" : "/var/run/neoagent2.sock", "target_server" : "127.0.0.1:11214", "backup_server" : "127.0.0.1:11215", (abbreviated) }, ]}

13年9月20日金曜日

Page 48: memcached proxy server development and operation

Configuration by JSON{ "ctl" : { "sockpath" : "/var/run/neoagent_ctl.sock", "logpath" : "/var/run/neoagent_ctl.log", }, "environments" : [ { "name" : "env1", "sockpath" : "/var/run/neoagent.sock", "target_server" : "127.0.0.1:11212", "backup_server" : "127.0.0.1:11213", (abbreviated) }, { "name" : "env2", "sockpath" : "/var/run/neoagent2.sock", "target_server" : "127.0.0.1:11214", "backup_server" : "127.0.0.1:11215", (abbreviated) }, ]}

13年9月20日金曜日

Page 49: memcached proxy server development and operation

“ctl” block

sockpath socket path for controlling neoagent

logpath log path for master process

"ctl" : { "sockpath" : "/var/run/neoagent_ctl.sock", "logpath" : "/var/run/neoagent_ctl.log",},

This block is for master13年9月20日金曜日

Page 50: memcached proxy server development and operation

Configuration by JSON{ "ctl" : { "sockpath" : "/var/run/neoagent_ctl.sock", "logpath" : "/var/run/neoagent_ctl.log", }, "environments" : [ { "name" : "env1", "sockpath" : "/var/run/neoagent.sock", "target_server" : "127.0.0.1:11212", "backup_server" : "127.0.0.1:11213", (abbreviated) }, { "name" : "env2", "sockpath" : "/var/run/neoagent2.sock", "target_server" : "127.0.0.1:11214", "backup_server" : "127.0.0.1:11215", (abbreviated) }, ]}

13年9月20日金曜日

Page 51: memcached proxy server development and operation

Configuration by JSON{ "ctl" : { "sockpath" : "/var/run/neoagent_ctl.sock", "logpath" : "/var/run/neoagent_ctl.log", }, "environments" : [ { "name" : "env1", "sockpath" : "/var/run/neoagent.sock", "target_server" : "127.0.0.1:11212", "backup_server" : "127.0.0.1:11213", (abbreviated) }, { "name" : "env2", "sockpath" : "/var/run/neoagent2.sock", "target_server" : "127.0.0.1:11214", "backup_server" : "127.0.0.1:11215", (abbreviated) }, ]}

13年9月20日金曜日

Page 52: memcached proxy server development and operation

“environments” block

✦ In neoagent, ✦ environment is the configuration for workers.

✦ Each entry in “environments” is the configuration for each worker.

✦ Master manages workers for each of their of environments.

13年9月20日金曜日

Page 53: memcached proxy server development and operation

“environments” block

name environment name

sockpath socket path for communicating neoagent’s worker

target_server primary memcached server

backup_server secondary memcached server

conn_max max connections(backlog size)

connpool_max connection pool size

etc...

document is herehttp://cubicdaiya.github.io/neoagent/

13年9月20日金曜日

Page 54: memcached proxy server development and operation

Muti-threaded

13年9月20日金曜日

Page 55: memcached proxy server development and operation

neoagent’s threads✦ Master-process

✦ sigwait-thread✦ ctl-thread

✦ Worker-process✦ sigwait-thread✦ event-threads✦ support-thread

13年9月20日金曜日

Page 56: memcached proxy server development and operation

Master’s threads

✦ sigwait-thread✦ waiting for a signal from ctl-

thread✦ ctl-thread

✦ receiving a instruction from neoctl through ctl-socket

13年9月20日金曜日

Page 57: memcached proxy server development and operation

Worker’s threads✦ sigwait-thread

✦ waiting for a signal from ctl-thread

✦ event-threads✦ processing client requests

✦ support-thread✦ health-checking & statictics

13年9月20日金曜日

Page 58: memcached proxy server development and operation

Event-driven

13年9月20日金曜日

Page 59: memcached proxy server development and operation

Event-threads’ architecture

✦ event-driven✦ non-blocking I/O✦ multi-threaded

✦ request-queuing & thread-pooling

13年9月20日金曜日

Page 60: memcached proxy server development and operation

Event processing phases

13年9月20日金曜日

Page 61: memcached proxy server development and operation

multithreaded with request-queuing & thread-pooling

event-thread

event-thread

event-thread

request1

request2

request3

empty

・・・

empty

dequeue

dequeue

dequeue

event-thread(accept)

request-queue

enqueue

processing requests

13年9月20日金曜日

Page 62: memcached proxy server development and operation

Usage at pixiv

13年9月20日金曜日

Page 63: memcached proxy server development and operation

Usage

✦ Building neoagent✦ Monitoring neoagent✦ Controlling neoagent

13年9月20日金曜日

Page 64: memcached proxy server development and operation

Building

13年9月20日金曜日

Page 65: memcached proxy server development and operation

Building neoagent

13年9月20日金曜日

Page 66: memcached proxy server development and operation

Building neoagent

with SCons!

13年9月20日金曜日

Page 67: memcached proxy server development and operation

SCons

✦ Simple & flexible & programable build tool✦ Auto anaylysis of dependencies✦ Build-configuration is written with Python

✦ Suitable for small or medium scale projects

13年9月20日金曜日

Page 68: memcached proxy server development and operation

Monitoring

13年9月20日金曜日

Page 69: memcached proxy server development and operation

Monitoring

✦ health-checking worker with Nagios & NRPE

✦ monitoring neostat & Munin

13年9月20日金曜日

Page 70: memcached proxy server development and operation

neostat$ neostat -s /var/run/neoagent_st.sock -o{ "datetime" : 2013-09-08 23:12:39 "version": "0.8.7", "host": "localhost", "port": "/var/run/neoagent_st.sock", "environment_name": "yapcasia2013", (abbreviated) "current_conn": 5, "available_conn": 20 (abbreviated)}

13年9月20日金曜日

Page 71: memcached proxy server development and operation

neostat -> Munin Graph

->

current connections

$ neostat -s /var/run/neoagent_st.sock -o{ "datetime" : 2013-09-08 23:12:39 "version": "0.8.7", "host": "localhost", "port": "/var/run/neoagent_st.sock", "environment_name": "yapcasia2013", (abbreviated) "current_conn": 5, "available_conn": 20 (abbreviated)}

13年9月20日金曜日

Page 72: memcached proxy server development and operation

neostat -> Munin Graph

->

neostat outputs current status of neoagent. (For example, current connection numbers)

current connections

$ neostat -s /var/run/neoagent_st.sock -o{ "datetime" : 2013-09-08 23:12:39 "version": "0.8.7", "host": "localhost", "port": "/var/run/neoagent_st.sock", "environment_name": "yapcasia2013", (abbreviated) "current_conn": 5, "available_conn": 20 (abbreviated)}

13年9月20日金曜日

Page 73: memcached proxy server development and operation

neostat internal

✦ neoagent workers have a suppport-thread.

✦ support-thread returns JSON as against request of neostat.

13年9月20日金曜日

Page 74: memcached proxy server development and operation

slowlog for neoagent■ configuration

■ output

"slow_query_sec" : 0.01, # milli-seconds"slow_query_log_path" : "/var/log/neoagent_slowlog.log","slow_query_log_format" : "json","slow_query_log_access_mask" : "0666",

{ ..., "na_to_ts": 0.000006, "na_from_ts": 0.000003, "na_to_client": 0.014320, "querytxt": "get key1" }{ ..., "na_to_ts": 0.000012, "na_from_ts": 0.000004, "na_to_client": 0.011587, "querytxt": "get key2" }{ ..., "na_to_ts": 0.000009, "na_from_ts": 0.000003, "na_to_client": 0.017788, "querytxt": "get key3" }{ ..., "na_to_ts": 0.000009, "na_from_ts": 0.000009, "na_to_client": 0.036082, "querytxt": "get key4" }{ ..., "na_to_ts": 0.000008, "na_from_ts": 0.000008, "na_to_client": 0.010506, "querytxt": "get key5" }{ ..., "na_to_ts": 0.000014, "na_from_ts": 0.000003, "na_to_client": 0.029464, "querytxt": "get key6" }{ ..., "na_to_ts": 0.000007, "na_from_ts": 0.000004, "na_to_client": 0.012440, "querytxt": "get key7" }{ ..., "na_to_ts": 0.000007, "na_from_ts": 0.000003, "na_to_client": 0.043834, "querytxt": "get key8" }{ ..., "na_to_ts": 0.000007, "na_from_ts": 0.050442, "na_to_client": 0.000015, "querytxt": "get key9" }

13年9月20日金曜日

Page 75: memcached proxy server development and operation

slowlog for neoagent

na_to_ts taken time for sending request to target server

na_from_ts taken time for receiving response from target server

na_to_client taken time for sending response to client

querytxt request body

{ ..., "na_to_ts": 0.000006, "na_from_ts": 0.000003, "na_to_client": 0.014320, "querytxt": "get key1" }{ ..., "na_to_ts": 0.000012, "na_from_ts": 0.000004, "na_to_client": 0.011587, "querytxt": "get key2" }{ ..., "na_to_ts": 0.000009, "na_from_ts": 0.000003, "na_to_client": 0.017788, "querytxt": "get key3" }{ ..., "na_to_ts": 0.000009, "na_from_ts": 0.000009, "na_to_client": 0.036082, "querytxt": "get key4" }{ ..., "na_to_ts": 0.000008, "na_from_ts": 0.000008, "na_to_client": 0.010506, "querytxt": "get key5" }{ ..., "na_to_ts": 0.000014, "na_from_ts": 0.000003, "na_to_client": 0.029464, "querytxt": "get key6" }{ ..., "na_to_ts": 0.000007, "na_from_ts": 0.000004, "na_to_client": 0.012440, "querytxt": "get key7" }{ ..., "na_to_ts": 0.000007, "na_from_ts": 0.000003, "na_to_client": 0.043834, "querytxt": "get key8" }{ ..., "na_to_ts": 0.000007, "na_from_ts": 0.050442, "na_to_client": 0.000015, "querytxt": "get key9" }

13年9月20日金曜日

Page 76: memcached proxy server development and operation

slowlog for neoagent

13年9月20日金曜日

Page 77: memcached proxy server development and operation

slowlog for neoagent

slowlog is sent to MongoDB by Fluentd!13年9月20日金曜日

Page 78: memcached proxy server development and operation

slowlog for neoagent

13年9月20日金曜日

Page 79: memcached proxy server development and operation

slowlog for neoagent

Monitoring slow queries with Monitoring Web Application!

13年9月20日金曜日

Page 80: memcached proxy server development and operation

Controlling neoagent

13年9月20日金曜日

Page 81: memcached proxy server development and operation

Controlling with signals

13年9月20日金曜日

Page 82: memcached proxy server development and operation

Problem with signals

✦ complicated & easy to mistake✦ must send multiple signals to master

and workers at a time✦ must link worker’s PID to neoagent’s

environment

13年9月20日金曜日

Page 83: memcached proxy server development and operation

Controlling with neoctl

13年9月20日金曜日

Page 84: memcached proxy server development and operation

neoctl internal

✦ neoctl sends instructions to master

✦ by UNIX domain socket

✦ master manages worker’ PIDs

✦ and the link between each worker’s PID and environment name, too.

✦ master sends signals master-self and workers.

13年9月20日金曜日

Page 85: memcached proxy server development and operation

Graceful restart

neoctlneoagentmasterprocess

neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

13年9月20日金曜日

Page 86: memcached proxy server development and operation

Graceful restart

neoctlneoagentmasterprocess

graceful env1 neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

through neoagent_ctl.sock

13年9月20日金曜日

Page 87: memcached proxy server development and operation

Graceful restart

neoctlneoagentmasterprocess

graceful env1 neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

through neoagent_ctl.sock

SIGUSR2

13年9月20日金曜日

Page 88: memcached proxy server development and operation

Graceful restart

neoctlneoagentmasterprocess

graceful env1 neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

through neoagent_ctl.sock

SIGUSR2

worker(env1) exits after processing remaining requests

13年9月20日金曜日

Page 89: memcached proxy server development and operation

Graceful restart

neoctlneoagentmasterprocess

graceful env1 neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

through neoagent_ctl.sock

SIGUSR2

SIGCONT

13年9月20日金曜日

Page 90: memcached proxy server development and operation

Graceful restart

neoctlneoagentmasterprocess

graceful env1 neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

through neoagent_ctl.sock

SIGUSR2

SIGCONT

neoagentworker

env1(new)

fork

13年9月20日金曜日

Page 91: memcached proxy server development and operation

Graceful restart

neoctlneoagentmasterprocess

neoagentworker

env2

neoagentworker

env3

neoagentworker

env1(new)

13年9月20日金曜日

Page 92: memcached proxy server development and operation

Graceful restart

neoctlneoagentmasterprocess

neoagentworker

env2

neoagentworker

env3

neoagentworker

env1(new)

13年9月20日金曜日

Page 93: memcached proxy server development and operation

Online version update

neoctlneoagentmasterprocess

neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

13年9月20日金曜日

Page 94: memcached proxy server development and operation

Online version update

neoctlneoagentmasterprocess

neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

update

through neoagent_ctl.sock

13年9月20日金曜日

Page 95: memcached proxy server development and operation

Online version update

neoctlneoagentmasterprocess

neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

update

through neoagent_ctl.sock

SIGUSR2

13年9月20日金曜日

Page 96: memcached proxy server development and operation

Online version update

neoctlneoagentmasterprocess

neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

update

through neoagent_ctl.sock

SIGUSR2

workers exits after processing remaining requests

13年9月20日金曜日

Page 97: memcached proxy server development and operation

Online version update

neoctlneoagentmasterprocess

neoagentworker

env1

neoagentworker

env2

neoagentworker

env3

update

through neoagent_ctl.sock

SIGUSR2

SIGUSR1

13年9月20日金曜日

Page 98: memcached proxy server development and operation

Online version update

neoctlneoagentmaster

process(old)

neoagentworker

env1(old)

neoagentworker

env2(old)

neoagentworker

env3(old)

update

through neoagent_ctl.sock

SIGUSR2

SIGUSR1

neoagentworker

env1(new)

neoagentworker

env2(new)

neoagentworker

env3(new)

neoagentmaster

process(new)

exec

fork

13年9月20日金曜日

Page 99: memcached proxy server development and operation

Online version update

neoctlneoagentworker

env1(old)

neoagentworker

env2(old)

neoagentworker

env3(old)

neoagentworker

env1(new)

neoagentworker

env2(new)

neoagentworker

env3(new)

neoagentmaster

process(new)

13年9月20日金曜日

Page 100: memcached proxy server development and operation

Online version update

neoctl

neoagentworker

env1(new)

neoagentworker

env2(new)

neoagentworker

env3(new)

neoagentmaster

process(new)

13年9月20日金曜日

Page 101: memcached proxy server development and operation

neoctlneoagentmaster

process(new)

neoagentworker

env2(new)

neoagentworker

env3(new)

neoagentworker

env1(new)

Online version update

13年9月20日金曜日

Page 102: memcached proxy server development and operation

Controlling neoagent

13年9月20日金曜日

Page 103: memcached proxy server development and operation

Controlling neoagent

with Capistrano!13年9月20日金曜日

Page 104: memcached proxy server development and operation

Summary

✦ Why memcached protocol proxy server is required?

✦ reduced TCP connections

✦ enhance scalability of system

✦ Monitoring is important!

✦ Don’t guess! Measure!

✦ Create tools for simplifying operation!

13年9月20日金曜日

Page 105: memcached proxy server development and operation

Thanks!

13年9月20日金曜日