前言
这是一个新的系列,小老鼠尝试把各种乱七八糟的技术问题当成故事去讲,不知道会不会有同学爱听。最后会埋下一个扣子,做个收费,价格一块钱,愿者上钩。
本系列会用讲故事的方式去聊一些技术问题,希望能够让对这些技术不了解的朋友,也能够读懂。所以如果你本身了解这些技术,就无需再阅读了。
本篇末尾有 44% 的内容被隐藏,需付费阅读。
请在阅读前确认你了解并理解了上述内容,以上,防杠
如果常逛互联网,应该肯定听到过 CDN 这个名字,那么这玩意儿有什么用呢?继续来听老鼠讲故事。
小老鼠喜欢在京东购物,一方面确实是条件限制,只有他家的物流能够送到家门口这些事情我应该说过好多次了。另一方面就是他家的速度真的快呀,上午下单,下午送到,这体验也没谁了。
那为什么速度能够做到这么快呢?因为他在全国各地都有仓库,最开始是大城市,比如北京啊,上海啊。周边的地方需要时就在最近的仓库发货。比如河北地区,就从北京的仓库发货,这样一天就可以送到了。那如果是在苏州,可能就从上海的仓库发货,也是一天就到了。这比传统的,无论你是在哪里购买,都是从商家那里直接发货,速度要提升了不少。我们可以理解为商家先对销售情况进行一个预估,比如在北京附近可能会销售 1000 件,那就先运过来 1000 件,就提前完成了货物从商家到北京这一段儿的运输,等周边人群购买的时候,就直接从北京运过去。那么相对于消费者,前面那一段的运输时间就被节省下来了(购物之前就完成了)。
现在京东很给力,在稍微大一些的城市都有本地仓库。日常用品,就是他估计着本地肯定有人会购买,而且销量比较大的东西在本地仓库都有。这样距离就更近了,所以上午下单,下午就可以送到家里。这么方便,真的连小卖部都不想去了呢。
那这和 CDN 又有什么关系呢?
我们知道我们访问网站时其实就是和网站去请求相关的网页文件。浏览器和网站说:我家用户要看那篇稻米鼠写的内容。网站说:好啊,好啊,内容在这里呢~于是浏览器就带着这些内容回来了,但他不能直接将这些代码展示给你啊,毕竟谁也不想整天去阅读代码不是。所以浏览器就要对这些代码进行解释。他先去读这些代码,弄懂了意思,然后再绘声绘色的讲给你。结果他这一读发现问题了。这篇文章里面有 28 张图片,显然这图片也得展示给你看呀,于是浏览器又颠儿蹦颠儿蹦的去找网站,那个我需要一些图片,这里是列表请按着这个单子给我准备好。然后拿到图片又颠儿蹦颠儿蹦的回来,将图片展示给你。但其实一个网页需要用到的资源并不只是图片,他还可能要引入许多用来实现各种功能的文件,比如说样式文件,比如说控制交互的 JS 文件……
虽然你的浏览器颠儿嘣嘣儿嘣的往返,在你和网站之间进行沟通,不知疲倦。但你的感受可能是——有点慢。这就好像你做点什么事情缺啥少啥都可以买,但是每次都到网上跟商家订货,然后等着货从商家那里发过来。事情当然是可以解决,但是等待的时间可能有点长。
然后你懂了,如果不是直接从商家那里发货,而是像京东这样,那等待的时间就可以大大的缩短,我的工作就可以尽快的完成。那现在访问网页也是同样的道理。
你看我这张图片,它是我这个网站的 logo,显然在每一个页面中都会显示,我又不可能闲着没事每天去修改这个 logo。那如果把它放在全国各地的服务器上,当你需要这张图片的时候,就从距离你最近的那个服务器上获取,等待的时间是不是就可以缩短一点?那其他的文件也类似处理。
这里有一个优势,就是文件并不是实物,所以它可以无限的复制。货物的话我们还要考虑数量的分配,而数据的话,就可以轻松的在每一个服务器上都复制一份。
那这些用来加速访问的服务器就叫做 CDN,就类似于京东遍布全国的货仓。现在我的网站有一批数据,然后分析一下不容易发生变化的,而用户又高频率需要使用的,就放在 CDN 上。你再访问网站的时候,可能并没有真正访问到我的网站,而是直接从就近的 CDN 上获取需要的数据。而网页如果说需要图片等文件,也会直接分配到最近的 CDN 服务器上。
我们把问题想的极端一点,我家隔壁就是一台 CDN 服务器,那我访问他上面的数据,和隔壁小明给我把他电脑上的文件传过来的意思差不多。虽然网络的传输速度和物理距离关系并不大,但是物理距离越近,意味着可能的影响因素越少。CDN 服务器也都会接入各家网络运营商以便让各种网络下的访问速度都能够做到更好。
很显然这需要大量的服务器,而且越多越好,分布的越广泛越好,这些服务器使用的网络质量越好越好……这显然不是一般网站就可以自己弄得了的。不过许多大公司都会做这种服务,然后当然是会收费的。但这总要比自己搭建简单太多了,付费提升体验也是很合理的。当然这都是网站去付费,作为普通用户,我们乖乖的享受就行了。
至此,世界很美好。
但问题还是存在的,就比如你那里的网络有一些奇怪,导致将你的地理位置识别错了,明明你在北京结果给你识别成了东京,于是分配了日本的一台 CDN 服务器供你访问,这就真的是舍近求远,南辕北辙了。又或者,像我这样的个人,没有雄厚的财力,只觉得白嫖很香,所以就找了一些免费服务来用。他只提供了三五台服务器用作 CDN,想想世界这么大,这带来的效果并不明显,甚至很容易产生负面的优化。又或者人家本来就是外国的网站,用了 CDN,是外国的服务器,所以在国内访问就很难获得一个加速的体验。
所以在大多数情况下都很美好,但是在个别的小问题上会让人闹心。那有没有办法解决一下呢?
彻底解决是不可能的,但是缓解的方法是有一些的:
【剩余 44% 的内容请至此处阅读: https://mp.weixin.qq.com/s/Ucgarzas768Mnwi6aOYwzw (需付费)】
或用微信扫描下方二维码。