Ticket #122 (closed 优化: fixed)

Opened 14 years ago

Last modified 13 years ago

为报价库增加页面缓存层

Reported by: linhao Owned by:
Priority: major Milestone: 2012报价库5.0
Component: 报价库 Version: 报价库5.0
Keywords: nginx squid Cc:
Due Date: 07/09/2012

Description

针对报价库近来resin负载比较多的情况,先去观察了一下resin前端squid的命中率,大概只有10-30%,这样严重影响到后面resin的性能。
原因主要在架构上。
当前的架构是: nginx(POST) -- nginx(静态页面及分派) --squid --resin
问题在于,终端页等静态页面,实质是非完全的静态,里面存在很多SSI(豆腐块)的请求,于是1个静态页面的请求衍生为10个以上的动态请求,而且URL组合极多,导致squid层无法满足缓存对象的需要,最后也就压到resin头上。
所以,本次就增加了3台大容量的服务器做页面缓存。
架构变更为: nginx(POST)[URI hash] --squid(页面缓存) -- nginx(静态页面及分派) --squid --resin
减少到第二层的nginx的请求量,直观上看,减少每减少一个到静态页面nginx的请求就减少了10个到后端resin的请求,优化的程度会更高。

说说改造期间nginx的问题。
为了优化缓存层容量,需要在第一层的nginx使用URI hash进行分派。
问题在于,URI hash 的模块是用第三方模块 upstream_hash ,这个模块很久都没做代码更新,虽然能编译进nginx,但会在运行1小时之后,nginx的进程就会占用100%cpu,导致负载很高,并且访问响应会变得很慢。
尝试过使用nginx 1.2.3 和 0.8.48 结果也是一样。
于是尝试使用第二个hash模块:consistent_hash
按介绍,是使用的是一致性的hash算法,对于后端是缓存的架构,会有更优的作用。
替换掉upstream_hash ,重新编译 nginx 1.0.10
经过1天的测试,负载跟以前没做URI hash的情况接近,访问也正常。

Change History

comment:1 Changed 13 years ago by chenchongqi

  • Status changed from new to closed
  • Resolution set to fixed
Note: See TracTickets for help on using tickets.