灯+ Memcached高性能缓存服务

  

Memcached简介

  

Memcached是高性能的分布式内存缓存服务器,通过在内存里维护一个统一的巨大的哈希表,它能够用来存储各种格式的数据,包括图像,视频,文件以及数据库检索的结果等,由国外社区网站LiveJournal上的开发团队开发。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态网络应用的速度,提高可扩展性。
<强>官方网站:http://www.danga.com/memcached/

  
常用典型架构如下:
  

灯+ Memcached高性能缓存服务

  
  

当网络客户端发送请求到Web服务器的应用程序时,应用程序会通过调用Memcached API客户端程序库接口去连接Memcached服务器,进而查询数据。
1,如果此时网络客户端所请求的数据已经在Memcached服务端中缓存,则Memcached服务端会将数据返回给Web客户端;
2,如果数据不存在,则会将网络客户端请求发送至MySQL数据库,由数据库将请求的数据返回给Memcached以及网络客户端,与此同时Memcached服务器也会将数据进行保存,方便用户下次使用。

     

Memcached特点

  
      <李>协议简单李   <李>基于libevent的事件处理李   <李>内置内存存储方式李   <李> memcached不互相通信的分布式
    <强> libevent: http://www.monkey.org/provos libevent/   
  
协议简单
  
  

memcached的服务器客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议,因此,通过telnet也能在memcached上保存数据,取得数据。下面是例子。

尝试telnet localhost 11211美元127.0.0.1……
连接到localhost。localdomain (127.0.0.1)。
转义字符“^]”。
设置foo 0 0 3(保存命令)
栏(数据)
存储(结果)
得到foo(取得命令)
0 3 foo(数据)

     
基于libevent的事件处理h5>   

libevent是个程序库,它将Linux的epoll, BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。

     
内置内存存储方式
  
  

为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached,重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(最近最少使用)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

     

<强>数据存储方式:板配置
灯+ Memcached高性能缓存服务

  
  

板分配即按组分配内存,每次先分配一个板,相当于一个大小为1 mb的页,然后在1 mb的空间里根据数据划分大小相同的块,该方法可以有效解决内存碎片问题,但可能会对空间有所浪费。

     
memcached不互相通信的分布式
  
  

memcached尽管是“分布式“缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。

     

Memcached缓存机制和分布式

  

<强>缓存机制:
灯+ Memcached高性能缓存服务

  
  

Memcached是一款非常出色的缓存软件,当程序写入缓存数据请求时,Memcached的API接口将关键输入路
由算法模块路由到集群中一台服务器,之后由API接口与服务器进行通信,完成一次分布式缓存写入。

     

<>强分布式
灯+ Memcached高性能缓存服务

  
  

Memcached分布式部署主要依赖于Memcached的客户端来实现,多个Memcached服务器是独立的。分布式数据如何存储是由路由算法所决定的。当数据到达客户端程序库时,客户端的算法就依据路由算法来决定保存的Memcached服务器。读取数据时,客户端依据保存数据时的路由算法选中和存储数据时相同的服务器来读取数据。

     

实验环境

  

本实验用2台CentOS7:

灯+ Memcached高性能缓存服务