当前位置:文档之家› 利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统

利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统

利用key Tok 常快秒,

有M

存储个M 性质

Mem

务器用Tokyo Ty y-value 持久kyo Cabine 快,哈希模是 Berke Tokyo Tyr Memcached Tokyo Ty 储系统,对Memcached,质一样。

相比Memc 1、故障转mcachedb 目

器可读写、yrant 构建久存储系统et 是日本人式写入100eley DB 等rant 是由兼容协议,yrant 加上对任何原有M ,但是,它的cachedb 而转移:Toky 目前支持类似

辅助服务器建兼容Memca 统

人 平林幹雄0万条数据等 DBM 的几同一作者开也可以通上 Tokyo Ca Memcached 的数据是可而言,Tokyo yo Tyrant 支似MySQL 主

器只读”模ached 协议雄 开发的一只需0.643几倍。

开发的 Toky 通过HTTP 协abinet,构客户端来讲可以持久存储o Tyrant 具支持双机互主辅库同步

模式。

议、支持故障一款 DBM 数3秒,读取yo Cabinet 协议进行数据构成了一款支讲,可以将储的。这一点具有以下优互为主辅模式

的方式实现障转移、高数据库,该100万条数t 数据库网据交换。

支持高并发将Tokyo Tyr 点,跟新浪势:

式,主辅库

现读写分离,高并发的分布该数据库读写数据只需0.网络接口。它发的分布式持rant 看成是浪的Memcach 库均可读写,

,支持“主布式写非773

它拥持久是一hedb ,而

主服

Tok 是根务器add 中1

引用htt If ser

htt Fai ser or M

fai tri

是数理, 这里使用kyo Tyrant 根据“crc3器的,PHP、dserver 具台宕机了引用 mem 用

p://www.d a host goe rvers that p://cn.ph lover may rvers are a Memcached lover. No gger a fa 2、日志文

数据库文件

很容易将用 $memcac 服务器,是32(key) % c C 和 pyt 具有故障转移,那么 cu mcached 官https://www.doczj.com/doc/d514967925.html,/es down, t are avai https://www.doczj.com/doc/d514967925.html,/man occur at available t server le rmal clie ailover.

文件体积小件的1.3倍,

将磁盘写满。che->addSe 是因为当 M current_se hon 的客户移机制,当urrent_ser 官方网站和/memcached the API re lable. nual/zh/fu any stage the reques evel error nt errors :Tokyo Ty 而Memcac

erver 而不Memcache 客erver_num”户端都是如addserver rver_num 会PHP 手册中d/

e-maps tha unction.Me e in any o st the user rs (except such as a yrant 用于chedb

的同

不是 $memca 客户端使用”哈希算法如此的算法。r 了2台 M 会由原先的中的两段话at dead ho emcache-ad of the met r won't not t out-of-m adding an 于主辅同步的

同步日志文件ache->conn 用 addServe 法将 key 哈Memcache Memcached 的2变成1。话:

st's reque ddServer.p hods, as l tice. Any k memory) may existing 的日志文件件非常大,nect 去连接er 服务器池哈希到不同的e 客户端的服务器,而

ests onto php

long as ot kind of soc y trigger key will 件比较小,大如果不定期接 池时,的服的 而其the ther cket the not

大约期清

3、超大数数

据量下表表

现出色:

但是,Tokyo Tyrant 也有缺点:在32位操作系统下,作为 Tokyo Tyrant 后端存储的 Tokyo Cabinet 数据库单个文件不能超过2G,而64位操作系统则不受这一限制。所以,如果使用 Tokyo Tyrant,推荐在64位CPU、操作系统上安装运行。

一、安装

1、首先编译安装tokyocabinet数据库

wget https://www.doczj.com/doc/d514967925.html,/tokyocabinet/tokyocabinet-1.4.45.tar.gz

tar zxvf tokyocabinet-1.4.45.tar.gz

cd tokyocabinet-1.4.45/

./configure

#注:在32位Linux操作系统上编译Tokyo cabinet,请使用./configure

--enable-off64代替./configure,可以使数据库文件突破2GB的限制。

#./configure --enable-off64

make

make install

cd ../

2、然后编译安装tokyotyrant

wget https://www.doczj.com/doc/d514967925.html,/tokyotyrant/tokyotyrant-1.1.40.tar.gz

tar zxvf tokyotyrant-1.1.40.tar.gz

cd tokyotyrant-1.1.40/

./configure

make

make install

cd ../

二、配置

1、创建tokyotyrant数据文件存放目录

mkdir -p /ttserver/

2、启动tokyotyrant的主进程(ttserver)

(1)、单机模式

ulimit -SHn 51200

ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid

/ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts

/ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000

(2)、双机互为主辅模式

服务器192.168.1.91:

ulimit -SHn 51200

ttserver -host 192.168.1.91 -port 11211 -thnum 8 -dmn -pid

/ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 91 -mhost 192.168.1.92 -mport 11211 -rts

/ttserver/ttserver.rts

/ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000

服务器192.168.1.92:

ulimit -SHn 51200

ttserver -host 192.168.1.92 -port 11211 -thnum 8 -dmn -pid

/ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 92 -mhost 192.168.1.91 -mport 11211 -rts

/ttserver/ttserver.rts

/ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000

(3)、参数说明

ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [dbname]

-host name : 指定需要绑定的服务器域名或IP地址。默认绑定这台服务器上的所有IP地址。

-port num : 指定需要绑定的端口号。默认端口号为1978

-thnum num : 指定线程数。默认为8个线程。

-tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。

-dmn : 以守护进程方式运行。

-pid path : 输出进程ID到指定文件(这里指定文件名)。

-log path : 输出日志信息到指定文件(这里指定文件名)。

-ld : 在日志文件中还记录DEBUG调试信息。

-le : 在日志文件中仅记录错误信息。

-ulog path : 指定同步日志文件存放路径(这里指定目录名)。

-ulim num : 指定每个同步日志文件的大小(例如128m)。

-uas : 使用异步IO记录更新日志(使用此项会减少磁盘IO消耗,但是数据会先放在内存中,不会立即写入磁盘,如果重启服务器或ttserver进程被kill 掉,将导致部分数据丢失。一般情况下不建议使用)。

-sid num : 指定服务器ID号(当使用主辅模式时,每台ttserver需要不同的ID号)

-mhost name : 指定主辅同步模式下,主服务器的域名或IP地址。

-mport num : 指定主辅同步模式下,主服务器的端口号。

-rts path : 指定用来存放同步时间戳的文件名。

如果使用的是哈希数据库,可以指定参数“#bnum=xxx”来提高性能。它可以指定bucket存储桶的数量。例如指定“#bnum=1000000”,就可以将最新最热的100万条记录缓存在内存中:

ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid

/ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts

/ttserver/database.tch#bnum=1000000

如果大量的客户端访问ttserver,请确保文件描述符够用。许多服务器的默认文件描述符为1024,可以在启动ttserver前使用ulimit命令提高这项值。例如:

ulimit -SHn 51200

3、停止tokyotyrant(ttserver)

ps -ef | grep ttserver

找到ttserver的进程号并kill,例如:

kill -TERM 2159

三、调用

1、任何Memcached客户端均可直接调用tokyotyrant。

2、还可以通过HTTP方式调用,下面以Linux的curl命令为例,介绍如何操作tokyotyrant:

(1)、写数据,将数据“value”写入到“key”中:

curl -X PUT http://127.0.0.1:11211/key -d "value"

(2)、读数据,读取“key”中数据:

curl http://127.0.0.1:11211/key

(3)、删数据,删除“key”:

curl -X DELETE http://127.0.0.1:11211/key

附:文章修改历史

● [2008年08月07日] [Version 1.0] 撰写本文

● [2008年10月16日] [Version 1.1] Tokyo Cabinet 版本升级到 1.3.12;Tokyo Tyrant 版本升级到 1.1.5

● [2008年12月04日] [Version 1.2] Tokyo Cabinet 版本升级到 1.3.22;Tokyo Tyrant 版本升级到 1.1.8

● [2008年07月06日] [Version 1.3] Tokyo Cabinet 版本升级到 1.4.28;Tokyo Tyrant 版本升级到 1.1.29

● [2010年06月11日] [Version 1.4] Tokyo Cabinet 版本升级到 1.4.45;Tokyo Tyrant 版本升级到 1.1.40;默认示例改为B+Tree数据库;增加32位Linux操作系统上编译Tokyo cabinet的configue配置。

Memcached源码剖析笔记

Memcached 源码剖析笔记 Xguru Memcached是一个自由、源码开放、高性能、分布式 内存对象缓存系统,目的在于通过减轻数据库负载来使 动态Web应用程序提速。

目录 1.背景 (3) 2.memcached的安装 (4) 3.memcached的配置 (5) 4.memcached的使用 (6) 4.1.存储命令 (7) 4.2.读取命令 (8) 4.3.删除命令 (8) 4.4.高级命令 (9) 4.5.其他命令 (10) 5.Memcached内部工作机制 (11) 5.1.Memcached基本的数据结构 (11) 5.2.基本设计概念和处理流程 (12) 5.3.内部Hash机制 (15) 5.3.1.Hash函数及冲突解决 (15) 5.3.2.HashTable主要函数 (15) 5.4.slab内存处理机制 (17) 5.4.1.slab主要函数 (17) 5.4.2.slab机制中所采用的LRU算法 (19) 5.5.控制item各种函数 (20) 5.6.守护进程机制 (22) 5.7.Socket处理机制 (23) 1

5.7.1.Unix域协议 (23) 5.7.2.TCP/UDP协议 (24) 5.8.多线程处理机制 (25) 5.9.事件处理机制 (25) 6.未完善之处 (27) 7.参考文献 (28) 2

1.背景 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。 Memcached是一个自由、源码开放、高性能、分布式内存对象缓存系统,目的在于通过减轻数据库负载来使动态Web应用程序提速。 Memcached是一个在内存中对任意的数据(比如字符串,对象等)所使用的key-value 存储。数据可以来自数据库调用,API调用,或者页面渲染的结果。 Memcached设计理念就是小而强大,它简单的设计促进了快速部署、易于开发,并解决面对大规模的数据缓存的许多难题。所开放的API能用于大部分流行的程序语言 3

中华石杉顶尖互联网Java架构师就业班

目录 第一阶段、Spring Boot从入门到精通(10小时) (1) 第二阶段、小型电商网站开发+设计模式+架构设计+项目管理(20小时) (2) 第三阶段、Spring Cloud从入门到精通(20小时) (3) 第四阶段、电商网站的微服务架构(20小时) (3) 第五阶段、高并发大型电商网站架构(150小时) (4) 第六阶段、高可用大型电商网站架构(30小时) (6) 第七阶段、高性能大型电商架构(30小时) (7) 第八阶段、亿级流量的大型电商系统架构(150小时) (7) 第九阶段、自己动手做多租户SaaS云ERP系统 (8) 第十阶段、底层技术+微服务中间件(50小时) (9) 第十一阶段、自己动手写仿Storm的实时计算中间件 (10) 第十二阶段、开源框架源码阅读+定制化开发mvc/ioc/orm框架(50小时) (10) 第十三阶段、自己动手写工作流框架 (10) 授课方式说明 (10) 学习进度说明 (11) 就业指导说明 (12) 学习成果说明 (12) 2万费用说明 (13) 讲师课程质量以及是否会跑路 (14) 第一阶段、Spring Boot从入门到精通(10小时) 目前市面上所有的视频课程以及书籍,都只是简单介绍Spring Boot的基础知识,没有任何一套资料深入讲解这两个技术的。而如果你自己跟着官网慢慢看,全英文官网,估计大部分同学都很难看的懂,或者学习速度非常慢。 我会将Spring Boot的所有核心技术点以及高阶技术点,全部嚼烂咬碎,深度提炼,用最精炼的语言,给大家讲透,让大家在最短的时间内彻底掌握这个未来绝对主流的开发框架,为未来的高阶的项目打好扎实的基础。 强调一下,这块技术讲解,绝对不会采取拖延时间,以及碎碎念的方式,一点一点细节慢慢

边界网关协议BGP文档分析

《网络协议栈分析与设计》大作业 边界网关协议(BGP)RFC分析与设计Border Gateway Protocol 学生:吕卿网络1101班 201192334 2013/12/16

1.背景介绍 边界网关协议是用来连接网络上不同自治系统(AS)的路由选择协议。BGP是为了取代最初的外部网关协议EGP所设计的,也被认为是路径矢量协议。它通过维护IP路由表和前缀表来实现自治系统(AS)间的可达性。BGP的主要功能是和其他BGP系统交换网络可达性信息。必须要注意的是BGP是建立在可靠连接的基础之上的。 2.操作总结 在两个系统建立的连接中他们互相交互信息更改数据。初始数据流是整个BGP路由表。BGP不要求整个BGP路由表的周期性更新。保持存活信息定期的被发送以确保连接的存活。通知信息被发送来回馈错误通知和特殊情况。执行边际路由协议的主机不必是路由器。一个非路由器的主机可以和路由器经由EGP甚至内部路由协议进行交互。如果一个特殊的自治系统(AS)有多个BGP发言者,那么一定要注意在一个AS内要的几个发言者要有一致的路由视野。 3.信息格式 信息在可靠传输协议连接上发送。信息只有在被完全接收之后才能够被处理。最大的信息大小是4096字节。所有的实现必须支持这一最大信息规格。最小的数据规格要包含BGP头部不含数据部分。 3.1数据头格式 每个信息有个固定大小的头部。包括标识物·长度·类型。标识物:这16字节大小的领域包含信息接收方可以对信息进行确认的信息。长度:这2字节无符号整数表明这则信息的总长度。长度的值必须在19到4096之间类型:这一字节无符号整数表明这则信息的代码模式。共有四种类型: 1 - OPEN 2 - UPDATE 3 - NOTIFICATION 4 - KEEPALIVE

解析豆瓣的基础架构

豆瓣整个基础架构可以粗略的分为在线和离线两大块。在线的部分和大部分网站类似:前面用,用Nginx做反向代理,形成负载均衡的一层;应用层主要是做运算,将运算结果返回给前面的DAE平台是这两年建起来的,现在大部分豆瓣的应用基本都跑在DAE上面了;应用后面的基

以DPark能够大幅提升性能。另外,因为DPark的编写使用了函数式语言的特点,所以可以写的非常简洁: 到目前(2014年3月),DPark的集群规模和处理数据量已经比去年多了一倍左右,一天要处 理60~100T B左右的数据。 团队 当前,我所负责的豆瓣平台部一共包括四个部分:核心系统,这块也是由我直接带领的,共6名工程师;DAE,现在是彭宇负责,共4名工程师;DBA两人;SA两人。 平台部负责的项目大多是跟业务无关的东西,贴近应用层的主要在产品线团队做,这个分工跟豆瓣工程团队的发展历史有关。早期豆瓣工程师还不多的时候,就已经分为两种倾向,一种是偏业务的,就是去做用户能看得见的东西;另一种是支持性的,运行在业务层下面、不被用户所感知的东西。下面这一层就衍变成了平台部门。 在豆瓣,不管是做产品还是做平台的工程师,技术实力都比较强,一个项目应该从哪个部门发起,并不是看这个任务的难度,而是看它是公共的还是业务特有的。有些项目即使未来可能会成为公共的,但一开始只是一个产品线需要,那么它也会从产品线发起。比如豆瓣的短信服务,最开始是产品线有需求,所以这些服务都是由他们发起完成的,平台这边主要负责提供建设服务的架构,比如DoubanService,告诉他们一个服务怎样去写、怎样去部署、怎样去对用户开放。短信服务后来成为很多产品线都在使用的服务,同时这个系统本身也越来越成熟,那么它逐渐就被转移到SA团队来进行维护。

完整社交APP需求分析原型设计整体架构前端后端架构

一个社交App需实现的功能 用户关注的常规社交功能、活动、地理位置、探索功能、新鲜事、视频照片分享等等,需要提供的功能不胜枚举,所以从技术角度来说,开发者需要解决的问题也是异常复杂的。 当一款社交App发布之初,用户访问量比较小,使用一台服务器就能够支撑全部的访问压力和数据存储需求,但是互联网应用具有病毒式的传播特点。一款App很可能会面临一夜爆红的现象,访问量和数据量在短时间内呈现爆发式增长,这时候会面临的局面是每天上亿PV、数百万新增用户和活跃用户、流量飙升至每秒数百兆。这些对于一个只部署了简单后端架构的应用来讲是无法支撑的,会直接导致服务器响应缓慢甚至超时,以及在高峰期时服务呈现瘫痪状态,使得后端的服务完全无法使用,用户体验急剧下降。本文将会通过一个真实的案例来分享一个社交应用如何构建一个具备高伸缩性的后端系统。 社交App最初部署的后端架构解析 社交App在最初的时候,后端架构相对比较简单,最初是部署在基础网络之上。最前面放置一台绑定了公网IP的nginx服务器作负载均衡,后面放置3台应用服务器来负责处理所有业务上的请求,最后面搭建一台MySQL Database数据库。 构建私有网络 随着产品的不断迭代、用户数的持续增长、数据量的积累,App就需要改进自己的后端架构,即开始构建私有网络。用户可以使用私有网络构建自己的网络拓扑——创建路由器和私有网络,将后续加入的用于运行内部服务的主机放置在私用网络中,可以有效地和云平台其他用户主机,在网络上实现100%二层隔离。主机对外开放的仅仅只有80端口,这样系统安全性上多了一层保障。

在上面的架构图中,最前面的是防火墙,后面接负载均衡器,然后接路由器和私有网络,很多互联网应用都存在读多写少的情况,这个比例有时可以达到8:2,所以我们首先通过引入缓存分摊数据库读压力。其次,引入负载均衡器,替换最初架构中的nginx proxy,负责均衡器在这里其主要用于分发请求到后端多台应用服务器,,当其中一台应用服务器挂掉,负载均衡器可以进行自动隔离。 业务分区与扩展 App随着并发访问量和数据量不断增大,首先想到横向扩容Web服务。水平扩容业务服务器的前提是要保证每台服务器都是无状态的,将session信息下放到缓存或数据库中存储,保证请求被负载到任何一台服务器可以正常处理。

PHP大型网站的架构实例分析

PHP大型网站的架构实例分析 Poppen.de是德国的一个社交网站,相对Facebook、Flickr来说是一个很小的网站,但它有一个很好的架构,融合了很多技术,如 Nigix、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5以及Tsung. 统计信息 200万注册用户数; 2万并发用户数; 每天20万条私有消息; 每天25万登录次数; 项目团队有11个开发人员,两个设计,两个系统管理员; 商业模式 该网站采用免费增值模式,用户可以免费使用下面任何服务: 搜索其他用户; 给好友发送消息; 上载图片和视频; 寻找好友; 视频聊天; 更多… 但如果用户想享受不受限制发送消息和上载图片,那么就得根据需要支付不同类型的会员服务,视频聊天及网站其他服务也采用同样的策略。 工具箱 Nginx Poppen.de 所有的服务都是基于Nginx服务上的。前端有两台Nginx服务器在高峰期提供每分钟15万次请求的负载,每个机器已经有四年寿命,并且只有一个CPU和3GB RAM.Poppen.de拥有三台独立的图像服务器,由三台Nginx服务器为*.bilder.poppen.de提供每分钟8万次请求服务。

Nginx架构中一个很酷的设计就是有很多请求是由Memcached处理的,因此请求从缓存中获取内容而不需要直接访问PHP机器。比如,用户信息页(user profile)是网站需要密集处理的内容,如果把用户信息页全部缓存到Memcached 上,那么请求直接从Memcached上获取内容。Poppen.de的Memcached每分钟可以处理8000次请求。 架构中有三个Nginx图像服务器提供本地图像缓存,用户上载图像到一个中央文件服务器。当向这三个Nginx之一中请求图像时,如果服务器本地中没有存在该图像,则从中央文件服务器下载到该服务器上作缓存并提供服务。这种负载均衡的分布式图像服务器架构设计可以减轻主要存储设备的负载。 PHP-FPM 该网站运行在PHP-FPM上。共有28台双CPU、6GB内存的PHP机器,每个机器上运行100个PHP-FPM的工作线程。使用启用了APC的PHP5.3.x. PHP5.3可以降低CPU和内存使用率的30%以上。 程序代码是基于Symfony1.2框架之上开发的。一是可以使用外部资源,二是能够提高项目开发进度,同时在一个著名的框架上可以让新开发人员更容易加入到团队中来。虽然没有任何事情都是十全十美的,但可以从Symfony框架中得到很多好处,让团队可以更多的精力放在Poppen.de的业务开发上去。 网站性能优化使用XHProf,这是Facebook开源出来的一个类库。这个框架非常容易个性化和配置,能够可以缓存大部分高代价的服务器计算。 MySQL MySQL是网站主要的RDBMS.网站又几个MySql服务器:一台4CPU、32GB的服务器存储用户相关信息,如基本信息、照片描述信息等。这台机器已经使用了4年,下一步计划会使用共享集群来替换它。目前仍基于这个系统上进行设计,以简化数据访问代码。根据用户ID进行数据分区,因为网站中大部分信息都是以用户为中心的,如照片、视频、消息等。 有三台服务器按主-从-从配置架构提供用户论坛服务。一台从服务器负责网站自定义消息存储,到现在有2.5亿条消息。另外四台机器为主-从配置关系。 另外由4台机器配置成NDB族群专门服务于密集型写操作数据,如用户访问统计信息。 数据表设计尽量避免关联操作,尽可能缓存最多的数据。当然,数据库的结构化规范已经完全被破坏掉了。因此,为了更容易搜索,数据库设计创建了数据挖掘表。 大部分表是MyISAM型表,可以提供快速查找。现在的问题是越来越多的表已经全表锁住了。Poppen.de正考虑往XtraDB存储引擎上迁移。

memcached代码分析详解

memcached分析详解

目录 1.文档目的 (1) 1.1.前言 (1) 2.memcached是什么 (2) 2.1. memcached的特征 (2) 3.memcached适合的场合 (4) 4.memcached的代码分析 (5) 4.1. main流程 (5) 4.2. memcached服务流程(TCP) (6) 4.3. memcached状态转换和通信协议处理 (7) 4.4. memcached核心数据结构 (7) 4.5. Slab Allocation机制:整理内存以便重复使用 (8) 5.memcached的使用优化 (10) 5.1. 命中率 (10) 5.2. 空间利用率 (11) 5.3. 加速比 (12) 5.4. 安全性能 (12) 6.memcached的测试分析 (13) 6.1. 读写memcache指令测试 (13) 6.2. 服务端系统负载 (13) 6.3. 空间分配,命中率 (14) 7.memcached的中间层客户端编写 (16) 8.libevent简介 (17) 9.memcached应用 (18) 10.结束语 (20)

1. 文档目的 1.1. 前言 文档就是简单的把memcached做一个代码走读和分析,起到一个抛砖引玉的作用; 目的就是让大家在使用memcached这个工具时,多一些对工具的了解,从而确定你的程序是否真的需要用memcached来实现不可; 短短2个小时也讲不了多少,主要是做一个学习探讨,如果大家感兴趣的话后期可以再做培训 牛人真多啊,向先行者致敬!

2. memcached是什么 memcached广泛应用在大负载高并发的网站上,是一种非常成熟的产品(称为一项技术也未尝不可)。像facebook,youtube,yahoo,sina,sohu,netease,豆瓣等网站均或多或少使用了该项产品。memcached在以用户为中心的网站上,表现尤其突出,例如sns,blog等web2.0应用的站点。这些站点一般来讲,特别注重用户体验,用户对服务器的响应速度要求很高,用户数据相对比较复杂、关连度比较高,需要经常对数据库进行更新和检索。 许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。 这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。 2.1. memcached的特征 1)memcached的服务器客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议。因此,通过telnet 也能在memcached上保存数据、取得数据。下面是例子。 $ telnet localhost 8119 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. set foo 0 0 3 (保存命令) bar (数据)

memcached完全剖析(1-5)整理

memcached全面剖析 作者:长野雅广(Masahiro Nagano) 作者:前坂徹(Toru Maesaka) 翻译:charlee 整理:yaykey 发表时间:2008/07/02‐2008/07/30 翻译时间:2008/07/10‐2008/07/31 整理时间:2010/11/09

原文链接: http://gihyo.jp/dev/feature/01/memcached/0001 http://gihyo.jp/dev/feature/01/memcached/0002 http://gihyo.jp/dev/feature/01/memcached/0003 http://gihyo.jp/dev/feature/01/memcached/0004 http://gihyo.jp/dev/feature/01/memcached/0005 译文地址: ?第1次:https://www.doczj.com/doc/d514967925.html,/2008/07/10/memcached‐001/ ?第2次:https://www.doczj.com/doc/d514967925.html,/2008/07/11/memcached‐002/ ?第3次:https://www.doczj.com/doc/d514967925.html,/2008/07/16/memcached‐003/ ?第4次:https://www.doczj.com/doc/d514967925.html,/2008/07/24/memcached‐004/ ?第5次:https://www.doczj.com/doc/d514967925.html,/2008/07/31/memcached‐005/ 2 / 81

目录 1. memcached完全剖析–1. memcached的基础 (5) 1.1. memcached是什么? (7) 1.2. memcached的特征 (9) 1.2.1. 协议简单 (9) 1.2.2. 基于libevent的事件处理 (9) 1.2.3. 内置内存存储方式 (10) 1.2.4. memcached不互相通信的分布式 (10) 1.3. 安装memcached (11) 1.3.1. memcached的安装 (11) 1.3.2. memcached的启动 (12) 1.4. 用客户端连接 (13) 1.5. 使用Cache::Memcached (15) 1.5.1. 使用Cache::Memcached连接memcached (16) 1.5.2. 保存数据 (17) 1.5.3. 获取数据 (17) 1.5.4. 删除数据 (17) 1.5.5. 增一和减一操作 (18) 1.6. 总结 (19) 2. memcached全面剖析–2.理解memcached的内存存储 (21) 2.1. Slab Allocation机制:整理内存以便重复使用 (23) 2.1.1. Slab Allocation的主要术语 (24) 2.1.1.1. Page (24) 2.1.1.2. Chunk (24) 2.1.1.3. Slab Class (24) 2.2. 在Slab中缓存记录的原理 (25) 2.3. Slab Allocator的缺点 (27) 2.4. 使用Growth Factor进行调优 (29) 2.5. 查看memcached的内部状态 (31) 2.6. 查看slabs的使用状况 (33) 2.7. 内存存储的总结 (35) 3. memcached全面剖析–3.memcached的删除机制和发展方向 (37) 3.1. memcached在数据删除方面有效利用资源 (39) 3.1.1. 数据不会真正从memcached中消失 (39) 3.1.2. Lazy Expiration (39) 3.2. LRU:从缓存中有效删除数据的原理 (41) 3.3. memcached的最新发展方向 (43) 3.3.1. 关于二进制协议 (43) 3.3.2. 二进制协议的格式 (43) 3.3.3. HEADER中引人注目的地方 (45) 3.4. 外部引擎支持 (47) 3 / 81

相关主题
文本预览
相关文档 最新文档