11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

Mcrouter: 基于 Memcached 协议的缓存层流量管理工具

  • 2014-09-26
  • 本文字数:1470 字

    阅读完需:约 5 分钟

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


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-09-26 04:513474
用户头像

发布了 92 篇内容, 共 42.2 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

Service Worker in Action

xgqfrms

Service Worker Web Worker

从一道面试题来看计算机基础知识的重要性

周三不加班

数组 堆栈 函数栈 函数栈调用

Python3.6.1官方文档练习——初入江湖(一)

小匚

Python python3.x 入门

快捷考勤打卡设置

Megatron7

ios

《零基础学Java》 FAQ 之 2-Java版本那点事儿

臧萌

Java

内存对齐

泰伦卢

c c++ C#

maven私服搭建

kcnf

maven

当我们谈到ThreadLocal的时候,我们在谈什么?

Jason

Java 多线程 ThreadLocal

关于GDB你需要知道的技巧

泰伦卢

c c++ C#

利用goaccess分析nginx日志

Megatron7

nginx Linux

Graylog部署文档

蚍蜉

Linux 开源 工具 日志分析

pip 配置路径要死记硬背?

风起帆扬了

Python Linux windows pip

MySQL中 int(11)和 int(10) 到底有没有区别?

周三不加班

MySQL 字符宽度 数据库数据类型

聊聊苹果账号的那些事儿

不要艾特我

iphone

css常见问题总结

靖仙

CSS css3

Bash 的4种运行模式

Megatron7

bash Linux DevOps Shell

Kubernetes 将迎来首个 LTS 版本

倪朋飞

Kubernetes 容器 微服务

《零基础学Java》 FAQ 之 1-HelloWorld程序发生了ClassNotFound错误怎么解决

臧萌

Java Hello World !

一次线上服务高 CPU 占用优化实践

张亚

性能优化 JVM cpu

字节流(InputStream/OutputStream)

Howe

Java 工作流

centos7 maven私服自动启动

kcnf

写字工具更新史

Bonaparte

学习 读书笔记

Redis 6.0 新特性-多线程连环13问!

牧码哥

redis 多线程 io

从删库到跑路?

岳老三

产品 职业 产品经理 职业素养 职业道德

开源商业模式促进金融业科技生态的发展

FinClip

开源 金融科技

浅谈SpringCloud之服务注册中心Eureka

北漂码农有话说

各大公司面试题分类整理

是小毛吖

面试 后端

一个平凡程序员的年度总结

小智

程序员 人生

业务代码的救星——Java 对象转换框架 MapStruct 妙用

周三不加班

MapStruct 对象转换

【译】【UX】一个页面可以有多个面包屑导航吗?

Yukun

用户研究 UX 面包屑导航

python 之 「奶茶名字」的词云展示

小匚

Python python 爬虫 python教程

Mcrouter:基于 Memcached协议的缓存层流量管理工具_Facebook_李士窑_InfoQ精选文章