memcached opinions
Luke Macken
lmacken at redhat.com
Thu Sep 10 01:31:28 UTC 2009
On Wed, Sep 09, 2009 at 04:33:19PM -0400, Luke Macken wrote:
> On Wed, Jul 01, 2009 at 05:50:12PM -0700, Toshio Kuratomi wrote:
> > On 07/01/2009 05:39 PM, Mike McGrath wrote:
> > > On Wed, 1 Jul 2009, Stephen John Smoogen wrote:
> > >
> > >> On Wed, Jul 1, 2009 at 6:08 PM, Mike McGrath<mmcgrath at redhat.com> wrote:
> > >>> On Wed, 1 Jul 2009, Stephen John Smoogen wrote:
> > >>>
> > >>>> On Wed, Jul 1, 2009 at 3:33 PM, Mike McGrath<mmcgrath at redhat.com> wrote:
> > >>>>> I'm not sure if we have any memcached experience on the list but I thought
> > >>>>> I'd ask. Can anyone explain this:
> > >>>>>
> > >>>>> http://pastebin.ca/1481219
> > >>>>>
> > >>>>> Notice how memcached1 has a much higher hit rate and memcached2 has a much
> > >>>>> lower hit rate?
> > >>>>>
> > >>>>
> > >>>> The time for memcached1 is 5x less than memcached2 being up. That can
> > >>>> have an effect on caching as right after a system comes up its rates
> > >>>> are usually much higher and then over time fall off (iirc). I think it
> > >>>> would take bringing both up at the same time to figure out if there is
> > >>>> a true disparity over caching.
> > >>>>
> > >>>
> > >>> I thought that exact same thing :)
> > >>>
> > >>> memcahed1:
> > >>> STAT uptime 9143
> > >>> STAT get_hits 311736
> > >>> STAT get_misses 11255
> > >>>
> > >>> memcached2:
> > >>> STAT uptime 9144
> > >>> STAT get_hits 49679
> > >>> STAT get_misses 11116
> > >>>
> > >>
> > >> Now that shows something not kosher. My guess is some app is not
> > >> talking to both? What apps use memcached for what?
> > >>
> > >
> > > I was just talking to ricky about this a bit in IRC. So here's the scoop.
> > >
> > > We've got mediawiki using memcached for a couple of things, including
> > > session data (which is weird and wrong but fast).
> > >
> > > The recent addition to the group is Fedora community, specifically in it's
> > > implementation of beaker. I'm going to get ahold of luke tomorrow to
> > > verify and test some stuff but I think this line in the config:
> > >
> > > beaker.cache.url = memcached1;memcached
> > >
> > > I'm not sure how beaker reads that, but I suspect it might be only sending
> > > information to memcached1 and ignoring memcached2 altogether. If this
> > > theory holds it'd explain why memcached1 not only has a higher request
> > > rate but also a higher hit rate because I suspect fedoracommunity requests
> > > some of the same info over and over again compared to the wiki which
> > > probably has a broader data pool it pulls from.
> > >
> > easy test: reverse that:
> >
> > beaker.cache.url = memcached2;memcached1
> >
> > and see if the cache hit ratio reverses itself.
> >
> > -Toshio
>
> So, I've been poking at this a little bit lately, and I'm thinking there are
> some problems with the way Fedora Community is utilizing it's Beaker cache &
> memcached.
>
> The fact that something is wrong with the caching setup becomes obvious when
> playing with the Bugzilla grid *should* cache the first 5 pages, and be very
> snappy, as it is in my local instance. However, that is not the case, which
> makes me think it's not hitting our memcached servers.
>
> I wrote up a little test script on app1::
>
> from beaker.cache import CacheManager
>
> memcached1 = CacheManager(type='ext:memcached', url='memcached1', lock_dir='.')
> memcached2 = CacheManager(type='ext:memcached', url='memcached2', lock_dir='.')
>
> def createfunc(*args):
> print "createfunc(%s)" % (args,)
>
> def get_value(cache, value):
> cache_1 = memcached1.get_cache(cache)
> cache_2 = memcached2.get_cache(cache)
> result1 = cache_1.get_value(key=value, createfunc=createfunc)
> result2 = cache_2.get_value(key=value, createfunc=createfunc)
> print "memcached1[%s][%s] = %s" % (cache, value, result1)
> print "memcached2[%s][%s] = %s" % (cache, value, result2)
> return result1, result2
>
> get_value('fedoracommunity_alerts_global', 'today')
> get_value('bodhi', 'dashboard_None')
>
> Which produces::
>
> memcached1[fedoracommunity_alerts_global][today] = None
> memcached2[fedoracommunity_alerts_global][today] = None
> memcached1[bodhi][dashboard_None] = None
> memcached2[bodhi][dashboard_None] = None
>
> I also tried using netcat to query for these by hand, to no avail.
>
> So, it looks like we need to look a bit deeper into what is going on here.
> Either I'm Doing It Wrong with Beaker, or we're hitting a bug somewhere.
I did a little more testing with this today.
On app1 I was unable to get fedoracommunity to put any values in
memcached, and I was not seeing any errors either. I tried this with
both the mod_wsgi deployment, and running paster locally. I then ran
`curl http://localhost:8080/apps/fedoracommunity.alerts/` to trigger the
cache, and then ran the script I mentioned earlier to see if I could
retrieve those values.
I was able to reproduce this failure on a local RHEL5 VM. However,
after upgrading to python-beaker-1.4 *and* restarting memcached, my
script *worked*. (the app just silently returned None for all requests
if I didn't restart memcached after upgrading Beaker)
Looking at the ChangeLog for Beaker 1.4, I'm thinking this could have
done the trick:
* Fixed bug with CacheMiddleware overwriting configuration with default
arguments despite prior setting.
It'll be tough to test this new package in staging, as earlier today I
couldn't get any of the cached apps to load due to koji/fas problems in
staging. When we deploy this production, we'll need to make sure to
restart our memcache daemons.
luke
More information about the Fedora-infrastructure-list
mailing list