因为memcached 不支持多租户,不支持多个用户使用同一个缓存,而且memcached之间也没有任何交互操做,因此自定义开发memcached 的多租户的集群成了必要的选择,因为目前网络上没有太好的支持多租户的memcahced集群方案,因此我本身开发了一套memcahced集群,支持用户名和密码算法
架构说明:缓存
McProxy: 全部外部请求的入口,用户访问memcached集群的入口, McProxy中维护一个路由表map,路由表结构以下: one namespace -> a memcached cluster , McProxy 经过namespace(用户名)来区分不一样的集群网络
Config Servers: Config servers分为Master, Slave, Heatbeat三种角色的机器, Heatbeat属于Slave机器中的一种,Slave机器之间会互相检测健康状态. Heatbeat机器定时检测Master机器的状态, 若是Heatbeat机器down其余的slave机器采用抢占模式,自封Heatbeat角色,并开始从新检测Master机器.架构
Master机器会维护全部的memcached集群和McProxy的路由表, Master会定时的检测全部memcached集群的状态, 若是有memcached集群的server down,Master机器会通知全部McProxy去更新路由表. 若是Master机器down, Heatbeat机器会指定其余有效的Slave机器,自封Master角色,并开始承担Master机器的工做并发
Memcached Cluster: Memcached cluster机器之间是不会互相通讯, 可是也会有一个Master多个Slave的角色, 当有写的请求, McProxy 先将数据写入memcached Master机器, 而后并发的备份数据到其余的memcached Slave机器, 当有读的请求, 采用hash一致性算法,随机选择一个cache读取数据memcached
架构简易图以下:spa