CDN及缓存服务介绍
  HD0bXXcz3Xgg 2023年11月02日 69 0

1.  传统域名解析过程

了解CDN系统先从域名解析说起。通常,我们在浏览器中输入域名,敲回车后,进入网站进行信息的获取。您分析过输入域名后浏览是如何请求到服务器上的信息,您了解域名解析的过程么?

1.1.  主机解析域名的顺序

1、找缓存

2、找本机的hosts文件

3、找DNS服务器

注意:

IP和主机名时,要记得修改/etc/hosts文件,因为有些应用程序在主机内的进程之间通信的时候,会本机的主机名,如果主机名不能正确解析到一个正常的IP地址,那么就会导致进程通信有问题。

1.2.  概念解释

DNS(Domain Name System,域名系统)

    1、因特网上作为域名和IP(Internet Protocol Address)地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

    2、通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

    3、DNS协议运行在UDP协议之上,使用端口号53。

    4、在整个互联网体系中,约定俗成的用于标识网络上设备的地址是IP,然而我们输入的是DNS,因为域名更方便人们记忆,不然那么多网站,人怎么可能记住所有的IP地址。

1.3.  浏览器如何通过域名去查询URL对应的IP(对应服务器地址)呢?

A:

1、浏览器缓存:浏览器会按照一定的频率缓存DNS记录。

2、操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中找。

3、路由缓存:路由器也有DNS缓存。

4、ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。

5、根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)。

CDN及缓存服务介绍_DNS

详细的解析过程

当用户在浏览器中输入域名并按下回车键后,

第1步,浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时间太长和太短都不好,如果缓存时间太长,一旦域名被解析到的IP有变化,会导致被客户端缓存的域名无法解析到变化后的IP地址,以致该域名不能正常解析,这段时间内有可能会有一部分用户无法访问网站。如果时间设置太短,会导致用户每次访问网站都要重新解析一次域名。

第2步,如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。其实操作系统也会有一个域名解析的过程,在Windows中可以通过C:\Windows\System32\drivers\etc\hosts文件来设置,你可以将任何域名解析到任何能够访问的IP地址。如果你在这里指定了一个域名对应的IP地址,那么浏览器会首先使用这个IP地址。例如,我们在测试时可以将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地DNS解析的规程,所以黑客就有可能通过修改你的域名解析来把特定的域名解析到它指定的IP地址上,导致这些域名被劫持。

前面这两个步骤都是在本机完成的,到这里还没有涉及真正的域名解析服务器,如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。

       第3步,如何、怎么知道域名服务器呢?在我们的网络配置中都会有"DNS服务器地址"这一项,这个地址就用于解决前面所说的如果两个过程无法解析时要怎么办,操作系统会把这个域名发送给这里设置的LDNS,也就是本地区的域名服务器。这个DNS通常都提供给你本地互联网接入的一个DNS解析服务,例如你是在学校接入互联网,那么你的DNS服务器肯定在你的学校,如果你是在一个小区接入互联网的,那这个DNS就是提供给你接入互联网的应用提供商,即电信或者联通,也就是通常所说的SPA,那么这个DNS通常也会在你所在城市的某个角落,通常不会很远。在Windows下可以通过ipconfig查询这个地址。

       第4步,如果LDNS仍然没有命中,就直接到Root Server域名服务器请求解析。

第5步,根域名服务器返回给本地域名服务器一个所查询域的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右。

第6步,本地域名服务器(Local DNS Server)再向上一步返回的gTLD服务器发送请求。

第7步,接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是你注册的域名服务器,例如你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。

第8步,Name Server域名服务器会查询存储的域名和IP的映射关系表,正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器。

第9步,返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制。

第10步,把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。

       13台根域名服务器不是一个物理概念,比如下图这样:

CDN及缓存服务介绍_DNS_02

根域名服务器分布

它是一个逻辑概念,根域名服务器可以由分布在全球的多个服务器组成,形成一个集群,对外统一为1台逻辑的根域名服务器。在root-servers网站上,我们能查到所有的真实服务器分布。

截至2018年9月11日,全球一共分布了937台根域名服务器。



2.  CDN简介

CDN的全称是(Content Delivery Network),即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。


       CDN好处:

u  解决服务器端的“第一公里”问题  

u  缓解甚至消除了不同运营商之间互联的瓶颈造成的影响  

u  减轻了各省的出口带宽压力  

u  缓解了骨干网的压力  

u  优化了网上热点内容的分布

2.1.  CDN 处理过程

CDN及缓存服务介绍_服务器_03

以上图为例,我们分析CDN的访问步骤:

l  step1:用户向localDNS发起请求查询输入域名对应的IP地址(若有缓存直接返回,否则去rootDNS查询);

l  step2:localDNS迭代向rootDNS查询,逐级迭代,rootDNS=>顶级DNS=>权限DNS;

l  step3:获得权限DNS后,localDNS向权限DNS发起域名解析请求;

l  step4:权限DNS通常会将域名CNAME【如果有有CNAME则解析CNAME对应的CDN服务,否则的话默认为普通请求,直接返回解析到的IP】到另一个域名,这个域名最终会被指向CDN网络中的智能DNS负载均衡系统;


step5:DNS负载均衡系统通过一些智能算法,将最合适的CDN节点IP地址返回给localDNS;

区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。

l  step6:localDNS将获得的IP地址返回给用户;

l  step7:用户得到节点的IP地址后,向该节点发起访问请求;

l  step8:CDN节点返回请求文件,如果该节点中请求的文件不存在,就会再回到源站获取这个文件,然后返回给用户。

2.2.  CDN网络的组成要素

对于普通的Internet用户,每个CDN节点就相当于一个放置在它周围的网站服务器. 通过对dns的接管,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器一样,响应用户的请求. 由于它离用户更近,因而响应时间必然更快.

从下面图中 虚线圈起来的那块,就是CDN层,这层是位于 用户端 和 站点服务器 之间.

CDN及缓存服务介绍_服务器_04

● 智能调度DNS(比如f5的3DNS)

智能调度DNS是CDN服务中的关键系统.当用户访问加入CDN服务的网站时,域名解析请求将最终由 “智能调度DNS”负责处理。它通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户可以得到快速的服务。同时它需要与分布在各地的CDN节点保持通信,跟踪各节点的健康状态、容量等信息,确保将用户的请求分配到就近可用的节点上。

智能调度和负载负载均衡系统是整个CDN的核心,负载均衡的准确性和效率直接决定了整个CDN的效率和性能。通常负载均衡可以分为两个层次:全局负载均衡(GSLB)和本地负载均衡(SLB)。全局负载均衡主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)。因此,就近性判断是全局负载均衡的主要功能。本地负载均衡一般局限于一定的区域范围内,其目标是在特定的区域范围内寻找一台最适合的节点提供服务,因此,CDN节点的健康性、负载情况、支持的媒体格式等运行状态是本地负载均衡进行决策的主要依据。

● 缓存功能服务

内容分发包含从内容源到CDN边缘的Cache的过程。从实现上,有两种主流的内容分发技术:PUSH和PULL。

PUSH是一种主动分发的技术。通常,PUSH由内容管理系统发起,将内容从源或者中心媒体资源库分发到各边缘的 Cache节点。分发的协议可以采用 Http/ftp等。通过PUSH分发的内容一般是比较热点的内容,这些内容通过PUSH方式预分发( Preload)到边缘Cache,可以实现有针对的内容提供。对于PUSH分发需要考虑的主要问题是分发策略,即在什么时候分发什么内容。一般来说,内容分发可以由CP(内容提供商)或者CDN内容管理员人工确定,也可以通过智能的方式决定,即所谓的智能分发,它根据用户访问的统计信息,以及预定义的内容分发的规则,确定内容分发的过程。

PULL是一种被动的分发技术,PULL分发通常由用户请求驱动。当用户请求的内容在本地的边缘 Cache上不存在(未命中)时, Cache启动PUL方法从内容源或者其他CDN节点实时获取内容。在PULL方式下,内容的分发是按需的。

新的方案采用内容Cache服务器(squid),内容按用户请求从中心节点拉到区域节点,区域节点位于用户接入点,是面向最终用户的内容提供设备,可缓存静态Web内容和流媒体内容,实现内容的边缘传播和存储,以便用户的就近访问。

●共享存储

2.3.  相关词汇解释

CNAME记录(CNAME record)

CNAME即别名( Canonical Name );可以用来把一个域名解析到另一个域名,当 DNS 系统在查询 CNAME 左面的名称的时候,都会转向 CNAME 右面的名称再进行查询,一直追踪到最后的 PTR 或 A 名称,成功查询后才会做出回应,否则失败。

CNAME域名

接入CDN时,在CDN提供商控制台添加完加速域名后,您会得到一个CDN给您分配的CNAME域名, 您需要在您的DNS解析服务商添加CNAME记录,将自己的加速域名指向这个CNAME域名,这样该域名所有的请求才会都将转向CDN的节点,达到加速效果。

回源host

回源host:回源host决定回源请求访问到源站上的具体某个站点。

例子1:源站是域名源站为

rss.test.com

回源host为

rss1sd.test.com

那么实际回源是请求到

rss.test.com

解析到的IP,对应的主机上的站点

rss1sd.test.com

协议回源

指回源时使用的协议和客户端访问资源时的协议保持一致,即如果客户端使用 HTTPS 方式请求资源,当CDN节点上未缓存该资源时,节点会使用相同的 HTTPS 方式回源获取资源;同理如果客户端使用 HTTP 协议的请求,CDN节点回源时也使用HTTP协议。

2.4.  CDN缓存的类型

适合缓存的资源:静态资源

.mp3\.mp4\.jpg\.html\.js\.css\.json

不适合缓存的资源:动态资源

.jsp\.action\.php

       简单判断是否适合,从URI判断,去掉uri问号后的内容,如果多次请求保持不变就适合用cache,如果变化就不适合;


3.  推荐一种CDN方案

CDN及缓存服务介绍_DNS_05

此方案分为三层:中心节点,主要包括源站服务器、智能DNS解析服务器组成。骨干节点,骨干上的缓存服务器,为边缘缓存服务提供中继服务。边缓缓存节点:位于主要城市的缓存服务,为最终用户提供服务。

智能DNS服务:可采用Bind+智能解析,也可采用类似的SmartDNS软件。

缓存服务:采用squid或者Varnish等反向代理软件,作为缓存服务。

 


 

4.  缓存管理

4.1.  Squid缓存策略

在用squid作为缓存服务器的时候,其能否缓存页面是个大问题,这不是由squid来决定的,而是由网页设计者指定的。

举个例子:设计一个www.test.com的网页,其中有静态的图片,还有动态的密码输入,如果让两者都缓存,岂不是密码就不安全了。于是只想让静态图片在squid 中缓存,那么就在密码输入的headers中加入 no-store的参数就可以了。

这只是一个例子:其实指定页面能否被缓存,主要由以下4个关键字决定

Last-Modified: 告诉反向代理页面什么时间被修改

Expires:              向代理页面什么时间应该从缓冲区中删除

Cache-Control: 告诉反向代理页面是否应该被缓冲

Pragma:            代理页面是否应该被缓冲.

其中Cache-Control关键字尤为重要,那么详细看一下它

从字面意思可以看出: Cache-Control--缓存控制

Cache-Control 包含几个定义:

CDN及缓存服务介绍_缓存_06

       那么如果网页指定了不能缓存, squid非要缓存,有没有办法呢,回答是一部分有办法,一部分没有办法

public:网页指定可以被缓存

private:网页指定这是私有数据,不能被缓存。squid强制缓存:ignore-private

no-cache:网页指定不能被缓存。 squid强制缓存:ignore-reload

no-store:网页指定不能被缓存。squid无法缓存

must-relvalidate:强制浏览器遵守规则。 squid无法缓存

proxy-revalidate:强制代理服务器遵守规则。squid无法缓存带有proxy-relalidate的no-cache指定

max-age:数据内容在指定的时间内缓存。



 

4.2.  squid的缓存决定因素和刷新策略

 

1) 是否缓存

squid本质是缓存url,对于一个url能否缓存,取决与两个因素,一个是配置,一个response头,缺一不可

 

1.1) 配置

比如有可能存在下面的配置就对url中带cgi-bin或者?的不缓存

acl QUERY urlpath_regex cgi-bin /?

cache deny QUERY

squid3.0默认没有上面的配置,之前的版本是有的

 

1.2)response头

对于静态页面来说,服务器会自动加上Last-Modified头,这使得squid可以缓存,

但不确定缓存时间,所以需要使用refresh-pattern指令来确定

 

对于动态内容来说,原始服务器不会添加影响缓存的头,所以squid对动态内容不做缓存,其实

squid是无法识别动态或者静态,完全是通过response头来决定缓存与否,所以要想缓存动态内容

必须通过程序添加response头来迫使squid缓存,

比如Expire或者Cache-Control:max-age或者Last-Modified(需小于Date),当然也可以组合使用

个人组合Expire和Last-Modified还是不错,Expire明确指名了缓存过期时间,所以无须使用refresh_pattern

Last-Modified头可以使得浏览器比如IE,在请求中加入If-Modified-Since

此时连squid只用返回304让浏览器从本地取页面。

 

2)缓存刷新策略

 

2.1)术语

 

 

CDN及缓存服务介绍_服务器_07

2.2)刷新策略

 

CDN及缓存服务介绍_缓存_08

 

 


4.3.     Squid缓存总结

1)需要squid进行缓存:

       Cache-Control:public

       Expires:Mon,29 Mar 2021 07:35:26 GMT

       max-age:3600

       2)不需要进行缓存:

       Cache-Control: proxy-revalidate

4.4.     Squid缓存清理

(1)首先在squid的主配置文件中添加acl 列表,并允许受信任的主机有权限清除缓存。

[root@hqtime ~]# vim /etc/squid/squid.conf

.......

.......

acl managercache src 192.168.1.145 127.0.0.1

acl Purge method PURGE

http_access allow managercache Purge

http_access deny Purge

(2)使用squid自带命令squidclient

如下清除squid中一条缓存,-h是受信任清理缓存的服务器ip,-p是指定的squid端口

[root@hqtime ~]# /usr/bin/squidclient -h 192.168.1.145 -p 80 -m PURGE http://www.test.com/myapp.html

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ehrZuhofWJiC   2024年05月17日   46   0   0 服务器linux
HD0bXXcz3Xgg
作者其他文章 更多