基于Memcached协议的路由器Mcrouter介绍

概述

Mcrouter的开源地址GitHub,一个基于Memcached协议的路由器,适用于大规模集群,峰值每秒可以处理接近50亿个请求。

主要特性:

  • 支持标准的Memcached ASCII协议,使得支持Memcached协议的所有客户端无需做任何修改即可支持Mcrouter。
  • 多个客户端可以通过连接Mcrouter共享后端Memcached的连接池。
  • 多种一致性Hash算法可供选择,允许给多个Memcached实例分配哈希值。
  • 灵活的路由,支持前缀路由。
  • 复制模式连接池,写操作复制到连接池中所有实例,读操作从其中一个实例读取。
  • 支持流量复制,从生产环境复制流量,对新上的集群进行测试。
  • 在线更新配置。
  • 支持后端的Memcached健康检测和失败后的自动保护。
  • 对cold集群热身。
  • 在后端连接池/集群广播接收到的操作。
  • 可靠删除。在后端某个实例删除失败时,Mcrouter将操作记录在redolog中,后台线程间隔性地重新执行删除操作。
  • 多集群支持,拥有丰富的监控和调试命令。
  • QoS支持。Mcrouter支持根据主机、连接池、集群进行流量控制,可以对任何操作进行流控,如get/set/delete。还可以对超限流的请求进行拒绝,也可以对流量整形。
  • 支持超大对象,Mcrouter可以对不能放入Memcached Slab中的超大对象自动切分/重组。
  • 支持本地缓存,实现多级高速缓存。
  • IPv6和SSL的支持。
  • 提供丰富的stats和debug命令,以及安全可靠的删除操作。
  • 通过一个内核一个线程的方式充分利用多核系统的优势,在异步处理网络事件时,使用内部的轻量级线程,即纤程。

架构

任何要接入Memcached服务的客户端都会使用标准ASCII编码的Memcached协议。对于客户端来说,Mcrouter就像一个Memcached服务器;而对于服务器端来说,Memcached却又像一个普通的Memcached客户端。采用Memcached的通用API作为通信方式如下图所示:
在这里插入图片描述

路由算法

Mcrouter提供的路由算法:

  • AllAsyncRoute:向children属性指定的所有Memcached集群发送相同的请求,不等待集群响应,返回由NullRoute定义的返回值。
  • AllFastestRoute:向children属性指定的所有Memcached集群发送相同的请求,把第一个响应的集群返回内容返回给客户端。其他的Memcached集群响应被忽略。
  • AllInitialRoute:向children属性指定的所有Memcached集群发送相同的请求,等待children属性指定的第一个Memcached集群返回,并将返回内容返回给客户端。其他的Memcached集群响应被忽略。
  • AllMajorityRoute:向children属性指定的所有Memcached集群发送相同的请求,并等待半数以上Memcached集群成功返回,如果没有半数以上成功,则返回最后一个错误响应。
  • AllSyncRoute:向children属性指定的所有Memcached集群发送相同的请求,并等所有Memcached集群返回,给客户端返回最坏的一个响应。
  • DevNullRoute:和NullRoute类似,会同时返回stat报告。
  • ErrorRoute:立即返回一个指定的错误信息。
  • FailoverRoute:将请求转发给children属性指定的Memcached集群列表中的第一个集群,然后等待返回,如果成功,则将响应发送给客户端。如果失败,则轮询第二个集群,直到有一个成功。如果所有集群都失败,则返回给客户端最后接收到的失败消息,key miss不被当作错误,如果希望key miss做为一种错误处理,可以使用MissFailoverRoute。
  • FailoverWithExptimeRoute:带失效时间的FailoverRoute,在某个集群被标记为失败后,隔一段时间重新路由到该集群,如果发生错误,重新进行failover。
  • HashRoute:基于key的Hash路由。
  • HostIdRoute:根据客户端主机ID计算hash,进行路由。
  • LatestRoute:随机连接,如果返回错误则再次随机连接,最大随机次数为failover_count。
  • MigrateRoute:迁移模式路由。
  • MissFailoverRoute:路由同Failover模式,key miss认为后端集群出错。
  • ModifyExptimeRoute:经过这个路由的请求,TTL将被重新赋值。
  • NullRoute:为每个请求都返回一个空的响应。
  • PrefixSelectorRoute:通过key的前缀进行路由。
  • PoolRoute:路由到一个Memcached集群,类似HashRoute,但通常还有限流等功能。
  • RandomRoute:随机路由到children属性指定的Memcached集群列表中的某一个集群。
  • WarmUpRoute:set和delete命令发送到cold集群。get命令首先尝试从cold集群获取,如果key miss,则从warm集群获取,如果从warm集群取到,则返回客户端,并异步地更新cold集群。

适用场景

适用场景包括:

  • 分片池:Sharded pools,就是常说的数据水平切分。Mcrouter可以将请求按照缓存key的哈希值发送到不同的Memcached服务器上。这样缓存数据将被均匀地分布在不同的Memcached服务器上,同时对同一个缓存的操作也将按照缓存key的哈希值发送到同一台Memcached服务器上。Mcrouter对一个服务器资源池默认使用分片池的方式管理。配置示例:
{
   
	"pools": {
   
		"A": {
   
			"servers": [
				"127.0.0.1:12345",
				"127.0.0.1:12346"
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnny233

晚饭能不能加鸡腿就靠你了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值