企业CDN缓存系统varnish——搭建一个具有多台后端服务器varnish系统

本文介绍了如何搭建和配置Varnish作为CDN缓存系统,包括正向代理和反向代理的概念,Varnish的工作流程,安装步骤,以及如何通过Varnish实现多台后端服务器的负载均衡,确保高效的数据传输和优化用户体验。
摘要由CSDN通过智能技术生成

1 正向代理

简单的说:如访问国外的服务器访问不到,通过香港服务器。知道访问的对象,但隐藏了客户端(我)

2 反向代理

简单的说:如10086接线员。隐藏了服务端(他)

3 什么是varnish(CDN的一种)

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。 Varnish是一款高性能的开源HTTP加速器

之前的squid加速器(代理缓存服务器)是将从服务器要回来的资源放在自己的硬盘里,客户读取的速率很慢,代理的效率低
现在的varnish加速器(代理缓存服务器)是将从服务器要回来的资源放在自己的内存里,客户读取的速率很快,代理的效率高

varnish代理服务器的工作方式有两种
(1)仅仅作为一个代理服务器:帮客户端去问服务端要数据,要回来的数据直接给客户端自己不缓存,这种情况是客户的隐私信息、热点信息、更新比较快的数据,不缓存,只代理。
(2)既代理又缓存:帮客户端去问服务端要数据,要回来的数据先给自己缓存一份,然后再发给客户端,这种情况是用于更新比较慢的数据,此时varnish既代理又缓存。
varnish有两个作用:代理服务器、缓存数据

3.1 为什么要设置varnish加速缓存代理服务器

比如:使用淘宝的用户非常多,淘宝的服务商总部在杭州
当每个地区的用户使用淘宝访问阿里服务器资源的时候,因访问量太大对于深圳的服务器来说,可能会造成服务器瘫痪
对于每个地区的用户来数,如果都去访问阿里的总部服务器,会造成网络拥塞,使得客户的访问很缓慢,不利于用户的使用
现在阿里总部给每个地区都放varnish代理服务器,每个地区的淘宝使用用户想访问总部资源,都会间接去问自己地区的varnish代理服务器要资源。
如果varnish代理服务器上面没有资源,此时varnish代理服务器就会去向杭州的服务器要资源,将要回来的资源视情况而定给自己缓存一份,然后再给客户端发一份。

假如代理服务器缓存了一些更新慢的数据,当客户端再次要这个数据的时候,代理服务器会直接返回给客户端,不需要再去问深圳的服务器要资源,那么这就是把varnish服务器叫做加速器的原因,加快了客户端和服务端之间的访问速率

3.2 varnish加速器的工作流程

Varnish与一般服务器软件类似,分为master(management)进程和child(worker ,主要做cache的工作)进程。
master进程读入命令,进行一些初始化,然后fork并监控child进程。
child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。
针对文件缓存部分,master读入存储配置,调用合适的存储类型,然后创建/读入相应大小的缓存大文件。
接着,master初始化管理该存储空间的结构体。这些变量都是全局变量,在fork以后会被child进程所继承(包括文件描述符)。
在child进程主线程初始化过程中,将前面打开的存储大文件整个mmap到内存中
(如果超出系统的虚拟内存,mmap失败,进程会减少原来的配置mmap大小,然后继续mmap)
此时创建并初始化空闲存储结构体,挂到存储管理结构体,以待分配。
接着,真正的工作开始,Varnish的某个负责接受新HTTP连接的线程开始等待用户,如果有新的HTTP连接过来,它总负责接收,
然后叫醒某个等待中的线程,并把具体的处理过程交给它。Worker线程读入HTTP请求的URI,查找已有的object,
如果命中则直接返回并回复用户。如果没有命中,则需要将所请求的内容,从后端服务器中取过来,存到缓存中,然后再回复。
分配缓存的过程是这样的:它根据所读到object的大小,创建相应大小的缓存文件。
为了读写方便,程序会把每个object的大小变为最接近其大小的内存页面倍数。
然后从现有的空闲存储结构体中查找,找到最合适的大小的空闲存储块,分配给它。
如果空闲块没有用完,就把多余的内存另外组成一个空闲存储块,挂到管理结构体上。 如果缓存已满,就根据LRU机制,把最旧的object释放掉。
释放缓存的过程是这样的:有一个超时线程,检测缓存中所有object的生存期 如果超初设定的TTL(Time To Live)没有被访问,就删除之,并且释放相应的结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值