CDN之varnish加速服务的搭建(一)对于CDN的理解
一、为什么要使用CDN服务
当下的互联网应用都包含大量的静态内容,但静态内容以及一些准动态内容又是最耗费带宽的,特别是针对全国甚至全世界的大型网站,如果这些请求都指向主站的服务器的话,不仅是主站服务器受不了,单端口500M左右的带宽也扛不住,所以大多数网站都需要CDN服务。
二、CDN是什么(Content Delivery Network——内容分发网络)
http缓存是浏览器端缓存
cdn是一种策略,一款高性能且开源的反向代理服务器和HTTP加速器,可以有效降低web服务器的负载,提升访问速度。
通俗的理解,CDN就是让原本在西安市的浏览器要访问北京主站内容的请求转而由部署在河南的缓存来受理,这样请求的数据只需经过一跳或有限的几跳就能到达请求端,有效利用带宽并且降低主站压力。
对搜索网站以及电子商务网站的起着重要的作用。
三、CDN怎么缓存?
类似于http,过程如下:
客户端请求数据时,先从本地缓存查找,如果被请求数据没有过期,拿过来用,如果过期,就向CDN边缘节点发起请求。
CDN便会检测被请求 的数据是否过期,如果没有过期,就返回数据给客户端,如果过期,CDN再向源站发送请求获取新数据。
CDN边缘节点缓存机制,一般都遵守http标准协议,通过http响应头中的Cache-Control和max-age的字段来设置CDN边缘节点的数据缓存时间。
可以借助以下图片来理解CDN缓存的机理:
四、对CDN的理解
CDN是一个经策略性部署的整体系统,从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均而产生的用户访问网站响应速度慢的根本原因。因此CDN主要作用是通过内容和资源就近分发,保证用户快速访问,提升用户体验的一个内容网络。
CDN作为网站加速的工具,是一种组合技术,它的重要组成部分包括源站、缓存服务器、智能DNS、客户端等。
CDN网络的构成如下:
1、折叠源站——eg:阿里总部
源站:指发布内容的原是服务器。
操作:添加、删除、更改网站的文件,都是在源站上进行的;
明确:缓存服务器所抓取的对象也全部来自于源站
折叠:隐藏的含义,客户端并不知道折叠网站的存在,以为访问的资源站点就是源站!
2、缓存服务器——eg:阿里在河南和其他地方部署的诸多缓存服务器(类似于中间商)
缓存服务器:是直接提供给用户访问的站点资源(直接面对用户),由一台或数台服务器组成;
用户请求资源的过程
1)当用户发起url请求时,他的访问请求被智能DNS定位到离他较近的缓存服务器;
2)如果用户所请求的内容刚好在缓存里面,则直接把内容返还给用户;
3)如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源站直接抓取内容,然后再返还给用户。
3、智能DNS——eg:就近选择缓存服务器
CDN整个技术核心是智能DNS,它主要根据用户的来源,将其访问请求指向离用户比较近的缓存服务器!
eg:把深圳电信的用户请求指向到深圳电信IDC机房中的缓存服务器。
eg:通过智能DNS解析,让用户访问同服务商下的服务器,消除国内南北网络互相访问慢的问题,达到加速作用。
4、客户端——陕西省的若干电脑
客户端或称用户端即发起访问的普通用户,一般的访问方式是浏览器。
简单测试:curl的工具和直接在浏览器访问看实验现象!
复杂测试:可以借助Google Chrome/IE/FireFox查看HTTP请求头request header响应头,了解数据的交互过程!
五、CDN工作原理
传统访问:用户在浏览器输入域名发送请求-解析域名获取服务器IP地址-根据IP地址找到对应的服务器-服务器响应并返回数据
使用CDN访问:用户发送请求-智能DNS的解析(根据IP判断地理位置、接入网类型、选择路由最短和负载最轻的服务器)-取得
缓存服务器IP-把内容返回给用户(如果缓存中有)-向源站发起请求-将结果返回给用户-将结果存入缓存服务器
具体过程如下:
传统的未加缓存服务的访问过程:
- 用户向浏览器提供要访问的域名;
- 浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;
- 浏览器使用所得到的IP地址,域名的服务主机发出数据访问请求;
- 浏览器根据域名主机返回的数据显示网页的内容。
CDN网络是在用户和服务器之间增加Cache层, 如何将用户的请求引导到Cache上获得源服务器的数据,主要是通过接管DNS实现,访问使用CDN缓存后的网站的过程:
- 用户向浏览器提供要访问的域名;
- 浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析 函数库一般得到的是该域名对应的CNAME记录,为了得到实 际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对 应的IP地址,使得用户能就近访问。
- 此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;
- 缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;
- 缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程;
六、适用场景
站点或者应用中大量静态资源的加速分发,例如:CSS,JS,图片和HTML
大文件下载
直播网站等
七、CDN的实现
BAT、阿里云、腾讯云等都有提供CDN服务
可用LVS做4层负载均衡
可用Nginx,Varnish,Squid,Apache TrafficServer做7层负载均衡和cache
适用squid反向代理,或者Nginx等的反向代理
实例:
1.用户向浏览器输入www.baidu.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求;
2.网站的DNS域名解析器设置了CNAME,指向了www.baidu.server.com,请求指向了CDN网络中的智能DNS负载均衡系统;
3.智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户;
4.用户向该IP节点(CDN服务器)发出请求;
5.由于是第一次访问,CDN服务器会向原web站点请求,并缓存内容;
6.请求结果发给用户。