基于memcached协议缓存层流量管理工具:Mcrouter
随着这次门户功能改造的深入,对各个功能模块有了更加深刻的认识,昨天在编码的过程中看到工程中引用的memcache缓存层流量管理工具:Mcrouter,结合原来了解到的Nginx在这里对这款Facebook的新产品的功能做一个介绍:
在去年的Data@Scale大会和USENIX的USENIX的NSDI(联网系统设计和实现座谈会)上我们就提过会将缓存换成我们自主开发的分布式软件系统,我们称之为mcrouter(发音“mick-router”)。Mcrouter是一个memcached协议的路由器,被facebook用于在他们遍布全球的数据中心中的数十个集群几千个服务器之间控制流量。它适用于大规模的级别中,在峰值的时候,mcrouter处理接近50亿的请求/秒。Mcrouter同样也可以作为独立的二进制包工作于AWS中,去年之前Instagram使用它来完全过渡到Facebook的基础设施。
今天,我们激动的宣布我们将发布mcrouter的源代码(开源BSD协议)。我们相信它可以帮助更多的网站通过Facebook的大规模系统的知识以一种更容易理解更容易发布的方式扩大其系统的规模。
特性:
1、由于任何要接入memcached服务的客户端,都会使用标准ASCII编码的memcached协议,我们可以采用memcached的通用API作为通信方式(参看下图)。对于memcached客户端,mcrouter完全像一个memcached服务器。对于服务器,mcrouter完全像一个普通的memcached客户端。但mcrouter丰富的可配置性,使得它更像一个简化的proxy。
2、下面列举了一些mcrouter的特性。其中“destination”指memcached 主机(或者其他能兼容memcached协议的缓存服务实现)。“pool”指集群化的destinations,并能通过配置将负载均衡分配给不同的destination--例如,可通过hash方式均衡,亦可通过冗余数据均衡(读操作)。无论何种方式,pools最终都能以集群的方式进行管理。
3、连接池:mcrouter能让客户端共享连接池,以减少连接个数
4、memcached池备份:在多个主机上保存一份相同数据的备份.做写错做时向所有的主机写入同一份数据,但是做读操作时只从客户端对应的缓存区读取一份数据.这样就可以处理由于主机数据的限制造成分片池不能处理的读出率的问题;而且还能增强数据的可用性(比如:由于故障自动转移,即使一份备份坏掉也不会影响其正常操作).
5、Destination心跳检测和自动故障转移: Mcrouter能够检测每个destination的心跳.一旦mcrouter将一个destination标记为无响应,它将直接将所有的请求转移到另一个可用的destination. 同时,后台形成将向无响应destination发送心跳请求,只要destination的心跳恢复正常,mcrouter将会重新启用这个destination."软错误"(比如:数据超时)允许连续发生多次,但是一旦发生"硬错误"(比如:拒绝连接)mcrouter立即将该destination标记为无响应. 不用说,这个过程对客户端完全是透明的.
6、可靠的删除操作:在一个有求必应的缓冲区里,保证所有的删除操作都送到目的地是非常重要的.mcrouter将所有的删除操作都记录到硬盘上以防止由于网络中断或者原因导致destination不可访问.当连接修复之后,mcrouter将启动一个单独的进程异步的重新执行这些删除操作.这个过程对客户端是透明的,并且客户端接受到的操作结果通常是成功的.
7、多级缓存:mcrouter支持本地/远程缓存设置.请求数据时先从本地缓存区查找,如果在本地缓存区查找失败再从远程缓存区查找,如果在远程缓存区找到该数据,mcrouter会自动的将数据缓存到本地缓存区.
8、我的电脑上mcrouter配置方式
目前这里配置了两台Mcrouter服务器,每台分别映射了四台memcache缓存服务器