Skip to content
Newer
Older
100644 314 lines (254 sloc) 16.4 KB
fff5726 @caniszczyk Add Travis CI Support
caniszczyk authored Jun 19, 2012
1 # twemproxy (nutcracker) [![Build Status](https://secure.travis-ci.org/twitter/twemproxy.png)](http://travis-ci.org/twitter/twemproxy)
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
2
26fe203 @davis Update README.md
davis authored Apr 23, 2015
3 **twemproxy** (pronounced "two-em-proxy"), aka **nutcracker** is a fast and lightweight proxy for [memcached](http://www.memcached.org/) and [redis](http://redis.io/) protocol. It was built primarily to reduce the number of connections to the caching servers on the backend. This, together with protocol pipelining and sharding enables you to horizontally scale your distributed caching architecture.
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
4
861cd85 added zero-copy section to nutcracker readme.md
Manju Rajashekhar authored Jul 30, 2012
5 ## Build
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
6
aead873 @manjuraj Update README.md
manjuraj authored Mar 9, 2015
7 To build twemproxy from [distribution tarball](https://drive.google.com/open?id=0B6pVMMV5F5dfMUdJV25abllhUWM&authuser=0):
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
8
9 $ ./configure
10 $ make
11 $ sudo make install
12
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
13 To build twemproxy from [distribution tarball](https://drive.google.com/open?id=0B6pVMMV5F5dfMUdJV25abllhUWM&authuser=0) in _debug mode_:
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
14
15 $ CFLAGS="-ggdb3 -O0" ./configure --enable-debug=full
16 $ make
17 $ sudo make install
18
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
19 To build twemproxy from source with _debug logs enabled_ and _assertions enabled_:
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
20
21 $ git clone git@github.com:twitter/twemproxy.git
22 $ cd twemproxy
23 $ autoreconf -fvi
1f17bc1 @idning add GCC option -fno-strict-aliasing
idning authored Nov 14, 2014
24 $ ./configure --enable-debug=full
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
25 $ make
26 $ src/nutcracker -h
27
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
28 A quick checklist:
1f17bc1 @idning add GCC option -fno-strict-aliasing
idning authored Nov 14, 2014
29
d75168c @manjuraj updated README.md
manjuraj authored Feb 18, 2015
30 + Use newer version of gcc (older version of gcc has problems)
31 + Use CFLAGS="-O1" ./configure && make
32 + Use CFLAGS="-O3 -fno-strict-aliasing" ./configure && make
33 + `autoreconf -fvi && ./configure` needs `automake` and `libtool` to be installed
1f17bc1 @idning add GCC option -fno-strict-aliasing
idning authored Nov 14, 2014
34
861cd85 added zero-copy section to nutcracker readme.md
Manju Rajashekhar authored Jul 30, 2012
35 ## Features
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
36
37 + Fast.
38 + Lightweight.
39 + Maintains persistent server connections.
40 + Keeps connection count on the backend caching servers low.
f996cf1 Update README.md
Manju Rajashekhar authored Dec 1, 2012
41 + Enables pipelining of requests and responses.
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
42 + Supports proxying to multiple servers.
43 + Supports multiple server pools simultaneously.
55e8a12 Update README.md
Manju Rajashekhar authored Dec 28, 2012
44 + Shard data automatically across multiple servers.
2f92595 @manjuraj updated memcached.txt
manjuraj authored Jun 15, 2015
45 + Implements the complete [memcached ascii](notes/memcache.md) and [redis](notes/redis.md) protocol.
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
46 + Easy configuration of server pools through a YAML file.
47 + Supports multiple hashing modes including consistent hashing and distribution.
55e8a12 Update README.md
Manju Rajashekhar authored Dec 29, 2012
48 + Can be configured to disable nodes on failures.
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
49 + Observability via stats exposed on the stats monitoring port.
50 + Works with Linux, *BSD, OS X and SmartOS (Solaris)
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
51
861cd85 added zero-copy section to nutcracker readme.md
Manju Rajashekhar authored Jul 30, 2012
52 ## Help
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
53
5509ea6 Update README.md
Manju Rajashekhar authored Dec 2, 2012
54 Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
65808f2 update README.md
Manju Rajashekhar authored Dec 5, 2012
55 [-c conf file] [-s stats port] [-a stats addr]
56 [-i stats interval] [-p pid file] [-m mbuf size]
57
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
58 Options:
59 -h, --help : this help
60 -V, --version : show version and exit
61 -t, --test-conf : test configuration for syntax errors and exit
62 -d, --daemonize : run as a daemon
5509ea6 Update README.md
Manju Rajashekhar authored Dec 3, 2012
63 -D, --describe-stats : print stats description and exit
4240dfb change verbosity option to verbose
clark.kang authored Dec 7, 2014
64 -v, --verbose=N : set logging level (default: 5, min: 0, max: 11)
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
65 -o, --output=S : set logging file (default: stderr)
66 -c, --conf-file=S : set configuration file (default: conf/nutcracker.yml)
67 -s, --stats-port=N : set stats monitoring port (default: 22222)
65808f2 update README.md
Manju Rajashekhar authored Dec 5, 2012
68 -a, --stats-addr=S : set stats monitoring ip (default: 0.0.0.0)
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
69 -i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)
70 -p, --pid-file=S : set pid file (default: off)
c9d0c17 command line option to set mbuf chunk size
Manju Rajashekhar authored Jun 19, 2012
71 -m, --mbuf-size=N : set size of mbuf chunk in bytes (default: 16384 bytes)
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
72
861cd85 added zero-copy section to nutcracker readme.md
Manju Rajashekhar authored Jul 30, 2012
73 ## Zero Copy
74
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
75 In twemproxy, all the memory for incoming requests and outgoing responses is allocated in mbuf. Mbuf enables zero-copy because the same buffer on which a request was received from the client is used for forwarding it to the server. Similarly the same mbuf on which a response was received from the server is used for forwarding it to the client.
861cd85 added zero-copy section to nutcracker readme.md
Manju Rajashekhar authored Jul 30, 2012
76
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
77 Furthermore, memory for mbufs is managed using a reuse pool. This means that once mbuf is allocated, it is not deallocated, but just put back into the reuse pool. By default each mbuf chunk is set to 16K bytes in size. There is a trade-off between the mbuf size and number of concurrent connections twemproxy can support. A large mbuf size reduces the number of read syscalls made by twemproxy when reading requests or responses. However, with a large mbuf size, every active connection would use up 16K bytes of buffer which might be an issue when twemproxy is handling large number of concurrent connections from clients. When twemproxy is meant to handle a large number of concurrent client connections, you should set chunk size to a small value like 512 bytes using the -m or --mbuf-size=N argument.
861cd85 added zero-copy section to nutcracker readme.md
Manju Rajashekhar authored Jul 30, 2012
78
79 ## Configuration
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
80
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
81 Twemproxy can be configured through a YAML file specified by the -c or --conf-file command-line argument on process start. The configuration file is used to specify the server pools and the servers within each pool that twemproxy manages. The configuration files parses and understands the following keys:
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
82
a36fdae @manjuraj Update README.md
manjuraj authored Feb 19, 2015
83 + **listen**: The listening address and port (name:port or ip:port) or an absolute path to sock file (e.g. /var/run/nutcracker.sock) for this server pool.
0f69053 @tom-dalton-fanduel Document the client_connections config option
tom-dalton-fanduel authored Aug 5, 2015
84 + **client_connections**: The maximum number of connections allowed from redis clients. Unlimited by default, though OS-imposed limitations will still apply.
5509ea6 Update README.md
Manju Rajashekhar authored Dec 3, 2012
85 + **hash**: The name of the hash function. Possible values are:
86 + one_at_a_time
87 + md5
da84acb Update README.md
Daniel Mezzatto authored Feb 21, 2013
88 + crc16
ea07b0a @manjuraj Update README.md
manjuraj authored Jun 5, 2013
89 + crc32 (crc32 implementation compatible with [libmemcached](http://libmemcached.org/))
653b05f @manjuraj crc32 implementation is not correct but is compatible with libmemcach…
manjuraj authored Apr 15, 2013
90 + crc32a (correct crc32 implementation as per the spec)
5509ea6 Update README.md
Manju Rajashekhar authored Dec 3, 2012
91 + fnv1_64
92 + fnv1a_64
93 + fnv1_32
94 + fnv1a_32
95 + hsieh
96 + murmur
97 + jenkins
658c825 @manjuraj updated README.md and recommendation.md
manjuraj authored Mar 3, 2015
98 + **hash_tag**: A two character string that specifies the part of the key used for hashing. Eg "{}" or "$$". [Hash tag](notes/recommendation.md#hash-tags) enable mapping different keys to the same server as long as the part of the key within the tag is the same.
5509ea6 Update README.md
Manju Rajashekhar authored Dec 3, 2012
99 + **distribution**: The key distribution mode. Possible values are:
100 + ketama
101 + modula
102 + random
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
103 + **timeout**: The timeout value in msec that we wait for to establish a connection to the server or receive a response from a server. By default, we wait indefinitely.
104 + **backlog**: The TCP backlog argument. Defaults to 512.
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
105 + **preconnect**: A boolean value that controls if twemproxy should preconnect to all the servers in this pool on process start. Defaults to false.
f996cf1 Update README.md
Manju Rajashekhar authored Dec 1, 2012
106 + **redis**: A boolean value that controls if a server pool speaks redis or memcached protocol. Defaults to false.
d10d6be @alicebob Add `redis_auth` to the README.md
alicebob authored Dec 1, 2014
107 + **redis_auth**: Authenticate to the Redis server on connect.
2fd5a74 @tom-dalton-fanduel Document the redis_db config setting.
tom-dalton-fanduel authored Jun 16, 2015
108 + **redis_db**: The DB number to use on the pool servers. Defaults to 0. Note: Twemproxy will always present itself to clients as DB 0.
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
109 + **server_connections**: The maximum number of connections that can be opened to each server. By default, we open at most 1 server connection.
60466e2 @matschaffer Included note on auto_eject behavior #73
matschaffer authored Feb 22, 2013
110 + **auto_eject_hosts**: A boolean value that controls if server should be ejected temporarily when it fails consecutively server_failure_limit times. See [liveness recommendations](notes/recommendation.md#liveness) for information. Defaults to false.
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
111 + **server_retry_timeout**: The timeout value in msec to wait for before retrying on a temporarily ejected server, when auto_eject_host is set to true. Defaults to 30000 msec.
8a0df43 @nikai3d fix typos in README.md
nikai3d authored Dec 5, 2013
112 + **server_failure_limit**: The number of consecutive failures on a server that would lead to it being temporarily ejected when auto_eject_host is set to true. Defaults to 2.
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
113 + **servers**: A list of server address, port and weight (name:port:weight or ip:port:weight) for this server pool.
114
0be5fb4 Update README.md
Manju Rajashekhar authored Dec 10, 2012
115
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
116 For example, the configuration file in [conf/nutcracker.yml](conf/nutcracker.yml), also shown below, configures 5 server pools with names - _alpha_, _beta_, _gamma_, _delta_ and omega. Clients that intend to send requests to one of the 10 servers in pool delta connect to port 22124 on 127.0.0.1. Clients that intend to send request to one of 2 servers in pool omega connect to unix path /tmp/gamma. Requests sent to pool alpha and omega have no timeout and might require timeout functionality to be implemented on the client side. On the other hand, requests sent to pool beta, gamma and delta timeout after 400 msec, 400 msec and 100 msec respectively when no response is received from the server. Of the 5 server pools, only pools alpha, gamma and delta are configured to use server ejection and hence are resilient to server failures. All the 5 server pools use ketama consistent hashing for key distribution with the key hasher for pools alpha, beta, gamma and delta set to fnv1a_64 while that for pool omega set to hsieh. Also only pool beta uses [nodes names](notes/recommendation.md#node-names-for-consistent-hashing) for consistent hashing, while pool alpha, gamma, delta and omega use 'host:port:weight' for consistent hashing. Finally, only pool alpha and beta can speak the redis protocol, while pool gamma, deta and omega speak memcached protocol.
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
117
118 alpha:
119 listen: 127.0.0.1:22121
120 hash: fnv1a_64
121 distribution: ketama
122 auto_eject_hosts: true
f996cf1 Update README.md
Manju Rajashekhar authored Dec 1, 2012
123 redis: true
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
124 server_retry_timeout: 2000
125 server_failure_limit: 1
126 servers:
f996cf1 Update README.md
Manju Rajashekhar authored Dec 1, 2012
127 - 127.0.0.1:6379:1
2d13f28 @matschaffer Use github's relative links
matschaffer authored Feb 26, 2013
128
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
129 beta:
130 listen: 127.0.0.1:22122
131 hash: fnv1a_64
835ae01 Update README.md
Manju Rajashekhar authored Dec 19, 2012
132 hash_tag: "{}"
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
133 distribution: ketama
0be5fb4 Update README.md
Manju Rajashekhar authored Dec 10, 2012
134 auto_eject_hosts: false
135 timeout: 400
136 redis: true
137 servers:
138 - 127.0.0.1:6380:1 server1
139 - 127.0.0.1:6381:1 server2
140 - 127.0.0.1:6382:1 server3
141 - 127.0.0.1:6383:1 server4
2d13f28 @matschaffer Use github's relative links
matschaffer authored Feb 26, 2013
142
0be5fb4 Update README.md
Manju Rajashekhar authored Dec 10, 2012
143 gamma:
144 listen: 127.0.0.1:22123
145 hash: fnv1a_64
146 distribution: ketama
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
147 timeout: 400
148 backlog: 1024
149 preconnect: true
150 auto_eject_hosts: true
151 server_retry_timeout: 2000
152 server_failure_limit: 3
153 servers:
154 - 127.0.0.1:11212:1
155 - 127.0.0.1:11213:1
2d13f28 @matschaffer Use github's relative links
matschaffer authored Feb 26, 2013
156
0be5fb4 Update README.md
Manju Rajashekhar authored Dec 10, 2012
157 delta:
158 listen: 127.0.0.1:22124
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
159 hash: fnv1a_64
160 distribution: ketama
161 timeout: 100
162 auto_eject_hosts: true
163 server_retry_timeout: 2000
164 server_failure_limit: 1
165 servers:
166 - 127.0.0.1:11214:1
167 - 127.0.0.1:11215:1
168 - 127.0.0.1:11216:1
169 - 127.0.0.1:11217:1
170 - 127.0.0.1:11218:1
171 - 127.0.0.1:11219:1
172 - 127.0.0.1:11220:1
173 - 127.0.0.1:11221:1
174 - 127.0.0.1:11222:1
175 - 127.0.0.1:11223:1
2d13f28 @matschaffer Use github's relative links
matschaffer authored Feb 26, 2013
176
0be5fb4 Update README.md
Manju Rajashekhar authored Dec 10, 2012
177 omega:
452b606 @manjuraj updated README.md
manjuraj authored Jun 30, 2015
178 listen: /tmp/gamma 0666
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
179 hash: hsieh
180 distribution: ketama
181 auto_eject_hosts: false
182 servers:
183 - 127.0.0.1:11214:100000
184 - 127.0.0.1:11215:1
2d13f28 @matschaffer Use github's relative links
matschaffer authored Feb 26, 2013
185
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
186 Finally, to make writing a syntactically correct configuration file easier, twemproxy provides a command-line argument -t or --test-conf that can be used to test the YAML configuration file for any syntax error.
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
187
861cd85 added zero-copy section to nutcracker readme.md
Manju Rajashekhar authored Jul 30, 2012
188 ## Observability
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
189
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
190 Observability in twemproxy is through logs and stats.
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
191
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
192 Twemproxy exposes stats at the granularity of server pool and servers per pool through the stats monitoring port. The stats are essentially JSON formatted key-value pairs, with the keys corresponding to counter names. By default stats are exposed on port 22222 and aggregated every 30 seconds. Both these values can be configured on program start using the -c or --conf-file and -i or --stats-interval command-line arguments respectively. You can print the description of all stats exported by using the -D or --describe-stats command-line argument.
ae34cd8 add -D or --describe-stats command-line argument to print stats descr…
Manju Rajashekhar authored Dec 1, 2012
193
194 $ nutcracker --describe-stats
195
196 pool stats:
197 client_eof "# eof on client connections"
198 client_err "# errors on client connections"
199 client_connections "# active client connections"
200 server_ejects "# times backend server was ejected"
201 forward_error "# times we encountered a forwarding error"
202 fragments "# fragments created from a multi-vector request"
203
204 server stats:
205 server_eof "# eof on server connections"
206 server_err "# errors on server connections"
207 server_timedout "# timeouts on server connections"
208 server_connections "# active server connections"
209 requests "# requests"
210 request_bytes "total request bytes"
8a0df43 @nikai3d fix typos in README.md
nikai3d authored Dec 5, 2013
211 responses "# responses"
ae34cd8 add -D or --describe-stats command-line argument to print stats descr…
Manju Rajashekhar authored Dec 1, 2012
212 response_bytes "total response bytes"
213 in_queue "# requests in incoming queue"
214 in_queue_bytes "current request bytes in incoming queue"
215 out_queue "# requests in outgoing queue"
216 out_queue_bytes "current request bytes in outgoing queue"
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
217
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
218 Logging in twemproxy is only available when twemproxy is built with logging enabled. By default logs are written to stderr. Twemproxy can also be configured to write logs to a specific file through the -o or --output command-line argument. On a running twemproxy, we can turn log levels up and down by sending it SIGTTIN and SIGTTOU signals respectively and reopen log files by sending it SIGHUP signal.
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
219
98bca27 Update README.md
Manju Rajashekhar authored Dec 3, 2012
220 ## Pipelining
221
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
222 Twemproxy enables proxying multiple client connections onto one or few server connections. This architectural setup makes it ideal for pipelining requests and responses and hence saving on the round trip time.
98bca27 Update README.md
Manju Rajashekhar authored Dec 4, 2012
223
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
224 For example, if twemproxy is proxying three client connections onto a single server and we get requests - 'get key\r\n', 'set key 0 0 3\r\nval\r\n' and 'delete key\r\n' on these three connections respectively, twemproxy would try to batch these requests and send them as a single message onto the server connection as 'get key\r\nset key 0 0 3\r\nval\r\ndelete key\r\n'.
98bca27 Update README.md
Manju Rajashekhar authored Dec 4, 2012
225
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
226 Pipelining is the reason why twemproxy ends up doing better in terms of throughput even though it introduces an extra hop between the client and server.
98bca27 Update README.md
Manju Rajashekhar authored Dec 4, 2012
227
6862e53 updated readme
Manju Rajashekhar authored Aug 17, 2012
228 ## Deployment
229
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
230 If you are deploying twemproxy in production, you might consider reading through the [recommendation document](notes/recommendation.md) to understand the parameters you could tune in twemproxy to run it efficiently in the production environment.
6862e53 updated readme
Manju Rajashekhar authored Aug 17, 2012
231
0c2bf6e @guilhem Add PPA informations to README
guilhem authored Oct 21, 2014
232 ## Packages
233
234 ### Ubuntu
235
236 #### PPA Stable
237
238 https://launchpad.net/~twemproxy/+archive/ubuntu/stable
239
240 #### PPA Daily
241
242 https://launchpad.net/~twemproxy/+archive/ubuntu/daily
243
54b54a4 @manjuraj Update README.md
manjuraj authored May 8, 2013
244 ## Utils
29e13cc @manjuraj Update README.md
manjuraj authored Jul 2, 2015
245 + [collectd-plugin](https://github.com/bewie/collectd-twemproxy)
246 + [munin-plugin](https://github.com/eveiga/contrib/tree/nutcracker/plugins/nutcracker)
247 + [twemproxy-ganglia-module](https://github.com/ganglia/gmond_python_modules/tree/master/twemproxy)
54b54a4 @manjuraj Update README.md
manjuraj authored May 8, 2013
248 + [nagios checks](https://github.com/wanelo/nagios-checks/blob/master/check_twemproxy)
249 + [circunous](https://github.com/wanelo-chef/nad-checks/blob/master/recipes/twemproxy.rb)
02a8c7e @manjuraj Update README.md
manjuraj authored May 9, 2013
250 + [puppet module](https://github.com/wuakitv/puppet-twemproxy)
e6eb72c @eranb Update README.md
eranb authored Jul 1, 2013
251 + [nutcracker-web](https://github.com/kontera-technologies/nutcracker-web)
b8c4b2c @manjuraj Update README.md
manjuraj authored Sep 21, 2013
252 + [redis-twemproxy agent](https://github.com/Stono/redis-twemproxy-agent)
790e1ad @rhoml Adds documentation
rhoml authored Feb 25, 2014
253 + [sensu-metrics](https://github.com/sensu/sensu-community-plugins/blob/master/plugins/twemproxy/twemproxy-metrics.rb)
8a4f5c0 @manjuraj Update README.md
manjuraj authored Mar 19, 2014
254 + [redis-mgr](https://github.com/idning/redis-mgr)
3383e09 @manjuraj Update README.md
manjuraj authored Apr 26, 2014
255 + [smitty for twemproxy failover](https://github.com/areina/smitty)
cbc50ae @Serekh Added beholder to the Utils section, a python agent that works togeth…
Serekh authored Mar 17, 2015
256 + [Beholder, a Python agent for twemproxy failover](https://github.com/Serekh/beholder)
bc9eb49 @guilhem Add chef cookbook in `utils` section
guilhem authored Nov 4, 2014
257 + [chef cookbook](https://supermarket.getchef.com/cookbooks/twemproxy)
67ac941 @yak0 Utils Update
yak0 authored Feb 12, 2015
258 + [twemsentinel] (https://github.com/yak0/twemsentinel)
54b54a4 @manjuraj Update README.md
manjuraj authored May 8, 2013
259
aead873 @manjuraj Update README.md
manjuraj authored Mar 10, 2015
260 ## Companies using Twemproxy in Production
4bfcc42 @manjuraj updated README.md
manjuraj authored Jul 28, 2015
261 + [Twitter](https://twitter.com/)
91a68d3 @Krinkle readme: Link to HTTPS for wikimedia.org
Krinkle authored Dec 3, 2015
262 + [Wikimedia](https://www.wikimedia.org/)
6862e53 updated readme
Manju Rajashekhar authored Aug 17, 2012
263 + [Pinterest](http://pinterest.com/)
4bfcc42 @manjuraj updated README.md
manjuraj authored Jul 29, 2015
264 + [Snapchat](http://www.snapchat.com/)
265 + [Flickr](https://www.flickr.com)
266 + [Yahoo!](https://www.yahoo.com)
6862e53 updated readme
Manju Rajashekhar authored Aug 17, 2012
267 + [Tumblr](https://www.tumblr.com/)
b4b7993 Update README.md
Manju Rajashekhar authored Jan 29, 2013
268 + [Vine](http://vine.co/)
4ce4880 Added Wayfair to list of companies that use this.
Michael Joseph authored Aug 6, 2015
269 + [Wayfair](http://www.wayfair.com/)
e5d3d94 Update README.md
Manju Rajashekhar authored Feb 26, 2013
270 + [Kiip](http://www.kiip.me/)
038fc63 @rhoml Update README.md
rhoml authored May 5, 2013
271 + [Wuaki.tv](https://wuaki.tv/)
8735e40 @manjuraj Update README.md
manjuraj authored May 6, 2013
272 + [Wanelo](http://wanelo.com/)
5f6d8a5 @manjuraj Update README.md
manjuraj authored Jul 10, 2013
273 + [Kontera](http://kontera.com/)
749f8b2 @manjuraj Update README.md
manjuraj authored Jul 18, 2013
274 + [Bright](http://www.bright.com/)
dabd19a @manjuraj Update README.md
manjuraj authored Oct 16, 2013
275 + [56.com](http://www.56.com/)
b4749eb @manjuraj Update README.md
manjuraj authored Feb 8, 2014
276 + [Digg](http://digg.com/)
ef7dd1f @manjuraj Update README.md
manjuraj authored Feb 23, 2014
277 + [Gawkermedia](http://advertising.gawker.com/)
790e1ad @rhoml Adds documentation
rhoml authored Feb 25, 2014
278 + [3scale.net](http://3scale.net)
b3af606 @ivmaykov Added Ooyala to list of users in README.md
ivmaykov authored Jun 5, 2014
279 + [Ooyala](http://www.ooyala.com)
c8384c9 @eleusive Update README.md
eleusive authored Jun 26, 2014
280 + [Twitch](http://twitch.tv)
4e35da4 @manjuraj Update README.md
manjuraj authored Nov 26, 2014
281 + [Socrata](http://www.socrata.com/)
dbb6343 @bmonkman Added Hootsuite to list of twemproxy users in readme
bmonkman authored Dec 10, 2014
282 + [Hootsuite](http://hootsuite.com/)
139c527 @manjuraj Update README.md
manjuraj authored Dec 18, 2014
283 + [Trivago](http://www.trivago.com/)
f0a6c3b @manjuraj Update README.md
manjuraj authored Feb 13, 2015
284 + [Machinezone](http://www.machinezone.com)
5941059 @manjuraj updated README.md
manjuraj authored Mar 6, 2015
285 + [Path](https://path.com)
e39f16a @stoph Adding AOL
stoph authored Apr 7, 2015
286 + [AOL](http://engineering.aol.com/)
ac410fc @manjuraj updated README.md
manjuraj authored Jun 16, 2015
287 + [Soysuper](https://soysuper.com/)
c287ba6 @manjuraj Update README.md
manjuraj authored Jun 15, 2015
288 + [Vinted](http://vinted.com/)
289 + [Poshmark](https://poshmark.com/)
53e7712 @tom-dalton-fanduel Update readme - company list
tom-dalton-fanduel authored Jun 16, 2015
290 + [FanDuel](https://www.fanduel.com/)
5dd8757 @manjuraj Update README.md
manjuraj authored Jul 1, 2015
291 + [Bloomreach](http://bloomreach.com/)
8e702ce @anubhavmishra Added Hootsuite as twemproxy users
anubhavmishra authored Jul 7, 2015
292 + [Hootsuite](https://hootsuite.com)
4bfcc42 @manjuraj updated README.md
manjuraj authored Jul 29, 2015
293 + [Tradesy](https://www.tradesy.com/)
0e8708b @caniszczyk Add Uber to the list of Adopters
caniszczyk authored Sep 17, 2015
294 + [Uber](http://uber.com) ([details](http://highscalability.com/blog/2015/9/14/how-uber-scales-their-real-time-market-platform.html))
6862e53 updated readme
Manju Rajashekhar authored Aug 17, 2012
295
861cd85 added zero-copy section to nutcracker readme.md
Manju Rajashekhar authored Jul 30, 2012
296 ## Issues and Support
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
297
298 Have a bug or a question? Please create an issue here on GitHub!
299
300 https://github.com/twitter/twemproxy/issues
301
9063042 @caniszczyk Add Committers section to reflect reality
caniszczyk authored Aug 11, 2014
302 ## Committers
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
303
4337239 updated readme
Manju Rajashekhar authored Jul 10, 2012
304 * Manju Rajashekhar ([@manju](https://twitter.com/manju))
f1b2bad @manjuraj Update README.md
manjuraj authored Aug 8, 2014
305 * Lin Yang ([@idning](https://github.com/idning))
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
306
9063042 @caniszczyk Add Committers section to reflect reality
caniszczyk authored Aug 11, 2014
307 Thank you to all of our [contributors](https://github.com/twitter/twemproxy/graphs/contributors)!
308
861cd85 added zero-copy section to nutcracker readme.md
Manju Rajashekhar authored Jul 30, 2012
309 ## License
3ca2e51 Initial commit
Manju Rajashekhar authored Feb 22, 2012
310
311 Copyright 2012 Twitter, Inc.
312
313 Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
Something went wrong with that request. Please try again.