接口响应数据不断变化 ( 5 分钟之内 )的排查分析,根源在于 Varnish 的部署问题

1、参考网址:https://www.shuijingwanwq.com/2021/11/10/5453/ 。列表中的单个数据项,将其在后台关闭后,本来应该一直消失的。但是,在几分钟内的时间,却是一会儿出现,一会儿消失。大约等待 5 分钟之后,才终于永久消失掉。

2、在 k8s 的 Rancher 中搜索:Varnish,发现 容器 数量有 3 个。如图1

图1

3、点击进入,确定是有 3 个容器在 Running 中。如图2

图2

4、查看环境变量,APP_CHECKINTERVAL=10s 。如图3

图3

5、Varnish 是一款高性能的开源HTTP加速器,可以有效降低web服务器的负载,提升访问速度。根据官方的说法,Varnish 是一个 cache 型的 HTTP反向代理。当把 Varnish 部署上之后,web请求的处理过程会有一些变化。客户端的请求将首先被 Varnish 接受。Varnish 将分析接收的请求,并将其转发到后端的web服务器上。后端的web服务器对请求进行常规的处理,并将依次将处理结果返回给 Varnish。Varnish 的核心功能是将后端web服务器返回的结果缓存起来,如果发现后续有相同的请求,Varnish 将不会将这个请求转发到web服务器,而是返回缓存中的结果。这将有效的降低web服务器的负载,提升响应速度,并且每秒可以响应更多的请求。Varnish 速度很快的另一个主要原因是其缓存全部都是放在内存里的,这比放在磁盘上要快的多。处理缓存的顺序:接受到请求 –- 分析请求 ( 分析你的URL,分析你的首部 ) — hash计算 — 查找缓存 — 新鲜度检测 — 访问源 — 缓存 – 建立响应报文 – 响应并记录日志。

6、在 Varnish 使用中如果单个url的请求通过 HA/F5 ( 负载均衡 ) 每次请求不同的 varnish 服务器中,被请求 varnish 服务器都会被穿透到后端,而且同样的请求会在多台服务器上缓存,也会造成 Varnish 的缓存的资源浪费,也会造成性能下降。并且由于每台 varnish 服务器中的缓存有所差异,才最终导致了列表接口的响应数据不断变化的情况。因为每一次请求的 varnish 服务器 不是同一台。因此,现阶段如果要缓存列表接口,就需要配置为单机部署,因为列表中本应该消失的数据如果存在,点击进入详情页面会提示:活动不存在。如果是集群部署,建议仅支持详情接口等。

 

永夜