Ok, makes sense, but that’s a bummer, especially since the memcache library in 
python already supports multi-server memcached 
(http://stackoverflow.com/questions/4038094/using-multiple-memcache-servers-in-a-pool).
 

 

Not sure yet, but I’ll probably just use https://github.com/twitter/twemproxy 
which is a reverse proxy to actual memcached servers. It’s written by Twitter 
and works well from what I’ve read. I tried using 
https://github.com/zobo/mrproxy which proxies memcached protocol to Redis since 
I already had Redis servers but had issues getting that working for some 
reason. I’ll report back when I get one or the other working in case others are 
interested.

 

Thanks!

Rob Archibald

 

From: d...@apple.com [mailto:d...@apple.com] 
Sent: Monday, February 20, 2017 9:46 AM
To: Rob Archibald
Cc: calendarserver-users@lists.macosforge.org
Subject: Re: [CalendarServer-users] Multiple Memcached servers

 

Hi,

 

CalendarServer doesn't have the ability to directly access more than one 
memcache server per pool, and although you can bind "HandleCacheTypes" to 
specific pools, that doesn't let you distribute data within a cachetype.

 

To properly spread the load across multiple memcache servers, there needs to be 
a strategy for mapping the keys to one of the memcache services, which is 
already a feature of couchbase, and is known to work with CalendarServer. In 
this setup, couchbase reverse proxies to other cousebase nodes for a non local 
key, a behavior implemented both in their server and / or a local process that 
has no data store and is just a proxy.

 

-dre


On Feb 18, 2017, at 7:18 PM, Rob Archibald <r...@robarchibald.com> wrote:

One of the benefits of Memcached is that it allows you to spread caching load 
across multiple servers. From looking at the config file for Calendar Server, 
it looked initially to me that it would support multiple Memcached servers, but 
now I guess I’m not so sure.  This is how php handles multi-server 
configuration:

 

$MEMCACHE_SERVERS = array(

    "10.1.1.1", //web1

    "10.1.1.2", //web2

   "10.1.1.3", //web3

);

 

I did a quick search of the code and I think I’ve found the connection method 
for memcache. I found this in txdav/who/cache.py so let me know if I’ve gone to 
the wrong place. It looks like it is only able to handle one server 
(hightlighted below). Am I missing some secret method to allow for multi-server 
memcached? 

 


def _getMemcacheClient(self, refresh=False):


        """


        Get the memcache client instance to use for caching.

        

        @param refresh: whether or not to create a new memcache client


        @type refresh: L{bool}

        

        @return: the client to use


        @rtype: L{memcacheclient.Client}


        """


        if refresh or not hasattr(self, "memcacheClient"):

        

            if config.Memcached.Pools.Default.MemcacheSocket:


                client_addr = 
"unix:{}".format(config.Memcached.Pools.Default.MemcacheSocket)


            else:


                client_addr = "{}:{}".format(


                    config.Memcached.Pools.Default.BindAddress,


                    config.Memcached.Pools.Default.Port,


                )


            self.memcacheClient = ClientFactory.getClient([client_addr], 
debug=0, pickleProtocol=2)


        return self.memcacheClient

 

_______________________________________________
calendarserver-users mailing list
calendarserver-users@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/calendarserver-users

_______________________________________________
calendarserver-users mailing list
calendarserver-users@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/calendarserver-users

Reply via email to