Memcache论文总结——Lec16

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

一、相关名词

1.mcrouter层

FACEBOOK提供了一个mcrouter层,CLIENT对所有请求构建一个DAG,找到可以合并发送的请求发送给mcrouter,让他来分发出去。
降低数据包率:如果直接将失效缓存消息发送会浪费网络资源,因此需要将缓存失效消息批量发送给每个前端集群中的mcrouter,再由mcrouter转发给集群内的服务器。
是memcache 客户端(sdk 与 proxy)的一部分,代理proxy被称为 mcrouter。

2.GUTTER SERVER

他们是一组IDLE的SERVER,用户使用他们只当MC SERVER挂了的时候。
系统设置了少量称为Gutter的机器来暂时管理不可用机器的键范围,Gutter中的数据有效期很短,这样避免了需要使缓存失效的操作。

3.mcsqueal

存储集群保存着最新数据,用户请求将数据副本写入到前端服务器。存储集群负责发送缓存失效命令,来保持数据的一致性。对数据产生修改的SQL会附上需要失效的mamcache键,应用更改之后由mcsqueal将缓存失效消息发送给各个前端集群中的服务器。
利用 DB 数据的更新日志来保证数据在不同集群间的最终一致性。

squeal/skwiːl/告密,尖叫声

4.remote mark

FB解决REGION间的主从不一致,通过"remote mark"
C1 DELETE()的时候,如果是主, 使用mcsqueal传输失效消息可以避免失效信息先于数据更新到达。(因为mcsqueal 这个daemon是监听DB的COMMIT消息)
如果是非主,当Web务器更新键值k时:
在从region , delete()时,这个K上写一个"remote mark"
如果C1 get()的时候,发现了这个标记,就去master那读,而不是自己的LOCAL DB。
随后去主region进行UPDATE,然后复制数据到从DB,这个时候这个标记会被清除。

二、当流量增长了如何SCALE 你的网站?

1.在最开始的时候我们搭建一个站点,可能就一台机器里面包含了WEB SERVER,Application和DB(如MySQL)。 DB就把数据存在硬盘里。application 去查询 db随后渲染HTML。当流量开始增长,你的PHP Application要消耗更多CPU,单机无法承受,这通常这就是他们所遇到的第一个性能瓶颈。所以,你所需要做的就是为你的PHP脚本提供更多的服务器资源。
在这里插入图片描述
2.我们转向了第二种网站架构—— 多个WEB SERVER, 一个共享的数据库。
用户大量增多,需要更多的CPU处理能力来执行PHP脚本。所以运行了一堆前端服务器(下图中的FE),它们只负责运行和用户浏览器进行通信的web服务器。这上面运行着Apacheweb服务器以及PHP脚本,所有这些前端服务器都需要看到相同的后端数据。为了做到这点,这里你可以放一个数据库服务器(下图最右侧的MySQL)。流量增长,我们只需要加更多WEB SERVER直到DB成为瓶颈。
当使用一个服务器来运行MySQL时,它用来处理所有来自前端服务器对数据库的查询,更新,读取以及写入请求。如果使用两个数据库服务器,并将你的数据以某种方式分散到多个数据库服务器中时,情况就会变得更为复杂。你就需要关心是否要使用分布式事务,或者该PHP脚本应该通过哪种方式来确定它要和哪个数据库服务器进行通信。
在这里插入图片描述
3.大型网站的一种标准演变,下面要转向web架构3——水平扩容
数据根据SHARD KEY散落在不同的DB上。 APP 根据SHARD KEY去查询对应的DB(如下图第一个数据库服务器上保存的是key从a到g的相关数据,第二个数据库服务器上保存的是key从g到q的相关数据,以此类推)。 只要没有单个KEY是超级火爆的,负载就会被均匀的分散。
在这里插入图片描述
但是数据分片带来了额外开销:①需要对前端服务器上的软件进行修改让PHP代码知道数据分片相关的信息。②对于事务会需要用到两阶段提交或者一些其他分布式事务方案,速度很慢。
这种方案,成本高,速度慢,还会有热点问题。所以我们无须花大量的钱来添加另一台运行着MySQL的数据库服务器,可以在同一台服务器上面运行缓存memcached。在相同的硬件上,使用缓存每秒读取的数据量要比使用数据库多得多。
总结:为了更好的解决流量增长时的网络架构面对的db访问瓶颈,出现了memcached.
4.Facebook的架构
现在我们的架构变成很多WEB SERVER, 很多CACHE SERVER提供读服务,还有很多DB支持写。
在前端服务器和数据库服务器之间有一个缓存层memcached。当前端服务器需要去读取一些数据,它会往其中一个memcache服务器发送一个携带某个key的get请求。memcache服务器会去检查它内存中的一张表(大型hash table)中是否有这个key,如果有的话,它就会将对应的数据返回给前端服务器。
如果并未命中memcache服务器中的缓存,那么前端服务器就得将请求重新发送给相关的数据库服务器。为了之后的请求,前端服务器会发送一个put请求并携带它从数据库中所拿到的数据给memcache服务器。
(注:读——memcache, 写——数据库)
在这里插入图片描述
(1)问题:当读memcache miss时,为什么是前端服务器发送put请求写入memcache,而不是memcache在miss时,转发给db,并将db的响应缓存起来?
不能这样做的原因是,memcache就像是一个完全独立的软件,它对数据库一无所知。虽然我们经常将它和数据库放在一起使用,但我们无法将数据库的知识应用到memcache中。
更深层次的理由是,前端服务器会对从db得到的结果进行某种处理(它可能需要花几步来将结果转换为html,或者,它会从数据库的多行数据中获取结果,并将部分处理过的信息缓存到memcache中,以此来节省下一个要执行相同操作的reader所要花的时间)。所以,memcache并不理解前端服务器想看到哪些缓存数据,以及你是如何从数据库中衍生数据的。这些逻辑都是放在前端服务器中的php代码里的。
所以,从架构上来说,这是一个很不错的想法,但我们不能做这种整合,即让memcache和数据库之间直接进行通信,虽然这会让缓存一致性变得更为简单。
(总结:web服务器可能需要的并不是数据库中的原始数据,而是经过处理的html或整合后的结果,会向memcache中存储处理后的数据,所以不能直接由memcache与数据库交互来保存数据)

(2)问题:look-aside cache和look-through cache间的区别是什么?
look-aside cache的作用是,前端服务器会先查看数据是否存在于缓存中,它会从数据库中获取未缓存的数据。如果使用的是look-through cache,那么就会通过memcache将我的请求转发给数据库,让数据库来处理响应(即memcache与数据库有交互)。
(总结:数据同步时,look-aside cache是以前端服务器为中心,look-through cache是以memcache为中心)
memcache流行的部分原因是,它使用的是look-aside cache,让web服务器作为中间方来对memcache中的数据和数据库中的数据进行操作,即memcache不直接与数据库进行交互,通过web服务器来和数据库进行交互。

三、背景及业务特点

1.读多写少

与大部分互联网公司的读写流量特点类似,FB 的整体业务呈现出明显读多写少的特点,其读请求量比写请求量高出 2 个数量级 (数据来自于https://www.usenix.org/sites/default/files/conference/protected-files/nishtala_nsdi13_slides.pdf、 slides),因此增加缓存层可以显著提高业务稳定性,保护 DB。

2.FB需求:

Facebook作为社交网络服务基础设施,需要满足:

  • 近似实时通信;
  • 实时聚合多个来源的内容;
  • 读取/更新热点的共享内容;
  • 可伸缩以处理billion级用户并发。

为满足以上需求,Facebook从单机(memcached)、集群(cluster)、区域(region)、跨区域(cross-region)这4个方面以bottom up的方式讲述他们是如何scale的。

3.之前情况

在使用缓存层之前,FB 的 Web Server 直接访问数据库,通过 数据分片 和 一主多从 的方式来扛住读写流量:
在这里插入图片描述
但随着用户数数量飙升,单纯靠数据库来抗压成本高,效率低。

四、简介

1.Scaling Memcache at Facebook是Facebook团队2013年的一篇论文,讲述Facebook如何使用开源的memcached构建分布式内存KV集群,使用memcache来处理海量的工作量(这里指的memcache和下文的memcacheD,说的都是运行着memcacheD的服务器)。

这篇paper中存在着很多可以借鉴的经验,它里面并没有任何新的概念或者想法或者技术之类的东西,当那些公司试着去构建具备高负载能力的基础架构时,他们就会去使用这篇paper中提到的这些方法。

2.Memcached是一个简单的内存cache组件,支持低延迟低成本的内存访问。

3.Memcached提供的是一个纯内存的哈希表访存服务,支持键值对的存储模式,提供的基本接口为put, get, delete。

五、FaceBook的架构

1.在进入正文之前,需要厘清以下概念(见Figure 2):

  • memcached:开源memcached技术,在文中指运行时的单台实例;
  • cluster:指多台memcached组成的最小单位的集群,memcached之间相互不通信,由client端使用consistent hash将数据分布到多台memcached;
  • region:多web server集群和多cluster集群组成frontend clusters,共享一个storage cluster组成一个region;
  • cross-region:多个region,每个region分布在不同地理位置。只有一个region的storage
    cluster是master角色,其他的是slave角色,从m
Scaling-Memcache-At-Facebook 看 Facebook 如何使用 MemCached 单机 50W 并发,非常牛。这是 2013 年的 pager,值得一看。 立即下载

相关推荐

Mcrouter 介绍 —— 来自 Facebook 的 memcached 协议路由器

转自:http://www.oschina.net/translate/introducing-mcrouter-a-memcached-protocol-router-for-scaling-memcached-deployments 大多数Web服务开始于前端负载均衡、中间业务服务及后端数据库服务的架构。当业务发展到一定阶段,通常会引入一组缓存服务缓存数据库的数据,减少数据库的压力以提高性能

Adam040606的博客 1251

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

Mcrouter概述、路由算法、适用场景、可扩展性、监控、源码解析

lonelymanontheway的博客 1093

如何快速上手IndoBERT Base-p2:从安装到基础文本分类实战指南

IndoBERT Base-p2是一款基于BERT架构的印尼语自然语言处理模型,专为印尼语理解任务优化。本文将带你快速掌握从环境配置到文本分类的完整流程,让你轻松开启印尼语NLP应用开发之旅。 ## 📋 核心功能与优势 IndoBERT Base-p2作为IndoBERT系列的重要成员,具备以下特点: - **124.5M参数规模**的基础模型架构,在印尼语语料上预训练 - 支持**文本分类

gitblog_00455的博客 742

Scaling Memcache at Facebook

Scaling Memcache at Facebook 概要:Memcached 是一个知名的,简单的,全内存的缓存方案。这篇文章描述了facebook是如何使用memcached来构建和扩展一个分布式的key-value存储来为世界上最大的社交网站服务的。我们的系统每秒要处理几十亿的请求,同时存储了几万亿的数据项,可以给全世界超过10亿的用户提供丰富体验。 1.摘要 1.1.文关注于memcached,这是一个全内存哈希表的开源实现,它以较低的开销提供了对共享存储的低迟延访问。有了这些特性我们可以

小蚂蚁与大象 414

Scaling Memcache at Facebook论文理解

体会 这篇论文读起来很有意思,设计体现了各方面的权衡,里面不仅考虑了分布式的CAP问题,也考虑到了计算机网络发包的机制和其他方面的内容,值得仔细品味。 具体总结 待完善

super_dmz的博客 1235

Scaling Memcache at Facebook (2013)

本文介绍 FB 基于 memcached 构建统一缓存层的最佳实践。全文递进式地讲述 单集群 (Single Front-end Cluster)、多集群 (Multiple Front-end Clusters)、多区域 (Multiple Regions) 环境下遇到的问题和相应的解决方案。尽管整个解决方案以 memcached 为基本单元,但我们可以任意地将 memcached 替换成 redis、boltDB、levelDB 等其它服务作为缓存单元。 在下文中,需要注意两个词语的区别: memca

1832

COPS论文总结——Lec17

1.论文的标题是‘Don’t Settle for Eventual:Scalable Causal Consistency for Wide-Area Storage with COPS’,可以看出,论文提出了相对于‘最终一致性’更强的**‘因果一致性’的可扩展性**,即Wide-Area存储COPS。2.这篇论文的设计思想其实主要解决的是异地数据中心复制的问题,同时要保证因果一致性PLUS3. 本文介绍一个KV存储系统COPS,其实现了集群级别的“带有收敛冲突处理的因果一致性。

qq_40229166的博客 933

memcache集群方案

1.方案选型 缓存方案的基本要求:避免单点故障;较好的性能和稳定性;便于运维管理。 常见方案如下: A. 客户端直接访问多个memcache 实例 优点:简单,未引入新的节点; 缺点:维护不方便,未实现集中管理;性能不满足,实例宕机后不能自动踢出(hash到该实例的请求都要等到超时才能转到其他正常实例)。 B. magent代理 优点:简单,满足缓存对代理的大部分要求; 缺点:无成

sdmei 6864

Memcache与并发

memecache是facebook的一个缓存中间件,称为后来系统设计缓存的一个参考。

u011541325的博客 612

6.824 2020 Lecture 16: Scaling Memcache at Facebook

参见:https://pdos.csail.mit.edu/6.824/notes/l-memcached.txt 目录网站架构目标memcached集群不是所有的键值对都是平等的mcrouter竞争条件 网站架构 FE 前端web服务器(无状态的,所以很简单) cache 中间memcached DB 数据库 (西海岸是主数据库,数据只有一份,没有replication。后来增加了东海岸机房,作为从数据库。所有的写都走主数据库。) 《Scaling Memcache at Facebook》主要讲的就是中

学习,学习,学习 408

Mcrouter入门指南:Facebook每秒50亿请求的缓存路由神器

Mcrouter是Facebook开发的高性能Memcached协议路由器,专门用于扩展大规模Memcached部署。作为Facebook和Instagram缓存基础设施的核心组件,Mcrouter在峰值时每秒处理近50亿个请求!🚀 这个强大的缓存路由工具可以帮助你构建可扩展、高可用的分布式缓存系统。 ## 什么是Mcrouter?🤔 Mcrouter(发音为"mc router")是一个

gitblog_00954的博客 931

探索MapLibre Native扩展生态:插件与工具全指南

MapLibre Native是一个功能强大的开源矢量地图渲染库,支持iOS、Android等多平台。通过插件生态系统,开发者可以轻松扩展其核心功能,实现自定义地图渲染、数据可视化和交互体验。本文将深入介绍MapLibre Native的插件架构、精选工具以及实用开发资源,帮助你快速掌握扩展地图应用的关键技能。 ## 插件架构:灵活扩展的核心设计 MapLibre Native采用模块化架构,

gitblog_00068的博客 648

ppf-contact-solver持续集成:GitHub Actions的完整配置指南

ppf-contact-solver作为一款先进的物理模拟接触求解器,其强大的GitHub Actions持续集成系统确保了代码质量、自动化测试和可靠部署。本文将为您详细介绍如何配置和使用这套完整的CI/CD流水线,帮助您高效管理物理模拟项目的开发流程。 ## 📊 为什么需要持续集成? 在物理模拟开发中,持续集成至关重要!ppf-contact-solver处理复杂的👚壳、🪵固体和🪢杆

gitblog_00754的博客 429

memcached客户端_使用McRouter创建您的Memcached集群

当您的缓存系统太有限时,您会怎么做?您有垂直和水平两种解决方案,但Memcached仅是一种垂直解决方案.....别担心,Facebook(以及instagram和所有facebook产品使用的McRouter)(已创建并大量使用)在这里可以为您提供帮助。您可以在此处对产品进行出色的介绍,但总而言之,McRouter(发音为Mick-Router)允许您分片和复制您的memcached实例。加起来...

weixin_39813009的博客 301

论文笔记:Scaling Memcache at Facebook

论文笔记:Scaling Memcache at Facebook 论文介绍了Facebook如何使用memcache,以及相关魔改和维护memcache集群。 欢迎访问我的博客 背景 facebook使用一致性哈希来构建memcahce集群。 We provision hundreds of memcached servers in a cluster to reduce load on dat...

weixin_30480583的博客 304

Look-aside Cache 和 Look-through Cache

Look Aside CPU requests memory from cache and main memory simultaneously. If the data is in the cache then it is returned, otherwise the CPU waits for the data from the main memory.

I am not a quitter. 2686

《Scaling Memcache At Facebook》学习笔记

中英文对照:https://www.oschina.net/translate/scaling-memcache-facebook?cmp&# 笔记: 1、综述: 世界上已安装的规模最大的memcached系统,每秒可以处理几十亿的请求,存储数以万亿的数据项。 系统特点: 用户阅读的内容比他们创建的要多一个数量级,这种行为(读写的特点,大量读操作)所产生...

jw598527338的博客 956
上一篇: 定位并优化慢sql
下一篇: Paxos协议
小灰和小白
博客等级 码龄9年 92粉丝 · 67原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值