一、DNS正常引导
1、cname引导
此引导方式是大多数CDN厂商的做法,面向各网站主,用cname的方式为其提供接入CDN系统的入口,在操作上,一般CDN厂家会提供一个域名供网站主做cname使用,在做完cname的那一刻,你连接的服务器就由CDN厂家来控制了,也就成功将用户请求智能的引导到他们的设备上去了。另外,要正常提供服务,主要得关注两个问题,一个是cname解析,另一个是网站回源问题。
2、forword引导
此引导方式是大多数运营商的做法,他们有自己的DNS,有自己的宽带用户、专线用户、无线用户,为了节省网间流量成本的同时提高用户体验,他们会自建或找cache厂家合作进行cache集群建设,拿cache厂家为例,在操作上,运营商或cache厂家会先分析出一批可以做缓存的网间域名,然后将这些域名forword到cache厂家自建的DNS(二次开发后适合cache配置的)上,cache厂家的dns根据不同的解析规则(比如轮序、hash等)解析到后端的cache集群,进而成功的将用户请求引导到了cache厂家的设备上,每台缓存代理服务器会安装bind并配置回源DNS(或者直接根域回源)。当然cache厂家也做了很好的高可用策略,比如说cache集群挂了访问直接回源、两台DNS做高可用等等。
有同学问运营商为什么要用forword递归的方式,而不是迭代指定dns的方式.先说一下迭代和递归的区别,举个例子,你向A询问什么是互联网,A不知道,他告诉我让我问B或C然后就不管了,这叫迭代,但同样如果A不知道,但他说虽然我不知道但我向B或C问清楚后再告诉你,这就是递归,很清楚了吧。递归有个好处,每经过的环节能够做到信息同步,所以用递归处理。下面是一个精简的业务架构原理图:
二、劫持污染
劫持和污染是运营商进行请求引导的另外一种重要方式,在操作上会在入口链路上使用分光设备将流量复制一份,复制后的流量使用流量分析设备进行分析处理,由于更靠近网内网民,设备会将要劫持的请求抢先将伪造的结果回传给用户,而这个结果就是欺骗网民去访问指定的服务器,从而达到将请求劫持到cache服务集群上的效果,从劫持的请求看分为dns劫持和http劫持。有些同学叫这种dns引导方式为dns污染,因为感觉只是伪装回复没有劫持,反正不管怎么叫,都是这么一个理,画了一张业务流程架构图如下:
1、DNS劫持(污染)
DNS劫持(污染)是指流量分析劫持设备在分析到需要的DNS查询请求后(一般为udp53号端口,要抓取的dns的ip地址设置白名单),抢先伪装一个DNS回复请求给用户,为什么会抢先呢,因为用户和流量分析劫持设备是网内对网内,不管是时延也好还是其它链路质量也好,都要比网间要快很多很多,而udp的特点是没有验证机制,用户会接受第一个查询结果,其余的将会被抛弃。
2、http请求劫持
http请求劫持是指流量分析劫持设备在分析道需要的http请求后,伪装客户端给源站发一个reset标记断开连接,然后伪装源站给用户回一个302重定向到cache设备上,比如说你访问的是www.aaa.com/123.html,cache设备是1.1.1.1,被劫持后会发一个http://1.1.1.1/www.aaa.com/123.html的302重定向给用户,用户自然就被引导到1.1.1.1上面了。
三、透明代理引导
透明代理是将cache设备作为中间网关串联到链路中去的,作为网关其实说白了cache设备要开启路由转发,承担了路由器的作用,很多大的企事业单位为什么节约流量,会在其出口上安装一台这样的设备,比如说原来需要买两个G带宽,在做了透明代理后只需要买1.5个G了,的对于用户而言没有任何需要操作的,所以叫透明代理。
透明代理也有两种方式,都是基于iptable,一种是基于端口转发,将目的地址是80的请求,转发到本地启用的比如说8080的cache应用上,由cache应用处理后为客户提供服务,这种方式的弊端是有可能影响一些服务,因为80端口过来不一定全是http请求。另外一种是采用tcp旁路监听代理的方式tproxy,此种方式是非常好的,配置iptable的mangle表的PREROUTING链,对tcp的socket的连接打上mark标记,然后新建路由表让打过标记的tcp通过,监听目的端口是80的tcp通过tproxy代理至8080的cache应用上,由cache应用处理后为客户提供服务。
操作上,服务器要开启路由转发、开启iptable,要安装缓存代理软件,然后进行相应的配置,当然在高可用性上要做到对路由的心跳,一旦代理服务器故障,直接跳过代理服务器到下一跳,保证业务的持续性。