阎丽欣
摘要:本文对Memcached在Web缓存中的应用进行研究。首先,介绍了缓存技术及缓存替换策略;然后,在此基础上说明Memcached分布式缓存及其特点和工作原理;最后,阐述了基于Memcached的缓存系统。
[关键词]MemcachedWeb缓存分布式缓存系统
当前互联网络的主要访问方式是Web应用方式,随着网络资源用户访问量的增加,Web服务器的响应速度会变得越来越慢,因此难以满足大量用户的需求。缓存技术可以解决大量用户并发访问Web服务时存在的问题,设计优良的缓存机制能够有效降低数据的重复传输,提高用户体验。
1缓存技术
一般认为应用程序的访问具备局部性的特点:时间局部性指的是当前被访问的内存单元的数据在短期内还有可能被再次访问,空间局部性指的是被访问的内存单元周围的数据也极有可能被访问。基于这样的考虑,为了加快程序的范围速度,可以增加一个缓存进行数据的预读,存储可能会被频繁请求的数据。
在用户访问Web站点时,从输入网址并回车到查询的页面展现出来经历了如下过程:输入网址后的地址解析。为了方便记忆,网址一般是点分字母形式,在用户回车后浏览器会进行地址解析,即把域名网址转换为IP地址。这一过程会用到浏览器缓存、系统缓存、路由器缓存以及DNS缓存。浏览器缓存指的是浏览器的缓存目录,如果其中有域名对应的映射关系则会直接调用;系统缓存指的是本机操作系统的缓存;如果浏览器及本机系统缓存中都没有域名的映射关系,则从网络层查找路由器中的域名系统缓存;如果此时域名解析还是失败,则需要从域名服务器DNS中解析。
缓存的容量不是无限的,在容量不够的时候需要剔除部分旧的缓存对象,以存储新的缓存对象。缓存替换策略指的是剔除旧缓存对象时的规则,常用的缓存替换策略有先进先出法(FIFO)、最近最少使用法(LRU)以及最少使用频繁法(LFU)。
2Memcached及分布式缓存
作为一个高效的分布式缓存系统,Memcached会在内存中維护一°个大容量Hash表,以便缓存图片、文件、视频等各种格式的数据。下次再请求同样的数据时就可以直接从缓存中获取,避免对数据库、磁盘等低效率数据的重复访问及存取,而且可以避免数据的重复传输,从而提高响应速度。Memcached的原理如图1所示。
通常情况下Memcached多用于流量较大的网站,把Memcached作为大的数据缓冲区,保存前端用户经常访问的数据。Memcached是分布式缓存系统的主程序,以守护进程的形式存在,可以随时接收客户端的连接及其他操作,以便访问共享内存中的数据。
Memcached分布式缓存技术的特点包括:(1)简单的协议。Memcached是基于文本的,因此只要能够远程登录到Memcached服务器,即可进行数据的存取。
(2)高性能的事件处理。综合了Linux系统的epoll、BSD操作系统的kqueue等事件处理机制,性能更高效。
(3)使用最近最少使用(LRU)缓存替换算法,在缓存空间不足时,先剔除最近最少使用的数据,符合缓存设计的初衷。
(4)分布式缓存。不同的Memcached服务器间是分布式的,独立完成各自工作的基础上不会影响彼此。
在Memcached启动后,服务器会为其分配内存以便缓存数据;Memcachced不间断的监听配置的服务端口,一旦有外部请求就会解析请求命令,并把请求的数据传输给对应的功能模块。如果请求命令是缓存设置命令,则会检查缓存空间,如果缓存空间不够则替换不常用的缓存;如果请求命令是获取命令,则需要借助哈希算法计算获取资源的存放位置。
Memcached自身是没有分布式功能的,但其高效的存储、各种API非常容易实现分布式的负载均衡、数据一致性以及多副本管理等分布式特性。Memcached的基本数据结构是Item和Slab,结构成员包括Chunk大小、Chunk数目、可用的Item(Slab)数、最后可用Item(Slab)的起始地址等;这些结构的成员为Memcached分配最小的内存单元,不仅可以用于存放缓存数据,还可以保存缓存数据的引用计数、访问信息、下一个副本的地址等;另外,这些信息在哈希表中也有相应记录,所以可以快速定位存储位置。
启动Memcached程序后,分配的所有内存会被划分给多个Slab,它们的大小彼此不同,目的是使操作系统可以更有效的利用内存资源,减少内存碎片。接下来,会选择运行时的协议,是文本类型的协议还是二进制的协议。协议选择完毕后会启动多线程完成初始化工作,并循环等待。每次有新请求到达,Memcached就进行协议判断,并从中提取相应的命令,发送给对应的命令模块处理。
3基于Memcached的缓存系统
使用Memcached实现缓存系统时,需要建立一个缓存管理节点以及缓存维护节点。缓存管理节点中保存整个Memcached集群的元数据信息;缓存维护节点用于在出现问题时修复Memcached缓存系统。
在存储元数据时,需要对缓存数据的关键字key值进行排序,然后用B+树结构的形式建立索引,B+树的叶子节点存放数据信息。在进行查询操作时,使用关键字一层层地便利B+树,最终查找到数据的存放位置。在进行插入操作时,先找到插入位置,然后把原位置后的数据后移如果后移挪出的存储空间不够,并且预留的缓存空间也存满,那么需要申请新空间。删除操作和插入操作正好相反。
缓存系统中的元数据会保留多个副本,副本有master及slave之分,master完成数据的写操作,并同步给slave,这种副本间的数据同步是通过异步方式实现的。虽然不是实时同步,但也可以在保证系统性能的前提下保证数据的一致性。副本间的同步有两种方式:
(1)全量同步。slave节点把master节点的全部数据都复制过来。全量同步一般只有在新的slave节点加入缓存系统时,才会给新的slave同步全量数据。
(2)增量同步。slave不主动获取全量数
据,而是只有在数据出现变化时才只同步变化的数据。
对于整个缓存系统来说,当用户数量不断增加时请求的数据也会越来越多,给缓存系统带来的压力也越来越大,此时可以采用数据读写分离的方式解决。当请求发送到管理节点后,管理节点会根据请求操作类型进行重定向:写操作被重定向给master节点,读操作被重定向给slave节点。
4总结
Web目前已经成为用户接触互联网络的首选,在访问用户急剧增加时,Web服务器的响应速度会越来越慢。为了提高Web服务的响应能力,缓存机制应运而生。Memcached是开源的分布式缓存产品,可以有效提高web服务的响应速度。
参考文献
[1]顾荣庆,杨开杰,徐汀荣.分布式数据缓存技术研究[J].计算机应用与软件,2017,14(05):135-137.
[2]D. Karger, E. Lehman, T. Leighton,et al. Consistent Hashing and RandomTrees: Distributed Caching Protocolsfor Relieving Hot Spots on theWorld Wide Web[C]. Twenty-Ninth ACMSymposium on Theory of Computing.ACM, 2017: 654-663.
[3]陈丽冰,基于J2EE的Web应用系统的性能优化方法研究[J].计算机科学,2015(08):13-16.
[4]邓世权。基于Memcached的高速缓存功能扩展研究[D].成都:西南交通大学,2012.