企业CDN缓存系统---部署varnish、反向代理、负载均衡

1.CDN

1.1 概念

CDN:content distribute network(内容分发网络)或者content delivery network(内容交付网络)。CDN的任务是将内容从源站传递给用户。

CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

1.2 工作原理

  • 无cdn时,用户通过浏览器访问网站的过程

1.用户在浏览器输入URL
2.浏览器向本地DNS请求域名解析
3.如果本地DNS缓存有该域名的解析结果,则直接将解析结果返回给浏览器
4.如果本地DNS缓存中无该域名的解析结果,则以递归方式向整个DNS系统请求域名解析,在获得应答后将解析结果返回给浏览器
5.浏览器获得解析结果,提取出IP信息,使用IP向服务器请求数据
6.服务器返回数据给浏览器

  • 有cdn时,用户通过浏览器访问网站的过程

1.用户在浏览器中输入URL
2.浏览器向本地DNS请求域名解析,DNS会将域名解析权转交给CNAME指向的CDN专用的DNS服务器
3.CDN专用的DNS服务器将CDN的全局负载均衡设备的IP返回给浏览器
4.浏览器向CDN全局负载均衡设备发起URL请求
5.CDN全局负载均衡设备根据请求的URL和用户的IP地址,将用户请求转发到用户所在区域的区域负载均衡设备
6.区域负载均衡设备,根据用户IP、请求URL、缓存服务器的负载情况等,返回一台合适的服务器IP给用户
7.用户向缓存服务器发起请求
8.缓存服务器响应用户请求,如果用户请求的内容缓存服务器上不存在,则缓存服务器要向上一级缓存服务器请求内容,直到追溯到网站的源服务器

2.varnish

2.1 概念

varnish是一个反向HTTP代理,有时称为HTTP加速器或web加速器。
varnish将文件或文件片段储存在内存中,使他们能够快速被提供。
varnish本质上是一个键/值存储,它通常使用url作为键。
varnish是为现代硬件、现在操作系统和现代工作负载而设计的。

2.2 varnish代理服务器的工作方式

  • 仅仅作为一个代理服务器:帮客户端去问服务端要数据,要回来的数据直接给客户端自己不缓存一份,这种情况是客户的隐私信息、热点信息、更新比较快的数据,不缓存,只代理。

  • 既代理又缓存:帮客户端去问服务端要数据,要回来的数据先给自己缓存一份,然后再发给客户端,这种情况是用于更新比较慢的数据,此时varnish既代理又缓存。

2.3 varnish加速器的工作流程

Varnish 主要存在两个进程:manage 进程及 child 进程,其中:
manage 进程:更新配置,vcl 文件编译,varnish 监控,初始化 varnish 及提供 varnish 管理接口。
child 进程:主要进行请求任务的处理,接受请求等。
在这里插入图片描述

2.4 vcl 的处理流程

vcl 的处理流程,主要是由 Varnish 的状态机决定,可以通过 vcl 配置文件来对 varnish 状态机各个步骤所做的操作进行配置。
在这里插入图片描述
其中的各个状态介绍:

vcl_recv:
vcl_recv 是 http 请求到达后进入的第一个状态,在这个状态中,可以对请求进行以下的一些处理:

  1. 修改 client 请求,以减少缓存决策时的差异性。
  2. 根据 client 请求,决定缓存策略。
  3. 重定向请求 。
  4. 决定处理请求的 backend(即后端 webserver )。

在 vcl_recv 可以进入 vcl_pass, vcl_pipe,vcl_lookup,vcl_error。

vcl_pipe:
若连接存活期间其请求被 vcl_recv 传递至 vcl_pipe ,那么这请求后的所有请求,将直接经 vcl_recv 到达 backend,varnish 不再查找,及存储及请求的对象,就如同 client 与 backend 直接通信一样, 不会记录任何通信的日志。

vcl_pass:
进入 vcl_pass 的请求,请求会直接发送至 backend , 但不会缓存, 可进入 restart , 会增加 restart 计数。

vcl_hash:
根据请求的特征,构建 hash 值,通常是以 host+url 的形式建立 Hash 值,可进入 vcl_hit 及 vcl_miss 。

vcl_hit:
可进入 vcl_pass 及v cl_deliver,vcl_restart。

vcl_miss:
可进入 vcl_pass 及 vcl_fetch,vcl_restart。

vcl_fetch:
将请求传递至 backend, 决定是是否缓存,可进入 hit_for_pass: 仅vcl_fetch 可进入,与 pass 功能类似,不过其会利用 beresp 建立一个 hitforpass 对象,以防止同一对象被缓存,在 hitforpass 对象存在期间,同一请求的结果都不会被缓存,请求会直接进入 pass。

vcl_deliver:
在缓存数据将要发送到客户端时调用。

deliver:缓存取到的对象,并发送至服务端,也可进入 restart , 增加 restart 计数,当 restart 计数大于 max_restarts 时会报错。

vcl_error:
出错时调用,以上的各状态通常情况下都可进入 vcl_error。

3.部署varnish

3.1 varnish的安装

实验环境:

1.在所有实验机中需要关闭火墙,selinux,NetworkManager 避免影响。


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值