如何集成varnish到已有的网站架构

news/2024/5/9 10:31:39/文章来源:https://blog.csdn.net/weixin_34082177/article/details/90542193

如何集成varnish到已有的网站架构

在我们现有的架构中通常是已经成熟稳定的架构,如何将高性能的缓存服务器部署在已有的环境上呢,同时部署容易,如何始终让用户看到的是最新的内容,即便是缓存命中的状态?

因此,我们直接解决上面两个问题!

如何将高性能的缓存服务器部署在已有的环境上呢?

通过实际使用情况,将varnish部署上线通常有两种拓扑图:

1、user---->web--->varnish--->application_server
这种情况更适合网站已经使用了cdn的情况,varnish主要充当缓存网页页面的功能。

or

2、user---->varnish--->web--->application_server
这种情况适合通常性的小网站,并没有富裕的资金,或者说为了充分的节约开支,毕竟如果效果理想,这部分的资源完全可以作为程序员薪水的部分(wan quan bu ke neng!)

对于如何安装varnish,请参考官方文档或者之前的blog。两种方式无外乎在于如何调度网站流量,以及配置源server而已。

如何始终让用户看到的是最新的内容,即便是缓存命中的状态?

有了上面的两种结构,我们来说如何更新缓存的问题,这也是基本所有问题的所在。

举个实际例子,通常作为一个cms站点,都会有访问域名(www)和管理域名(console),这里我们简称前台(客服妹子)和后台(diaosi chengxuyuan),并且使用上面的第二种架构。 那么我们的架构就是这样的:

image

前台用户通过internet访问您的网站,首先经过varnish的处理,如果cache中hit,ok,返给用户,访问结束,如果miss,进行和之前没有使用varnish的访问流程。(注:此处只画出必要的部分。当然像redis缓存等其他组件这些东西包含在上面的架构也是没有任何问题的。)

后台编辑用户,通过后台发布更新,操作数据,并且更新到数据库中。

现在问题来了(wa jue ji shu na jia qiang?!):

在没有使用缓存时,用户每次都通过应用服务器获取到最新的内容。后台修改也是直接更新到数据库。对比使用缓存后,实际某篇文章被缓存后,并且在有效期内,用户的请求是不会到达web服务器,更别说应用服务器。这就是说即便你的编辑在后台更新了十万次该文章,如果文章仍然在缓存期内,前台用户是不会有任何变化。

解决这个问题通常有两种方式:

1、对缓存对象设置一个较小的缓存失效时间。(被动更新)
2、通过varnish的接口对已经缓存的对象进行操作。(主动更新)

可以衡量二者的优劣,

被动更新简单维护量小会存在用户得到非最新资源的情况;
主动更新效果显著维护量较被动更新更大,不过向笔者这种大神级别高端玩家(da gao wan)来说,被动更新显然是不能忍受的额。

实际例子

实际上我们通过后台管理系统可以向varnish发送更新某资源的请求即可,如下图:

image

具体到配置:我们的前后台web服务器均使用openresty,具体就不多介绍了,引用一句话"春哥是我见过开源精神最强的人"

首先对于我们需要修改的文章都是有对应的文章id,在后台编辑更新都会发起post请求,或者get请求。通过后台openresty在收到更新文章请求时,发送一个同步的非阻塞的子请求到前台varnish,并在varnish中配置用于接收该请求,执行varnish的ban操作。

我们来看配置文件。

后台的openresty:

server {listen 80;server_name console.example.com;location ~ /articles/(\d+)/[change_status|edit] {error_log   logs/error.log debug;proxy_set_header X-Real-IP $http_x_forwarded_for;proxy_set_header X-Forwarded-For $http_x_forwarded_for;proxy_set_header Host $host;set $article_id $1;rewrite_by_lua 'ngx.location.capture("/console.example.com/foo/"..ngx.var.article_id, { args = { cmd = "update" } })';proxy_pass http://127.0.0.1:9090;}

当然这只是最核心能说明问题的代码,不了解的可以查阅ngx.location.capture ,通过在该location中加入rewritebylua,具体它和proxy_pass的执行顺序是rewrite在前。笔者在实际测试中发现,nginx的第三方模块echo也提供发起了子请求的功能,但实际始终在proxy_pass之后,并不能实现需要的功能。

前台的varnish,同样取核心部分:

    sub vcl_recv {if (req.method == "GET" && client.ip ~ "192.168.11.11" && req.url ~ "/console.example.com/foo/\d+"  ) {set req.http.purge-url = regsub(req.url,"/console.example.com/foo/(\d+).*","\1.html");ban("req.url ~ " + req.http.purge-url);set req.backend_hint = default;return(pass);}
}

这里主语clint.ip当然你可以设置为一个集群,这个参考官方文档。

acl ban {"localhost";"192.168.11.168";
}

这样后端更新时会通知varnish更新相关的资源,主动更新功能实现。 由于设置了return(pass),在前端的web中最好配置一段location来匹配该请求,可以简单的return 200即可。

前端web:

server{...location = /console.example.com/foo/\d+ {return 200;}
}

对于有需要更新图片等静态资源的情况。可以编写一个通用的ban或者purge接口。具体可参考官方文章。

后续

配置文件基于varnish4,建议需要上生成环境的,多阅读官方文档。当然也可以瞅瞅我的部分博客,总之,多测试!!word is cheap ,show me your code。

文章转载自 开源中国社区[https://www.oschina.net]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_820680.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

activemq 各种版本区别_响应式网站和PC+手机端网站有什么区别?

企业建站普遍会遇到这样一个选择难题:网站选择什么类型?常见的类型分为3种:PC端,PC手机端,响应式。PC端大家都知道,主要的选择难点是后两种有什区别。今天小编就帮大家来分析一下响应式网站和PC手机端网站的…

阿根廷最大社交网站Taringa遭遇大规模数据泄漏,超过2800万用户数据暴露

本文讲的是阿根廷最大社交网站Taringa遭遇大规模数据泄漏,超过2800万用户数据暴露,如果你有Taringa(也被称为“拉丁美洲的Reddit”)网站账号,那么请注意,你的账户详细信息可能已经在大规模数据泄漏事件中泄…

实现网站验证码切换功能

实现网站验证码切换功能 一、样例 样例1、 样例2、 二、实现原理 三、实现代码 com.fry.servlet.VerifyCodeServlet 1 package com.fry.servlet;2 3 import javax.imageio.ImageIO;4 import javax.servlet.ServletException;5 import javax.servlet.annotation.WebServlet;6 im…

从零开始编写自己的C#框架(25)——网站部署

导航 1、关掉访问保护 2、发布网站 3、复制网站到服务器 4、添加新网站 5、设置网站访问权限 6、设置文件夹访问权限 7、控制可更新文件夹执行权限 8、设置“应用程序池”.net版本与模式 9、附加数据库 10、添加数据库访问用户 11、设置数据库链接 12、部署注意事项 对于网站的…

linux系统怎么重启网络连接wifi密码,怎么查看linux连接wifi的密码?_网站服务器运行维护,linux,wifi...

如何使用外部硬盘安装linux系统?_网站服务器运行维护使用外部硬盘安装linux系统的方法:首先将格式化的U盘和固态硬盘连接到电脑上并按F9;然后从菜单选择U盘启动并按enter;接着按linux minit程序安装系统并选择中文;最后…

织梦网站调用变量失败_浙江栢塑科技解析织梦被挂马被黑解决流程

织梦被黑恶意挂马并不奇怪,本身织梦程序案例漏洞过多,如不做好安全更新或备份,造成数据丢失并影响排名。 一个SEOVIP同学遇到织梦的问题,接下来把处理的流程记录下来,帮助大家解决问题。 1,分析网站源码&am…

3格式是什么意思_推荐一个万能格式转换网站

老Y在以前的文章中推荐过一个专注格式转换的网站→推荐一个万能的在线格式转换网站,功能非常的强大。也推荐过一个PC端的转换神器→办公利器(PDF工具|格式转换|图片编辑|文字识别|图片处理…)今天老Y再推荐一个国内的功能同样强大的格式转换网…

一些常用的网站——Mark

2019独角兽企业重金招聘Python工程师标准>>> CDN加速: 又拍云:http://www.bootcdn.cn/ 百度:http://cdn.code.baidu.com/ 新浪:http://lib.sinaapp.com/ 七牛云存储:https://www.staticfile.org/ 转载于:ht…

网站备案那些事----云里雾里知多少?

前言:备案流程几大步 文章目录: 1、购买域名 1.1、国内外几个域名提供商推荐 1.2、域名购买时需要提交的信息 1.3、域名购买后需要提交哪些材料 2、确定网站文件存储空间是购买还是自备 2.1、网站文件存储空间购买的话该如何备案 2.2、网站文件存储空间为…

linux网站5秒盾,宝塔面板建站后接入CF自动开启5秒盾证码脚本

有大神分享了CF自动开启5秒盾 验证码脚本,原理就是通过检测系统负载(cpu或load)自动开启cloudflare UAM和challenge质询(验证码)!!这里分享下宝塔面板下如何用起来,使用的前提是你的域名需要接入cloudflare。1、简介项目&#xf…

网站部署到linux 在进行压测,在Linux CentOS上搭建Jmeter压测环境

本文的主要内容是介绍如何在Linux CentOS 服务器上面搭建Jmeter的压测环境整个详细的流程,来满足我们日常工作中对于压力测试环境搭建、压力测试执行过程的需求。一、首先我们要准备四个东西,在搭建环境的时候需要使用到1、Xshell、puTTy等终端连接工具(…

几个可以免费下载知网文档,和查重的网站

前一段时间小七分享过几个免费下载知网,万方等一下写论文下载文献的方法,当时有小伙伴在后台询问有没有论文免费查重的方法,其实小七手里面有几个可以免费查看论文权重的软件,但是小七却没有分享,因为这些软件都是个人…

两个免费的文献翻译网站,支持多种专业翻译,多种语言!

小七,小七,有没有文档翻译软件,免费不花钱的那种 简单,安排 搜狗翻译:https://fanyi.sogou.com/ 搜狗翻译,不用注册账号,直接上传文档翻译即可。支持文字,图片,10兆以…

永进课堂-三个网站

相遇是缘!❤️❤️永进舫❤️❤️ ❤️❤️❤️青龙中学❤️❤️ ❤️❤️❤️❤️永进课堂❤️❤️

查看兼容性情况的网站

2019独角兽企业重金招聘Python工程师标准>>> http://caniuse.com/ 转载于:https://my.oschina.net/daladida/blog/1547789

python视频网站项目_Python开发视频哪个好

3、程序的可移植性:你编写的代码可以放到几个平台上去运行,比如windows,linux,unix。 4、很多标准库和第三方库:等你了解python标准库的时候,你就会觉的它的标准库太多了,而且功能和强大,从字符处理到网络处…

一次网站性能排查实录

接到一个求助电话,说是有个阿里云上的服务器,有性能瓶颈,但又没有什么具体的数据,只是说偶尔客户端有少数连接不上,或者连接会突然中断。我的天,最怕这种状况了,还得自己去找问题表现是什么&…

如何生成kml文件_帝国CMS如何自动生成sitemap.xml网站地图文件

登录网站的后台http://你的域名/e/admin/进入后台栏目 》增加自定义页面 》选择直接页面&#xff0c;页面名称为&#xff1a;网站地图&#xff0c;文件名修改为 ../../sitemap.xml<?xml version"1.0" encoding"UTF-8"?>?>[!--news.url--]daily…

《梦公园》网站策划设计

呈现奢华视觉体验&#xff0c;《梦公园》网站策划设计 公元2005年底 北京VNOISE 为 梦公园 开始筹划网站&#xff0c;打造符合梦公园公司独特气质的网络形象策划和网站设计。 项目地址&#xff1a;http://www.dreamgarden.com.cn北京VNoise视觉互动公司&#xff1a;http://www.…

基于Python-Flask实现的网站例子

概述 使用Flask写的体育网站 包括&#xff08;注册 论坛 文章评论 组建战队 后台管理&#xff09;等功能 示例地址文中有写 萌新 请多指教详细 代码下载&#xff1a;http://www.demodashi.com/demo/12380.html 项目示例地址: 网站演示 一、环境搭建 1. 安装配置python3.6 示例网…