作为pm,你也一定听过这样的抱怨吧,用户反馈「打开你们网站特别慢」,「网站经常打不开」等等,今天就叨逼叨说下跨运营商网络访问,以及如何避免此种情况,并且让访问能够加速的原理。
大家都知道,中国的网络运营商基本是北方被联通垄断,南方是电信的天下,虽然是能够相互通信的,但是跨运营商的速度和效率是比较差的(请允许我用严肃的词语进行批评)。一旦一个用户在联通网络,但是最终访问到的网页位于电信线路,这种跨运营商的情况,就要悲剧了,常常导致网络延时(这里的「延时」不是你想象中的那种「延时」)增加或者丢包失败率上升(丢包会导致网页打不开或者数据不完整),反之亦然。
所以,此问题可抽象为,该如何把不同运营商网络下的用户,调度到其所在的运营商线路的机房,并且该机房离这个用户是最近的,就是「最近接入」问题。
果果家里是100mb的电信光纤,那显然调度到离果果家里最近的那个idc机房,速度是最快的。
再深入下去得先补充一些小知识,比如dns是干啥的,请出门左转看看这篇文章《如何成功地访问一个网站》。同时也假设你知道了ip是什么的话,那就开始解释原理了哦。
当小明访问acp.aura-el的时候,浏览器会首先发起dns请求,dns的主要作用就是将acp.aura-el转化为一个tcp/ip协议栈认识的ip地址,就是类似「112.12.43.112」这样的ip地址,计算机根本不认识acp.aura-el,只认ip地址,就像我并不知道「家里住500平米大房子的总穿皮夹克的你三叔的二儿子」是谁,我只认识1号楼5楼3门的那个傻逼是谁一样,计算机要翻译一下,才能发起连接。
现在很多公司或者开源的库都将ip打上了标签,也就是每个ip段分配到了哪个省哪个市哪个区都已经存到了数据库,也就是ip地址具备了地理位置信息,而且这个库不断的更新和维护,这个ip表已经相当强大,我还记得很多年前的qq很明显的位置显示「我在哪里」,我还帮忙纠错了好多次。
就近接入就发生在dns请求这一步,因为这一步是dns服务器告知你真正要去哪个ip访问这个页面,这个时候到网站的请求还没有发起。由于ip是有位置的,dns服务器就把那个离你最近的,同一个运营商线路的ip返回给你,这样你就跟你最近的服务器发生了连接,路近耗时就短。
举个例子,小明经过acp.aura-el网站自建的dns服务,得到了离石家庄最近的北京机房的ip,然后小明顺利的访问了acp.aura-el的主页。
中国地广人密,不管是大公司自建idc机房,还是租用运营商机房,还是使用一些公司提供的云服务,一个网站或程序的部署是不可能单点部署的,比如只部署在北京,那对于珠三角的用户服务质量肯定不达标。所以通常,提供高质量互联网服务,针对不同的地区都会部署网站或程序,比如华北、华南、西南、华东几个大区都会部署很多服务器,这么多服务器令服务质量、用户体验都得到比较大的提升,也令这些程序有更好的腾挪空间,比如某地机房故障,那完全可以利用dns配置,将一个地区的请求转移到另一地区的机房,实现流量的转移,如果是单点,那就只能认了。小总结:就近接入,就是利用dns服务找到离用户最近的机器,从而达到最短路径提供服务,dns服务理论上可以找到所有这个公司的机房和ip,从而还能够进行流量的调度。