进阶配置
varnish进阶配置
用户 -
req.*(用户发过来的请求方法)\-> varnish代理 -bereq.*(发往后端主机的 http 请求首部的值)\-> 后端服务
后端服务 -beresp.*\-> varnish代理 -resp.*\-> 用户实例1,对公开的图片取消cookie,并设定缓存时间
修改varnish配置文件
重载varnish
客户端访问
实例2,缓存对象的修剪:purge, ban,删除某缓存项
简单版,仅实现功能
修改varnish配置文件
重载varnish
测试访问curl使用自定义方法PURGE
加强版—-注意:这样任何人都可以删除缓存,建议做访问控制
varnish配置文件添加访问控制并做if判断
重载varnish
客户端测试访问
注意:修剪和访问不是同一项,会有不同的结果,可以查看下varnish默认配置规则
修改varnish配置文件,若多个虚拟主机应用IP/域名是同一台
重载varnish
测试访问
如果要修剪多个项,可以使用ban
交互式终端
测试访问
动静分离
用户请求 –> 后端服务 –> 由后端服务调度 –> 静态转发给B,动态给A
在启动一个容器做为静态服务
修改varnish配置文件
重新装载varnish
测试验证
实例,使用不同的调度算法
将无状态和有状态调度分开,采用不同的调度算法
修改配置文件
补充
补充:directors.round\_robin () 用这个方法初始化组对象表示往后端调度的算法是轮询,即没有权重;要想有权重,需要用 directors.random () 方法;如果需要做会话保持,需要用到 directors.hash () 方法;
重载varnish
客户端验证
实例,健康检测
健康检查比如10次有8次成功,这样更靠谱
修改配置文件
重载varnish
验证
关闭后端服务在验证
sick使用
将某台主什么打上标志下线,迭代版本完成之后,更新标志重新上线
varnish简单优化
varnish是单进程模型的,内部靠线程来维持与客户端连接,而最大连接并发数多少个是靠线程池的数量和每一个线程池的所能承载连接的数量来定义,varnish内部这些参数称运行时参数,可动态修改立即生效
thread\_pool\_min
每个池中的最小工作线程数。增加此值可能有助于在低负载情况下或线程过期时加快速度。最少 10 个线程,最大 5000
最大空间线程数,简单来说就是服务启动启动多少个线程,便于承载更多的连接请求
thread\_pools
工作线程池的数量。建议根据物理或逻辑核心数据来决定,还要考虑其他进程是否占用某个核心,可对应用进行CPU绑定,减少线程在CPU核心来回切换,减少时延
增加工作池的数量会减少锁争用。太多的池会浪费 CPU 和 RAM 资源,每个 CPU 超过一个池可能对性能不利 可以在 fTy 上增加。但减少需要重新启动才能生效
使用varnishadm设置
可以将参数写入配置文件,注意格式 -p 参数=值
varnish日志
varnish日志存放在内存中,大概90M的空间
varnish日志有两种记录方式,varnishlog和varnishncsa,日志分别存放在/var/log/varnish/{varnish.log,varnishncsa.log}
可以执行varnishlog或varnisncsa命令,日志信息在终端上显示,注意此模式只有被访问,才能显示日志相关信息
varnishncsa和nginx访问日志类似
varnish统计相关数据工具
varnishtop 工具读取共享内存的日志,然后连续不断的显示和更新大部分普通日志
varnishstat 有很多计数器,我们计数丢失率,命中率,存储信息,创建线程,删除对象等,几乎所有的操作
varnishhist 取 varnishd 的共享内存段日志,生成一个连续更新的柱状图,显示最后 N 个请求的处理情况。这个 N 的值是终端的纵坐标的高度,横坐标代表的是对数,如果缓存命中就标记 “|”,如果缓存没有命中就标记上 “#” 符号
小结
前端状态机 vcl\_recv,vcl\_hash,vcl\_pass,vcl\_pipe,cvl\_deliver,vck\_synth
后端状态机 vcl\_backend\_fetch,val\_backend\_error,vcl\_backend\_reponse
vcl\_init,vcl\_fini,在任何连接处理之前
varnish:http代理,page cache缓存
reids: 存储系统
squid httpd一般是正向代理 varnish一般是反向代理
缓存分两种,代理层,旁路模式下(客户端自身知道如何驱动缓存)
php解释器 –> php功能驱动模块,其实就是mysql客户端 –> mysql
对象式编程
程序=算法+数据结构
程序=指令+数据
以数据为中心,事先打算完成功能抽象独立的实体或类别,真正的代码运行将这类别实例化具体可操作的数据结构,让数据结构与数据结构之间通过对方结构所支持的方式完成调用
过程式编程
数据结构服务于算法,数据服务指令,关注事物演变过程
设计算法,设定指令流程
目前互联网分布式通信当中,大部分交互式语言都是http,数据存取最后一层可能用的是特殊存储设备的协议,但除此之外,正常应用组件之前的交互都是http语言
http已经发展到传输协议,而不是应用协议
静态内容分开存放,大致分三类
1、图片、CSS、JS
2、HTML5代码
3、业务代码
后端存储内容,比如mysql
PC、移动端、APP
达到一定的架构模式,无论向上,还是向外,都会达到瓶颈,后期扩容性能不会像之前那么明显
比如,一开始一台2000并发数,10台就是2W,机器多了会有损耗,性能下降0.1,继续扩容会递减
应用程序内部分层,分层也依然解决不了问题
软件架构模式
分层架构:表现层、业务层、持久层、数据层
事件驱动架构:分布式异步、调度解耦
微内核架构:即插件式架构
微服务架构:API REST-based,application REST-based,中心化消息
基于空间的架构:云架构
系统达到一定的程度后,基本都需要做服务化,每一个独立功能组件都会做一个个服务化通过API向外暴露,让别人调用请求,而这种调用请求其实就是系统组件内部通讯
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 438803792@qq.com
Loading...
keepalived