OpenStack共享服务组件——缓存系统Memcache

简单说说缓存

当我们使用浏览器访问网站时,经常会用到缓存。
客户端使用浏览器,通过Network连接到服务器上,使用HTTP协议发起请求,所有请求都会先经由一个Web Server来处理。如果客户端请求一个静态资源(*.html或者*.htm),Web Server会将请求直接转给web服务器,然后服务器提取内容发送回客户端浏览器解析;如果客户端请求一个动态资源(比如*.php),Web Server会将请求先交给WEB Container(WEB容器),从这里连接数据库,从数据库提取数据后经过一系列操作拼凑出动态展示内容,再将所有的展示内容转交给web服务器,最后由web服务器将内容发送给客户端浏览器。

对于大型网站来说,它们的数据库每秒承受的访问量都十分巨大,我们可以想像一下,一条十分活跃的数据每秒会承受一万次访问,另一条不活跃数据每秒只有一次访问,那么很显然我们应该让第一条数据的访问效率变得更高,于是就出现了缓存系统。

缓存系统的原理就是将较活跃的数据存储在内存中,这样当再次请求这些数据时就不必去查询数据库,从而提高了活跃数据的访问效率。缓存系统是大型网站的必备功能模块。

Memcached简介

OpenStack也将缓存系统纳入了共享服务组件。Memcached是一个开源的、高性能的分布式对象缓存系统,通过把经常存取的对象或数据缓存在内存里,这些数据以键值对的形式存放在内存上的HASH表里。
Memcached在解决大规模集群数据缓存上具有很大的优势,易于二次开发,并且开放式的API使其十分受开源项目的欢迎,OpenStack就使用了Memcached作为缓存系统

Memcached缓存流程

  • 检察客户端请求的数据是否存在于Memcache中,如果存在就直接将数据返回客户端
  • 如果不存在就向数据库查询,把从数据库查询到的数据返回客户端,同时把数据缓存到Memcache中
  • 每次数据库更新的同时更新更新Memcache中的数据,以保证数据一致性
  • 当分配给Memcache的内存满后,会通过最近最少使用算法,先替换失效数据,然后替换最近未使用数据

Memcached功能特点

  • 协议简单
    使用基于文本行的协议,能直接通过Telnet在Memcached服务器上存取数据
  • 基于Libevent的事件处理
    Libevent是开源社区一款高性能的I/O框架库,它使Memcached可以进行异步事件处理而不必为单个同步事件所阻塞
  • 内置内存管理方式
    Memcached管理内存的方式非常高效,所有数据都保存在Memcached内置内存中,当数据占满空间时,Memcached通过LRU算法自动删除不常用的数据。但是,Memcached不考虑数据容灾,一旦重启所有数据全部丢失
  • 节点互相独立
    各个Memcached服务器之间互不通信,彼此间独立存取数据,不共享任何信息

使用Memcached前应当注意

  • Memcached服务单点故障
    在Memcached集群中每个节点独立存取数据,节点之间没有数据同步机制。如果一个Memcached节点出现故障,那么这个节点缓存的所有数据都会丢失,但是不必担心,因为真正的数据仍保存在数据库中,重启节点之后只要再次访问该数据就会再次从数据库缓存到Memcached服务器。
  • 存储空间限制
    Memcached缓存系统的数据存储在内存里,必然会受到内存大小的影响。32位系统可缓存的数据最大为2G,64位系统缓存的数据大小没有限制,只要物理内存足够。
  • 存储单元限制
    Memcached缓存系统以键值对为单元进行数据存储,key最大为250个字节,value最大为1MB,超过则无法存储。
  • 数据碎片。
    Memcached缓存系统的内存存储单元按照Chunk分配,value的数据不可能全部正好等于Chunk的大小,因此必然会出现内存碎片浪费空间。
  • 利旧算法的局限性
    Memcached缓存系统的LRU算法,并不针对全局空间的存储数据,而是针对Slab,Slab是Memcached中多个Chunk的集合。
  • 数据访问安全性
    Memcached缓存系统本身没有安全机制,通过非加密的Telnet即可对Memcached服务器端的数据进行操作,因此在面向internet的系统架构中,Memcached服务器通常位于用户的安全区域。

Memcached部署

安装memcached
	yum -y install memcached python-memcached
修改配置文件
	cat > /etc/sysconfig/memcached <<EOF
	PORT="11211"
	USER="memcached"
	MAXCONN="1024"
	CACHESIZE="64"
	OPTIONS="-l 127.0.0.1,::1,controller1"
	EOF
启动memcached
	systemctl enable memcached
	systemctl restart memcached
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值