Hello list,
i might be facing a small scalability bump in my application.
I'm doing about 7k GETs and 1k CAS operations a second to a memcached cluster of 2 nodes and noticed the high quantiles for the GETs declide rather badly ( bad is up for definition, but anyway ). My application is extremely latency sensitive ( real time bidding ) and this is hurting me badly and is not at all present with just a little less load ( non-linear performance )
these are the high quantiles for a GET operation via xmemcached
99th percentile - 20ms
98th percentile - 12ms
95th percentile - 8ms
with about half the requests/sec ( but same concurrency ), i get a fraction of the latency, the 99th percentile is at around 3ms.
Now, what i noticed is that this single call is taking up 20% of CPU time
net.rubyeye.xmemcached.transcoders.SerializingTranscoder.decode:86
( relevant part of profiler output attached )
- During the peak of 7k read 1k CAS, my load is around 10 on a 24 CPU system.
- on avg this GET/CAS traffic is produced by 25 concurrently running threads
- i have 2 connections configured
- i have 2 Memcache Client instances with random distribution of requests
my questions are:
- are these numbers realistic?
- should i use a different serializer?
- could something else be happening that i'm not aware of? ( although: no errors/warnings from net.rubyeye* )
i appreciate any assistance!
thanks,
Andras