Mcrouter 是一个基于Memcached协议的路由器,它是 Facebook缓存架构的核心组件,在峰值的时候,它能够处理每秒50亿次的请求。近日,Facebook开放了Mcrouter的源代码,且遵从BSD协议,希望能够帮助更多的网站使用Mcrouter并扩大其系统规模。因为任何要接入Memcached服务的客户端都会使用标准ASCII编码的Memcached协议,所以对于客户端来说,Mcrouter就像一个Memcached服务器;而对于服务器端来说,Memcached却又像一个普通的Memcached客户端。采用Memcached的通用API作为通信方式如下图所示:

Mcrouter主要特性如下:

  • 支持标准、开源的Memcached ASCII编码协议,使得支持Memcached协议的所有客户端无需做任何修改即可支持Mcrouter。
  • 能够使得客户端共享连接池,达到减少连接个数的目的。
  • 提供了一个非常有效的一致性哈希算法,允许给多个Memcached实例分配哈希值。
  • 能够根据key前缀把客户端分配到不同的Memcached池中。
  • 能够在多个主机上保存一份相同数据的备份。
  • 在测试新缓存设备时,Mcrouter能够路做到从客户端到缓存设备的所有可能路径都可用的。
  • 支持灵活的跟踪配置,通过重新哈希值范围跟踪测试不同大小的Memcached池,或只跟踪哈希值范围的一部分,或在运行时动态修改跟踪环境。
  • 支持热加载配置文件,它会监控所有的配置文件,一旦检测到配置文件被修改,就启动一个后台线程自动地重新加载、分析这些文件,并根据新配置来处理新请求。
  • 支持灵活的路由方式,路由句柄是由小路由模块组合而成,这些路由模块公用一个接口,也可以自由组合,单个路由句柄更容易理解、创建和测试。
  • 支持目的主机的心跳检测和自动故障转移,能够检测每个目的主机的心跳。
  • 允许以主机、池或者集群为单位设置任何请求的速率的阀值,同时也支持限制请求的速度以减缓请求的发送速度,以保障服务质量。
  • 通过一个内核一个线程的方式充分利用了多核系统的优势,在处理异步处理网络事件时,使用了内部的轻量级线程即纤程
  • 具有丰富的stats和debug命令,并提供了安全可靠的删除操作。
  • 能够通过简单的配置管理大的多集群,还能够根据slab的大小自动分割或重组数据块
  • 能够通过广播操作把请求数据备份到多个Memcached池中或者集群里面。
  • 支持本地和远程缓存两级缓存,自动填充新增缓存以消除新增缓存区造成的性能影响
  • 采用JSON格式的配置,支持通过任意方式的路由处理,以适应各种路由需求。

更多Mcrouter相关信息,请登录其在GitHub上的站点查看,常用示例请参考这里。另外,Mcrouter由Facebook在去年的Data@Scale大会上提出,并于近日开源,即将成为Facebook 在新推出的TODO开源协作联盟当中开源的第一项技术。据Facebook方面介绍,Mcrouter 能够在Facebook遍布全世界的数据中心的服务器集群的缓存层中快速分配调用数据,它具有极强的适应性,峰值时可以达到每秒50亿次的请求。去年,Instagram 数据向Facebook平稳转移就是使用的该技术。

Mcrouter主要使用C++开发,且使用C开发了功能库部分,使用Ragel开发了协议解析部分,使用开源库FollyFbthrift处理异步网络。尽管Mcrouter已经开源,但是Facebook仍然一直寻求改进Mcrouter性能的方法(如修复Bug、添加新特性等),并作持续的更新和改进;还会在Github Wiki上维护Mcrouter的文档,同时还建立了一个Facebook讨论组,用来推动Mcrouter项目持续、健康的发展。

参考:

http://www.infoq.com/cn/news/2014/09/mcrouter-memcached(以上内容转自此篇文章)

http://www.oschina.net/translate/introducing-mcrouter-a-memcached-protocol-router-for-scaling-memcached-deployments

https://github.com/facebook/mcrouter/wiki(官方介绍)

https://github.com/facebook/mcrouter/wiki/mcrouter-installation(Ubuntu的安装参考)

链接: https://pan.baidu.com/s/1bMhuZs 密码: 8p8k(Mcrouter中文手册第二章)

Mcrouter-基于Memcached协议的缓存层流量管理工具(Memcached集群的另一个选择)(转)的更多相关文章

  1. Spark运行模式_基于YARN的Resource Manager的Custer模式(集群)

    使用如下命令执行应用程序: 和"基于YARN的Resource Manager的Client模式(集群)"运行模式,区别如下: 在Resource Manager端提交应用程序,会 ...

  2. 基于 Clusternet 与 OCM 打造新一代开放的多集群管理平台

    背景 随着 5G.物联网设备的爆炸性增长以及智能终端不断增强的计算能力,带来了前所未有的数据量,传统的中心集中式计算捉襟见肘."新基建"战略的实施,工业互联网.车联网/自动驾驶.智 ...

  3. 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...

  4. 基于docker,consul,consul-template, registrator, nginx服务注册发现集群

      介绍 该工程主要实现服务的自动注册发现,从而达到提高运维效率,做到服务的自动发现和动态扩展. 服务注册发现 服务启动后自动被发现 动态变更负载均衡 自动伸缩 工具 1.Registrator 这是 ...

  5. C++开发的基于TCP协议的内网聊天工具

    项目相关地址 源码:https://github.com/easonjim/TCPChat bug提交:https://github.com/easonjim/TCPChat/issues

  6. 基于redis实现tomcat8及以上版本的tomcat集群的session持久化实现(tomcat-redis-session-manager二次开发)

    前言: 本项目是基于jcoleman的tomcat-redis-session-manager二次开发版本 1.修改了小部分实现逻辑 2.去除对juni.jar包的依赖 3.去除无效代码和老版本tom ...

  7. Spark运行模式_基于YARN的Resource Manager的Client模式(集群)

    现在越来越多的场景,都是Spark跑在Hadoop集群中,所以为了做到资源能够均衡调度,会使用YARN来做为Spark的Cluster Manager,来为Spark的应用程序分配资源. 在执行Spa ...

  8. 基于zookeeper和强一致性复制实现MySQL分布式数据库集群

    http://qikan.cqvip.com/article/detail.aspx?id=667750898&from=zk_search

  9. 基于Galera Cluster多主结构的Mysql高可用集群

    Galera Cluster特点 1.多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的 2.同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失 3.并发复制:从 ...

随机推荐

  1. GIT学习之路第一天 简介及其安装

    本文参考廖雪峰老师的博客进行总结,完整学习请转廖雪峰博客 Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! 那什么是版本控制 ...

  2. H5活动的一些事

    ISUX团队镇楼:https://isux.tencent.com/nine-question-of-swipe-html5-page.html IE6.7.8支持html5新元素 : http:// ...

  3. C语言学习(1)-环境配置

    写在前面的话,该文章是看杨老师的一套视频,所做的一些笔记,边看边写,再此谢谢杨老师. 1.学习C之前需要避免的误区 误区一:C++是C的升级版:C#是C++的升级版 误区二:C/C++就是Visual ...

  4. [ CodeForces 1065 B ] Vasya and Isolated Vertices

    \(\\\) \(Description\) 求一个\(N\)个点\(M\)条边的无向图,点度为 \(0\) 的点最多和最少的数量. \(N\le 10^5,M\le \frac {N\times ( ...

  5. html与html5 总结

    时间:于2017年12月3日 19:35:18开始 用于: 这文章用于个人技术总结(全文转发请标明出处,小段摘抄随意) HTML笔记1.html标签不区分大小写,但是建议小写2.常用标签: 可用在he ...

  6. SpringMVC中Controller类的方法返回String不跳转,而是将字符串显示到页面

    问题描述: 在spring中,控制层的注解一般都是使用@Controller,如果哪个请求参数需要返回数据的话,我们可以在该方法上配合@ResponseBody注解使用,这也是比较常见的方式了. 今天 ...

  7. Angular——内置过滤器

    基本介绍 在AngularJS中使用过滤器格式化展示数据,在“{{}}”中使用“|”来调用过滤器,使用“:”传递参数. 基本使用 过滤器可以串起来使用,只要用   |  来衔接就行了,可以将上次返回的 ...

  8. STA之Concepts (1)

    Static Timing Analysis is one of the many techniques available to verify the timing of a digital des ...

  9. Windows提高_2.3第三部分:内核区同步

    第三部分:内核区同步 等待函数(WaitForObject) 等待函数的形式 单个:WaitForSingleObject 多个:WaitForMultipleObjects 一个可以被等待的对象通常 ...

  10. CAD得到多行文本(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::Mx_GetMTextContent 得到多行文本的,不包括格式控制符中的字符串值,详细说明如下: 参数 说明 LONG lId 多行 ...