memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。
那么,怎样进行分布式呢?这完全取决于客户端的实现。
如上图,有三个memcached节点,在set或者get时使用同一种算法计算key与节点的映射关系,然后将数据写入到该节点(get时从该节点中查询)
比较简单的算法是余数分散法(取模),其缺点是当增加节点或者节点挂了,重组缓存时,所有缓存将失效,代价太大。(采用一致性hash算法,避免此问题)
magent是一个memcached代理软件(memcached agent),又叫memagent。
通过Magent缓存代理,防止单点现象,缓存代理也可以做备份。
客户端连接到缓存代理服务器,缓存代理服务器连接缓存服务器。缓存代理服务器可以连接多台Memcached机器,可以将每台Memcached机器进行数据同步。如果其中一台Memcached机器down掉,数据不会丢失并且可以保证数据的完整性。
它提供的功能及特点有:
1、和每个memcache server保持多个长连接,效果是减少memcache server保持的连接数量及创建销毁连接的开销。
2、支持memcache的binary协议命令,实现请求的转发。
3、和memcache一样,基于libevent的事件驱动来处理IO。
4、支持ketama 的一致性hash算法。
5、支持memcache backup集群,当memcache集群有机器挂了,memagent会将get请求转向memcache backup集群。(高稳定性)