memcache企业级应用场景 -笔记_第1页
memcache企业级应用场景 -笔记_第2页
memcache企业级应用场景 -笔记_第3页
memcache企业级应用场景 -笔记_第4页
memcache企业级应用场景 -笔记_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、企业级Memcached服务应用实践作者:XXX归档:学习笔记目 录第1章 Memcached介绍11.1 Memcached 介绍11.1.1 Memcached与常见同类软件对比11.2 Memcached的用途与应用场景21.2.1 memcached常见用途工作流程21.2.2 Memcached在企业中的应用场景41.3 搭建memcached服务端51.3.1 libevent(epoll模型,libevent作为事件通知机制)。51.3.2 、memcached51.3.3 启动服务并检查51.3.4 存取数据实践61.4 搭建memcache客户端71.5 memcached内

2、存管理机制81.6 Memcached的检测过期与删除机制111.6.1 Memcached懒惰检测对象过期机制111.6.2 Memcached懒惰删除对象机制12I13第1章 Memcached介绍1.1 Memcached 介绍1.1.1 Memcached与常见同类软件对比1. Memcached是什么?Memcached是一个开源的、支持高性能、高并发的分布式内存缓存系统,由C语言编写,总共2000多行代码。从软件名称上看,前3个字符“Mem”就是内存的意思,而接下来的后面5个字符“cache”就是缓存的意思,最后一个字符d,是daemon的意思,代表是服务器端守护进程模式服务。Me

3、mcached服务分为服务器端和客户端两部分,其中,服务器端软件的名字形如Memcached,客户端软件的名字形如Memcache。Memcached软件诞生于2003年,最初由LiveJournal的Brad Fitzpatrick开发完成。Memcache是整个项目的名称,而Memcached是服务器端的主程序名,因其协议简单,应用部署方便、且支持高并发,因此被互联网企业广泛使用,直到现在仍然如此。其官方网站地址:/。2. Memcached的作用传统场景中,多数Web应用都将数据保存到关系型数据库中(例如:MySQL),Web服务器从中读取数据并在浏

4、览器中显示。但随着数据量的增大、访问的集中,关系型数据库的负担就会出现加重、响应缓慢、导致网站打开延迟等问题,影响用户体验。这时就需要Memcached软件出马了。使用Memcached的主要目的是,通过在自身内存中缓存关系型数据库的查询结果,减少数据库被访问的次数,以提高动态Web应用的速度、提高网站架构的并发能力和可扩展性。Memcached服务的运行原理是通过在事先规划好的系统内存空间中临时缓存数据库中的各类数据,以达到减少前端业务服务对数据库的直接高并发访问,从而提升大规模网站集群中动态服务的并发访问能力。生产场景的Memcached服务一般被用来保存网站中经常被读取的对象或数据,就像

5、我们的客户端浏览器也会把经常访问的网页缓存起来一样,通过内存缓存来存取对象或数据要比磁盘存取快很多,因为磁盘是机械的,因此,在当今的IT企业中,Memcached的应用范围很广泛。1.2 Memcached的用途与应用场景1.2.1 memcached常见用途工作流程Memcached是一种内存缓存软件,在工作中经常用来缓存数据库的查询数据,数据被缓存在事先预分配的Memcached管理的内存中,可以通过API或命令的方式存取内存中缓存的这些数据,Memcached服务内存中缓存的数据就像一张巨大的hash表,每条数据都是以key-value对的形式存在。1.网站读取Memcached数据时工

6、作流程从逻辑上来说,当程序访问后端数据库获取数据时会优先访问Memcached缓存,如果缓存中有数据就直接返回给客户端用户,如果没有合适的数据(没有命中),再去后端的数据库读取数据,读取到需要的数据后,就会把数据返回给客户端,同时还会把读取到的数据缓存到Memcached内存中,这样客户端用户再次请求相同的数据时就会直接读取Memcached缓存的数据了,这就大大地减轻了后端数据库的压力,并提高了整个网站的响应速度,提升了用户体验。下展示了Memcached缓存系统和后端数据库系统的协作流程。在图上中,使用Memcached缓存查询的数据来减少数据库压力的具体工作流程如下:1)Web程序首先检

7、查客户端请求的数据是否在Memcached缓存中存在,如果存在,直接把请求的数据返回给客户端,此时不再请求后端数据库。2)如果请求的数据在Memcached缓存中不存在,则程序会去请求数据库服务,把从数据库中取到的数据返回给客户端,同时把新取到的数据缓存一份到Memcached缓存中。2.网站更新Memcached数据时的工作流程具体流程如下:1)当程序更新或删除数据时,会首先处理后端数据库中的数据。2)在处理后端数据库中数据的同时,也会通知Memcached,告诉它对应的旧数据失效,从而保证Memcached中缓存的数据始终和数据库中一致,这个数据一致性非常重要,也是大型网站分布式缓存集群最

8、头疼的问题所在。3)如果是在高并发读写场合,除了要程序通知Memcached过期的缓存失效外,还可能要通过相关机制,例如在数据库上部署相关程序(如在数据库中设置触发器使用UDFs),实现当数据库有更新时就把数据更新到Memcached服务中,这样一来,客户端在访问新数据时,因预先把更新过的数据库数据复制到Memcached中缓存起来了,所以可以减少第一次查询数据库带来的访问压力,提升Memcached中缓存的命中率,甚至新浪门户还会把持久化存储Redis做成MySQL数据库的从库,实现真正的主从复制。1.2.2 Memcached在企业中的应用场景1. 数据库前端的缓存。 读数据: 开发程序从

9、逻辑上,首先访问(读)memcahced, 如果没有数据在访问mysql。 写数据: 如果写数据,那么再写数据库的同时, 把数据写入到memcached,或者写入到mysql的同时, 由mysql复制到memcached。 Linux运维角色: 搭建memcached服务,提供服务(使用信息问开发) 2.作为集群节点的session会话共享存储即把客户端用户请求多个前端应用服务集群产生的session会话信息,统一存储到一个Memcached缓存中。由于session会话数据是存储在内存中的,所以速度很快。解决共享会话方案1、nginx的调度算法ip_hash(缺点:导致负载不均)2、通过me

10、mcahced做共享会话。3、cookies(放在用户浏览器端)。 优点,可以大并发,缺点:容易篡改,不安全1.3 搭建memcached服务端1.3.1 libevent(epoll模型,libevent作为事件通知机制)。rootdb01 #yum install libevent-devel -yrootdb01 #rpm -qa libevent-devel1.3.2 、memcachedrootdb01 #yum install memcached -yrootdb01 #rpm -qa memcached1.3.3 启动服务并检查rootdb01 # memcached -m 16

11、m -c 2048 -u root -p 11211 -drootdb01 # netstat -lntp|grep memcachetcp 0 0 :11211 :* LISTEN 4026/memcached tcp 0 0 :11211 :* LISTEN 4026/memcached 1.3.4 存取数据实践key->value健值对inode->block访问memcached软件,采用 telnet,nc方式访问memcached软件rootdb01 #yum install telnet nc -yrootdb01 # telnet 127

12、.0.0.1 11211Trying .Connected to .Escape character is ''.set k1 0 0 6 oldboySTOREDget k1VALUE k1 0 6oldboyENDdelete k1DELETEDget k1END以nc方式访问memcached软件rootdb01 # printf "set key008 0 0 10rnoldboy0987rn"|nc 11211STOREDrootdb01 # printf "get key008rn

13、"|nc 11211VALUE key008 0 10oldboy0987ENDrootdb01 # printf "delete key008rn"|nc 11211DELETEDrootdb01 # printf "get key008rn"|nc 11211END服务端:memcached客户端:memcache1.4 搭建memcache客户端环境准备:php所在服务器上安装memcache客户端,程序才能访问到memcached。rootweb02 tar zxf memca

14、che-2.2.5.tgzrootweb02 cd memcache-2.2.5rootweb02 memcache-2.2.5/application/php/bin/phpizerootweb02 memcache-2.2.5./configure -enable-memcache -with-php-config=/application/php/bin/php-configrootweb02 memcache-2.2.5makerootweb02 memcache-2.2.5make installrootweb02 memcache-2.2.5cd ./rootweb02 tools

15、ls -l /application/php-5.5.32/lib/php/extensions/no-debug-non-zts-20121212/rootweb02 php# cat /application/nginx/html/blog/a.php <?phpphpinfo();?>通过页面:/a.php检查mc的配置情况。配置:vim /application/php/lib/php.iniextension_dir = "/application/php-5.5.32/lib/php/extensions/no-debug-

16、non-zts-20121212/"extension = memcache.so重启Phppkill php-fpm/application/php/sbin/php-fpm再次通过页面:/a.php检查mc的配置情况。搜索memcache页面内容,如果有结果,表示成功。开发Php访问memcached代码。<?php $memcache = new Memcache; $memcache->connect('', 11211) or die ("Could not connect Mc se

17、rver"); $memcache->set('key', 'oldboy book'); $get= $memcache->get('key'); echo $get;?>管理memcached web端tar zxvfC memadmin-1.0.12.tar.gz /application/nginx/html/blog/rootweb02 tools# ll /application/nginx/html/blog/memadmin/主要监控命中情况!1.5 memcached内存管理机制Memcached采用

18、了如下的管理机制l 采用slab内存分配机制。l 采用LRU对象清除机制。l 采用hash机制快速检索item。Slab内存管理机制现在的Memcached是利用Slab Allocation机制来分配和管理内存的,过程如下。1)提前将大内存分配大小为1MB的若干个slab,然后针对每个slab再进行小对象填充,这个小对象称为chunk,避免大量重复的初始化和清理,减轻了内存管理器的负担。Slab Allocation内存分配的原理是按照预先规定的大小,将分配给Memcached服务的内存预先分割成特定长度的内存块(chunk),再把尺寸相同的内存块(chunk)分成组(chunks slab

19、 class),这些内存块不会释放,可以重复利用(如图13-5所示)。图13-5Slab和内部的chunk图2)新增数据对象存储时。因Memcached服务器中保存着slab内空闲chunk的列表,它会根据该列表选择chunk,然后将数据缓存于其中。当有数据存入时,Memcached根据接收到的数据大小,选择最适合数据大小的slab(见图13-6)分配一个能存下这个数据的最小内存块(chunk)。例如:有100字节的一个数据,就会被分配存入下面112字节的一个内存块中,这样会有12字节被浪费,这部分空间就不能被使用了,这也是Slab Allocator机制的一个缺点。图13-6存放数据选择ch

20、unk图Slab Allocator还可重复使用已分配的内存,即分配到的内存不释放,而是重复利用。3.Slab Allocation的主要术语主要术语说明见表13-2。表13-2Slab Allocation的主要术语说明4.Slab内存管理机制特点·提前分配大内存Slab 1MB,再进行小对象填充chunk。·避免大量重复的初始化和清理,减轻内存管理器负担。·避免频繁malloc/free内存分配导致的碎片。下面对Mc的内存管理机制进行一个小结。q Mc的早期内存管理机制为malloc(动态内存分配)。q malloc(动态内存分配)产生内存碎片,导致操作系统性

21、能急剧下降。q Slab内存分配机制可以解决内存碎片的问题。q Memcached服务的内存预先分割成特定长度的内存块,称为chunk,用于缓存数据的内存空间或内存块,相当于磁盘的block,只不过磁盘的每一个block都是相等的,而chunk只有在同一个Slab Class内才是相等的。q Slab Class指特定大小(1MB)的包含多个chunk的集合或组,一个Memcached包含多个Slab Class,每个Slab Class包含多个相同大小的chunk。q Slab机制也有缺点,例如,Chunk的空间会有浪费等。1.6 Memcached的检测过期与删除机制1.6.1 Memcached懒惰检测对象过期机制首先要知道,Memcached不会主动检测item对象是否过期,而是在进行get操作时检查item对象是否过期以及是否应该删除!因为不会主动检测item对象是否过期,自然也就不会释放已分配给对象的内存空间了,除非为添加的数据设定过期时间或内存缓存满了,在数据过期后,客户端不能通过key取出它的值,其存储空间将被重新利用。Memcached使用的这种策

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论