a13698822086 发表于 2018-12-25 07:43:51

memcached+varnish

  memcached
  缓存服务器:
  1.缓存:cache,无持久存储功能
  2.行挂失缓存bypass,而不是代理式缓存
  3.仅提供缓存功能,存什么,怎么存全有客户端决定
  4.k/v cache,只能存储可序列化数据
  5.存储项是非常简单的:key,value,flag,expire time(过期时间)单数上限:1M
  6.功能的实现一把依赖于memcached,一半是client
  7.不能高可用,挂了缓存就丢失了
  8.O(1)的执行效率
  9.分布式缓存互不通信的分布式集群
  分布式系统请求路由方法:取膜法,一致性哈希算法
  10.缓存耗尽时基于LRU(最近最少使用)清理
  缓存过期项:惰性清理机制,新的直接覆盖旧的
  memcached协议
  客户端要拥有连接memcached的适配器php-memcached
  

  yum安装就好
  

  配置文件/etc/sysconfig/memcached
  默认监听11211/tcp,11211/udp
  

  主程序 /usr/bin/memcached
  
  

  协议格式:
  文本格式
  二进制格式
  

  telnet文本交互:
  

  常用命令
  
  统计类:stats items | slabs |sizes
  

  存储类:set,add,replace,append,perpend
  

  获取数据类:get,delete,incr/decr
  

  清空:flesh_all
  

  

  add mykey 0 30 5添加mykey
  hello内容hello
  set mykey 0 30 5设置mykey的值
  hello
  get mykey获取mykey值
  

  0:标志位
      30:缓存ttl值时长,30秒后无法获得
         5:整个数据的长度
  

  append mykey 0 300 11   追加内容,注意长度的修改,是指添加了多少个字符而不是添加到
  

  prepend mkkey 0 300 3同上,只不过是在前边添加,想要两个值之间带空格就在字符数多几个字符
  

  
  

  incr key_name #将key的值+1key值要是数字
  decr          #         -1
  

  (常用于微博微信之类的赞转发之类的计数)
  

  flush all清空缓存
  

  
  

  

  程序常用选项
  

  -m #:缓存空间大小,单位mb默认64
  -c #:并发连接数,默认1024
  -u username:程序运行者身份,一般要用普通用户
  -p Port:监听的tcp端口
  -u Port:监听的udp端口
  -l ip_addr:监听的IP地址,默认本机所有IP地址
  -M :一旦缓存空间耗尽的时候,想请求存储缓存项换回错误信息,而非使用默认的lru算法
  -f factor :用来指明chunk的增长因子,默认是1.25
  -vv:详细内容
  -t #:线程数量,默认为4,最好解析请求(提取请求首部中的URL及其他首部)---->查询缓存--->新鲜度检测(是不是在有效期)--->检查元数据是不是改变,如果没改变--->构建响应报文-->发送响应--->记录日志(类似于httpd的combined)
  

  

  过期检查机制:
  
  每个缓存都是会有服务器加一个过期时间.在这个时间内都是有缓存返回的,如果过期了或者没有缓存,就反代到后端服务器,后端服务器发送数据和过期时间给缓存和请求
  

  首部:HTTP/1.0
  Expire:绝对时间:xxx-xxx
  HTTP/1.1
  Cache-Control:maxage=相对时长,过多长时间过期
  Cache-Control:s-maxage=公共缓存时长
  

  条件检查机制:validation
  
  (1)LASTMODIFIED:最近修改时间
  

     IF MOFIFIED SINCE:从上次开始是不是修改过时间
  

     请求数据到缓存服务器上,如果超出有效时间,缓存服务器向后端服务器发送一个请求报文,询问是不是修改了,如果是,就由后端服务器来发送数据,没有的话就是有缓存发送
  

  (2)Etag:资源标签
  
     if-none-match:标签有没变换
  

     基本上和上边相同,只是寻问的是标签有没有变化
  

  

  两者结合:超时有效时长的,向后端服务器发送条件检查
  

  

  

  开源解决方案:
  squid:
  varnish:在非常大的并发连接数下,varnish不是很稳定
  

  

  varnish:绝大多数站点都是varnish www.varnish-cache.org 最新稳定版本4.1.3 (分支5.0|4.1|4.0)
  

  

  

  Architecture      图
  

  

  

  

  

  

  

  

  组织架构
  management进程
  child/cache进程:包含多种类型的线程
  accept worker expiry
  shared memeory log:
  统计数据的计数器
  日志区域
  

  配置接口:VCL
  VCL complier--->c complier------->shared object
  

  上午第二节课
  

  

  环境文件
  配置文件
  /etc/varnish/default.vcl配置缓存工作(child/cache)
  /etc/varnish/varnish.params配置varnish自身(端口之类的)
  主程序
  
  CLI interface
  varnishadm
  

  shared log
  /usr/bin/varnishhist
  /usr/bin/varnishlog
  /usr/bin/varnishncsa
  /usr/bin/varnishstat
  /usr/bin/varnishtest
  /usr/bin/varnishtop
  

  

  varnishtest:模拟varnish的客户端,测试varnish的工作是不是正常
  

  systemd unitfile
  varnish.service
  

  varnishlog
  varnishncsa:日志持久化服务,每个多长时间读取次日志
  

  

  varnish的缓存存储机制
  (1)malloc[,size]
  内存存储
  (2)file]]
  文件存储,黑盒,重启后缓存失效
  (3)persistent,path,size
  文件存储,黑盒,重启不失效,但是还在测试
  

  

  

  varnish程序的选项
  (1)程序选项 /etc/varnish/varnish.params
  -a IP地址:port
  服务接口,不能是127,默认6081
  -T IP地址:port
  管理接口,默认6082
  -s =type[,options]
  定义缓存存储机制
  -u user
  -g group
  定义运行身份
  -f config
  VCL配置文件
  -F
  前台运行
  (2)运行时参数(运行时可以更改的)
  -p param=value
  -r param[,param..]运行时不可以更改,只读
  

  大多数运行参数都有默认值不用设定,必要设定时候要在varnish.params定义,在程勋运行前定义
  在底下的DEMON_OPTS
  例如:
  #DAEMON_OPTS="-p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300"
  

  

  具体配置
  

  6081可以改
  6082是管理接口,也可以改
  

  #DAEMON_OPTS="-p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300"
  最小/最大线程池数量,超时时间
  

  

  VARNISH_STORAGE="file,/var/lib/varnish/varnish_storage.bin,1G"
  文件存储
  

  VARNISH_STORAGE="malloc,1G"
  内存存储
  

  

  事实上大多时候都不需要更改直接使用,主要还是VCL
  

  

  varnish_reload_vcl:vcl配置文件重载程序
  

  

  

  varnishadm -S /etc/varnish/sercet -T address:port
  

  help获取命令列表
  

  配置文件相关
  vcl.list:列出vcl文件有哪些
  load:装载,加载并编译
  

  vcl.load testconfig1 default.vcl
  

  use:激活
  

  vcl.use testconfig1激活了,生效了
  

  discard:删除,最好先激活另一个后在删除上一个
  运行时参数
  param.show:显示参数列表
  show显示某个参数配置
  set设定
  

  缓存存储
  storage.list
  

  后端服务器:
  backend.list
  

  

  VCL:域专有类型的配置语言
  
  state engine:状态引擎
  

  VCL有多个状态引擎.且之间存在相关性,但是彼此间互相隔离,每个状态引擎可使用return指明关联至那个下一级引擎
  

  

  图
  

  

  

  

  

  

  

  

  

  

  vcl_recv--->vcl_pipe
  收到后不知道做什么直接送到后端
  vcl_recv--->vcl_error
  收到后不允许给他数据或者直接请求就是错的
  

  

  vcl_pass:多加的处理逻辑,可以额外做一些处理的设定
  

  vcl_purge:缓存的修剪
  

  

  varnish 4:
  vcl_recv ---->vcl_hash
  (1)hit:vcl_hit--->vcl_deliver
  (2)pass,hit for pass:vcl_pass--->vcl_backend_fetch-->_response-->vcl_deliver
  (3)miss:vcl_miss--->vcl_backend_fetch-->_response-->vcl_deliver
  (4)purge:vcl_purge--->vcl_synth
  (5)pipe:vcl_pipe
  (6)busy:vcl_waiting
  

  

  

  vcl语法格式
  (1)支持注释符
  //:单行注释
  /*...*/:多行注释
  #:注释
  (2)sub $name:定义子例程;sub vcl_recv{..}只对vcl_recv有效
  (3)不支持循环,但是支持条件判断
  (4)有大量的內建变量,生效位置有特定要求
  (5)使用终止语句return决定下一个状态引擎;但是没有返回值
  (6)操作符
  =:赋值
  ==:等值判断
  !:取反
  ~:匹配
  &&:逻辑与
  ||:逻辑或
  >,=,
页: [1]
查看完整版本: memcached+varnish