很多人可能不了解cdn,认为自己没用过cdn,其实不然,我们已经在用了。先举个栗子,大家有没有想过为什么双十一的时候这么多人抢购,流量超级大,为什么很少出现网页加载不出来,也没见过淘宝服务器奔溃呢?
举个栗子正常情况下肯定会奔溃的,你想想,上亿人同时向一台服务器发起请求,服务器还不得冒烟啊?
实际上cdn就在里面发挥着功不可没的功劳。抛开技术方面的优化,假设淘宝只有一台服务器A在运行,从原则上来说我们是应该从这台A服务器下载资源的(html、js、css等),可是淘宝会把这些静态资源分发到全国各个地方的网络节点上(可以理解成每一个城市部署一个机房),我们访问的时候实际是从离我们最近的那台服务器B下载的资源,这就是cdn。
1、什么是cdn
cdn顾名思义是一个英文缩写,全称是content delivery network(内容分发网络),即服务商通过在世界各地部署大量服务器节点,缓存源站静态资源(目标服务器),当用户访问时返回最优线路的资源,提高网页响应速度,给用户带来更好的体验。
eg:阿里云服务商在全国部署了大量的服务器,某公司觉得自己的服务器带宽不够大,希望在阿里云的这些服务器上分担压力,所以阿里云服务商会从该公司的网站中拉取静态资源(源站资源),然后在自己的各个服务器上添加该资源的缓存,最后返回一个url地址给该公司,该公司只需要把之前的资源地址(js、css、html、img等)替换成这个url就可以了;当用户访问时,实际上走的请求是阿里云的服务器,然后阿里云返回一个最快的资源给你(如你在广州就返回广州服务器的资源,而不是北京服务器的资源)
cdn的核心技术在于智能dns与内容存储,用户访问时根据所在线路与位置,就近选择最快的服务器节点,然后从缓存中取出相应内容,避免了直接从源站拉取资源、减低了网络阻塞。
下面我们先说一下cdn的三大组成部分
1.1、squid 代理web缓存服务器
前面我们也说到,服务商会返回一个url给源站,如https://aliyun.cdn.com/xxx/main.js,那么我们就不难想到它其实就是一个web服务器提供(像我们的iis、tomcat、nginx等),cdn下使用的web服务器大多是squid,下面说一下squid以及nginx在linux下的安装:
1、yum install squid -g //安装squid
2、vim /etc/squid/squid.conf //配置端口代理
1、yum install nginx -g //安装nginx
2、vim /etc/nginx/nginx.conf //配置端口代理
所以squid就是一个web代理服务器,只不过它在缓存服务方面比较出色。
1.2、计算机集群
从执行性能上来说,个人PC < 服务器 < 计算机集群,那么什么是计算机集群呢?其实从定义上来说,计算机集群是通过松散集成的计算机软件或硬件连接起来的完成计算工作的计算机系统,通俗来理解就是把很多服务器组合起来,共同完成某一项任务,这样工作效率自然会大于一台电脑。
作为cdn服务的提供商(服务商),他们会在各个城市部署很多的服务器,从而组成一张庞大的计算机集群网,使得各个地方的用户附近都至少有一台可访问的服务器。
1.3、智能dns
说到智能dns,那么我得说一下“不智能的”dns。dns,全称domain name system,域名系统,万维网上的每一个设备(pc、手机等)都有一个属于自己的ip地址,也可以当做设备的身份证,然而这个ip地址太过长了,不便于记忆,所以就用域名来作为ip的别名,如百度的域名是baidu.com,当用户输入百度域名并回车后,通过dns系统获取到真实ip地址14.215.177.39。
dns解析流程:浏览器host 》 系统host 》 运营商解析 》 根域解析
我们普通的dns往往慢就慢在跨线路和跨国际,能不能根据用户所在地址,返回合适的ip地址呢,这就产生了智能dns。
智能dns位于cdn服务器层,它根据用户来源的线路以及所在的位置,根据当前网络负载情况,选取出距离最近的同线路服务器,并放回该服务器的ip地址(cdn计算器集群的每一台服务器都具备相同的功能与内容,因而返回不同的ip,处理的结果都是一样的)。
2、cdn产生背景
对于大部分的中小型企业,服务器性能不会很好,带宽也不会很大,一旦遇到访问量“井喷”的情况就会奔溃了,比如双十一、12306春运期间甚至是一些学校的选课系统,那么解决措施往往就是出钱出力升级配置了。
其次由于我国国土辽阔,存在着不少的网络运营商,如巨头电信联通,这也就导致了不同运营商(线路间)互联不互通,如广州电信用户访问北京联通机房的服务器速度慢。
这时候cdn就应运而生了,它依靠着强大的服务器集群能力为各网站提供缓存加速服务。
3、cdn加速原理
cdn之所以快靠的是多节点、多线路、用缓存;
多节点,也就是多服务器,这样让用户没必要直接向源站请求资源,而是向最近的服务器请求就行了;
多线路,避免了跨线路互联不互通的尴尬;
用缓存,这个前面没有怎么提,cdn服务器会从源站拉取资源并缓存到内存中,当用户访问的时候直接从内存中取出来,这样就比从硬盘中去出来快了不少;其次cdn服务器知道源站资源发生变化后,会通知其它服务器同时更新资源。
4、cdn的优势
智能dns让用户可以访问同线路最近的服务器
cdn的缓存机制可以加快访问速度,也可以缓解源站服务器压力(因为根本不会去访问源站)
cdn让大规模的用户请求架构变得简单
cdn性价比高,同带宽需求下cdn服务比增加带宽划算
5、cdn适用范围
静态和更新频率低的内容
数据流量大的产品
带宽需求大的产品
有钱的主...
其实cdn服务商有不少,如阿里云cdn、腾讯云cdn、百度云cdn、网易云cdn、360cdn等等
网友评论