nginx + memcached session 同步

标签: nginx memcached session | 发表时间:2014-11-17 15:23 | 作者:annan211
出处:http://www.iteye.com

squid 缓存疑问 问题归纳:
1 squid 缓存的数据,何时过期,如何判断缓存的数据已经过期,如何把最新的数据缓入squid 并且替换掉旧的内容
2 如何判断数据是否应该被缓存
3 校验失败时,是否给出缓存中旧的内容

上面的几个问题  都可以通过 squid中的 refresh_pattern 配置项 找到答案。
答案简单归纳如下
1 何时过期 要根据配置选项
  squid 配置项 refresh_pattern [-i] regex min percent max [options]
  这个配置项中 min 和 max 是针对请求停留在cache中的时间设置的,
  min 参数是分钟数量,它是过时响应的最低时间限制。
如果某个响应驻留在cache里的时间没有超过这个最低限制,
那么它不会过期。同样max 参数是存活响应的最高时间限制。
如果某个响应驻留在cache里的时间高于这个最高限制,那么它必须被刷新

min max 并不是精确控制参数,如果需要精确控制 可以使用 percent
percent 会计算得出一个时间 以首页index.html为例,假设 有效期为 7分钟,
在 3:00缓入squid, 如果在这段有效期内,有改变则把最新的index.html返还给squid ,
而squid 收到会更新缓存,然后把新的index.html 返还给客户端,
同时根据新页面中的Last_Modified 和取页面的时间,重新计算resource age,同样也重新计算存活时间
如果没有改变的话 7分钟过后,首页过期,如果这段时间没有index.html的请求,
index.html会一直缓存中,如果有index.html 请求,squid收到请求后,
由于已经过期,squid 会像源服务器发一个index.html是否有改变的请求,
如果源服务器收到请求后,如果index.html没有更新,squid就不用缓存,
直接会把缓存中的内容给客户端;同时,重置对象进入cache的时间为源服务器确认的时间。

2 一个object的header部分被squid得到之后,是要判断一下,这个object在过期校验层面上,
是否适合被缓存。如果不适合(要校验一个object主要有2种手段,If-Modified-Since和If-None-Match,
一个需要Last-Modified头,一个需要ETag头。这两个头如果都没有的话,object也是不能缓存的。),
将直接不缓存这个object。
如果 过期时间 大于 配置文件中的minimum_expiry_time这个配置项 则会缓存,否则不会缓存。

3 检查当回源校验失败时,是否能将已经过期的object给出去。如果一次回源校验,
原站给出了一个5xx的话,squid为了能让客户端继续拿到内容,可能会将磁盘上的旧内容发给客户端,
但要有一定的条件,即检查object是否已经“严重过期”。
 

squid 配置文件中有 refresh_pattern 配置项

refresh_pattern最主要的作用,过期校验
Squid的过期校验是访问驱动的,如果一个object过期了,却又一直没人访问,
那么squid会一直把这个object扔在那里,而不会主动地回源校验它。
只有当客户端访问到了这个object的时候,squid才会校验。


先介绍一下refresh_pattern的配置方法:
refresh_pattern [-i] regex min percent max [options]
-i表示正则匹配时不区分大小写  - i 选项是忽略大小写,
regex是与url进行匹配的正则表达式
min,percent,max 是3个数字,min, max的单位是分钟,percent就是百分比。
min 参数是分钟数量,它是过时响应的最低时间限制。
如果某个响应驻留在cache里的时间没有超过这个最低限制,
那么它不会过期。同样max 参数是存活响应的最高时间限制。
如果某个响应驻留在cache里的时间高于这个最高限制,那么它必须被刷新
options是refresh_pattern的其他选项,包括以下几种
override-expire
override-lastmod
reload-into-ims
ignore-reload
ignore-no-cache
ignore-private
ignore-auth
stale-while-revalidate=NN
ignore-stale-while-revalidate
max-stale=NN
negative-ttl=NN


refresh_pattern  算法解析如下

squid的refresh_pattern 算法的简单描述
       1   如果响应年龄超过refresh_pattern 的max值,该响应过期;
       2  如果LM-factor 少于refresh_pattern 的percent的值。该响应存活
       3  如果响应年龄少于refresh_pattern 的min值,该响应存活
       4  其他情况,响应过期

Refresh_pattern  percent 计算方法
      Resource age=对象进入cache的时间 – 对象的last_modified
      Response age= 当前时间 – 对象进入cache的时间
      LM-factor   =(response age)/(resource age )


Date一般是Squid从后面取页面的时间,Last-Modified 一般是页面生成时间。
(当前时间定义为CURRENT_DATE)
1) If ((CURRENT_DATE-DATE(就是LM里定义的时间)) < min),cache是新鲜的
2) else if ((CURRENT_DATE-DATE) < (min + (max-min)*percent),cache是新鲜的
3) else cache是过期的

如果希望页面一进入cache就不删除,直到被主动purge掉为止,可以加上ignore-reload选项
该项常用在mp3,wma,wmv,gif 之类
一般情况可以使用 reload-into-ims。
举例:
refresh_pattern -i \.gif$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.jpg$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.png$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.mp3$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.wmv$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.rm$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.swf$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.mpeg$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.wma$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.css$ 10 50% 60 reload-into-ims
refresh_pattern -i \.js$ 10 50% 60 reload-into-ims
refresh_pattern -i \.xml$ 10 50% 30 reload-into-ims

举个例子解析 refresh_pattern 的配置项
refresh_pattern 20%
    假如源服务器上www.aaa.com/index.html - --lastmodified 是2007-04-10 02:00:00
         Squid 上的proxy.aaa.com/index.html  index.html存入cache的时间2007-04-10 03:00:00
   1  如果当前时间 2007-04-10 03:00:00
      Resource age =3点 – 2点 =60分钟
      Response age =0 分钟
      Index.html 还可以在cache 中停留的时间(resource age)*20%= 12 分钟,换句话说,
   index.html 进入cache后,可以停留十二分钟,才被重新载入
    2  如果当前时间是 2007-04-10 03:05:00
      Resource age =3点 – 2点 =60 分钟
      Response age=5 分钟
      Index.html 还可以在cache中停留的时间
     ( resource age)*20%=12 分钟-5=7分钟
      LM-factor=5/60 =8.3% <20%
    3  所有说2007-04-10 03:12:00 LM-factor=12/60=20% 之后,
        cache中的页面index.html 终于stale,如果这段时间没有index.html的请求,
index.html会一直缓存中,如果有index.html 请求,squid收到请求后,
由于已经过期,squid 会像源服务器发一个index.html是否有改变的请求,
如果源服务器收到请求后,如果index.html没有更新,squid就不用缓存,
直接会把缓存中的内容给客户端;同时,重置对象进入cache的时间为源服务器确认的时间。
比如2007-04-10 03:13:00 ,如果正好在这个后重新确认了页面。重置后,resource age 变长,
相应在cache中的cache中存活的时间也同样变长
   如果有改变则把最新的index.html返还给squid ,而squid 收到会更新缓存,
然后把新的index.html 返还给客户端,同时根据新页面中的Last_Modified 和取页面的时间,
重新计算resource age,同样也重新计算存活时间
    实际上,一个对象进入cache后,同样他的存活时间就确定了,即(resource age)* percent ,
直到被重新确认













已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [nginx memcached session] 推荐:

nginx + memcached session 同步

- - 企业架构 - ITeye博客
squid 缓存疑问 问题归纳:. 1 squid 缓存的数据,何时过期,如何判断缓存的数据已经过期,如何把最新的数据缓入squid 并且替换掉旧的内容. 2 如何判断数据是否应该被缓存. 3 校验失败时,是否给出缓存中旧的内容. 上面的几个问题  都可以通过 squid中的 refresh_pattern 配置项 找到答案.

Nginx+Tomcat+Memcached共享session集群配置

- ENOCH - ITeye论坛最新讨论
2、memcached共享session. 3、tomcat集群配置(3台CentOS 6). (172.18.188.64): 操作系统CentOS 6; 安装nginx、memcached和tomcat 6. (172.18.188.76): 操作系统CentOS 6; 安装tomcat 6. (172.18.188.78): 操作系统CentOS 6; 安装tomcat 6.

nginx+tomcat+memcached (msm)实现 session同步复制

- - 企业架构 - ITeye博客
tomcat + memcached + nginx 实现session共享.     这里重点强调如何实现linux服务器上 服务器session共享,软件安装不再赘述. 首先我们需要对 cookie 和session的工作机制非常了解,如果不了解其中的原理,就算配置成功,也毫无意义. 换了工作换了环境,重新配置起来.

nginx+tomcat+redis完成session共享

- - 企业架构 - ITeye博客
本文记录nginx+redis+tomcat实现session共享的过程. nginx安装: http://blog.csdn.net/grhlove123/article/details/47834673. redis安装: http://blog.csdn.net/grhlove123/article/details/47783471.

使用 Nginx 的 keepalive patch,nginx+memcached的TPS提升7倍

- 2sin18 - Linux@SOHU
编者按:本月初 Maxim Dounin,Nginx 最活跃的开发者之一,提交了 upstream keepalive patch,支持 http/fastcgi/memcached,除了减少和 upstream 的网络开销外,也意味着能反向代理 http chunked 响应了. 搜狐技术部CMS组的同学进行了一个简单的测试:.

Apache+Tomcat+Memcached共享Session的构架设计

- - CSDN博客架构设计推荐文章
一、       方案目标. 实现互动留言系统、后台发布系统的高可用性,有效解决高并发量对单台应用服务器的冲击,确保应用服务器单点故障不影响系统正常运行. 二、       部署架构. 采取Tomcat集群的部署方式,Apache通过proxy_module代理方式对用户的请求进行负载均衡,转发至tomcat集群中的某一实例进行处理,tomcat集群之间通过Memcached高性能缓存集群共享持久Session.

电子商务网站基础架构 nginx + memcached + tomcat + squid 集群

- - 企业架构 - ITeye博客
本文中 包含 nginx memcached tomcat 集群 的安装和配置. wget url 为下载所需的资源文件方式,也可以通过 VMware Tools 工具载入,. 如何安装 VMwareTools 参考本博客或者其他资料. 后面最后一章节是安装配置squid 在项目第一期不作要求. 第一章 安装配置nginx.

centos下搭建nginx+tomcat实现集群负载与session复制

- - CSDN博客系统运维推荐文章
系统均选用最小化安装的centos 5.7. 客户端通过访问nginx做的负载均衡层去访问后端的web运行层(tomcat),如下图:. 另外,关于session复制原理,简单来说如下图:. 负载层:192.168.254.200. 安装:pcre、nginx、nginx-upstream-jvm-route-0.1.

memcached+magent实现memcached集群

- - 编程语言 - ITeye博客
首先说明下memcached存在如下问题.   本身没有内置分布式功能,无法实现使用多台Memcache服务器来存储不同的数据,最大程度的使用相同的资源;无法同步数据,容易造成单点故障. (memagent代理实现集群).       在 Memcached中可以保存的item数据量是没有限制的,只要内存足够.

MemCached详解

- - CSDN博客推荐文章
首先,我们来了解一下MemCached与MemCache之间的区别:. Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统. 用于加速动态web应用程序,减轻数据库负载. 它可以应对任意多个连接,使用非阻塞的网络IO. 由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这 些HashTable.