题记:世间最远的距离,莫过于服务就在面前,我却访问不到你。
众所周知,服务的可用性是衡量一个平台好坏和增加用户黏度的一个重要指标之一,为了保证服务高可用,我们设计了很多高可用的框架(集群)来保证当出现单点故障时,仍然可以提供正常或者部分有损的服务。如何设计一个高可用的应用框架,有很多方法和专门的文章,这里就不加赘述,今天主要想和大家分享一下,从服务的用户到高可用的应用之间如何保证高可用,如何让用户走一条最优的路到达服务之中。
当今,网络的通讯大部分都采用TCP/IP协议,而TCP/IP协议是基于IP地址的,所以计算机网络通讯上只能采用类似“121.11.**.**”类似的地址,这很不方便记忆,所以产生dns机制进行域名解析,用户在访问一个网站服务时,一般过程如下:
由于这种方式成本很低,所以绝大多数中小型网站都采用,但这种方式最主要有以下两个问题:
访问单点,如果“121.11.**.**”所在的服务器集群坏了,或者到这个IDC机房的线路出问题了,那么只能切IP或者切线路,而在切换过程中由于有TTL的存在,会在一定时间内影响用户的访问。
无法做到访问最优,比如难以按照运营商进行访问,比如电信用户访问到电信,联通用户访问到联通等,也无法按照线路繁忙程度选择一个最优的线路。
基于以上的两个问题,我们对传统的访问方式做一些优化,它们分别是智能DNS,智能路由,CDN多点接入,以及GSLB。
现在很多DNS运营上都支持这种方式即在同一主机添加多条A记录,即DNS轮询,DNS服务器将按照A记录添加的顺序随机分配服务器的IP给用户,可以做到按照运营商制定策略,比如联通用户访问到联通,电信访问到电信,做到简单的负载均衡,如下图:
(图片来自网络,侵权请告知)
智能DNS基本上不用付出什么成本,就可以部分解决上面两个问题,但这种解决方案不是最优的方案,它有以下两个致命的缺陷:
它未解决TTL时间的问题。
负载策略过于简单,均衡性差,比如无法做到按地区分发。
智能路由是增强负载策略的一种方案,它其实不是基于DNS访问的,所以不太适合一级域名的方案,比较适合移动APP或者应用内部之间的调用,它的原理如下图:
其中访问策略可以灵活地定制,比如按照入口的探测响应时间,应用繁忙度,地域等,但这种方案也有如下弊端:
对应用有一定的侵入,开发写的代码需要做一定的改造。
PC端服务域名访问不太适合。
策略设置难度大,容易出现封堵的现象。
实际上这个是基于CDN厂商的路由优化的一种方案,首先在DNS服务器的域名配置一条C记录指向DNS的策略服务器,DNS返回给用户的实际是CDN的服务器地址,然后利用CDN自身的策略,选择一个用户的最佳入口路由,同时把报文返给CDN服务,再通过最优的出口,最终把内容呈现给用户,它的原理如下:
PS:这里显示的是回源的情况,如果有缓存,则CDN直接返给用户。
这种方案的优点在于无代码侵入,直接利用成熟的方案,缺点如下:
CDN厂商不透明(没有贬义色彩),出现问题无法全链路追踪,导致时间过长。
增加额外的开销(CDN流量)。
剩下最后一种方案GSLB,GSLB在度娘上的解释为:Global Server Load Balance的缩写,意思是全局负载均衡。作用:实现在广域网(包括互联网)上不同地域的服务器间的流量调配,保证使用最佳的服务器服务离自己最近的客户,从而确保访问质量。
它也要在DNS服务器上配置一些C记录GTM服务器IP,GTM服务器根据预先设定的策略,返回最优的入口地址。
PS:GTM是F5提供的一种设备服务,这里不过多阐述,详细了解可以参加:
唯品会在解决用户到服务之间的高可用和最优路径基本上采用的是最后两种方案。大家可以通过nslookup命令去查看一下你访问的服务采用的是哪种方案,例如:
网宿CDN多点接入的方式(如上图)
GSLB的方式(如上图)
愿天下所有的服务都是稳定的,网上说,没有神灵眷顾的高可用是不靠谱的,愿我会的服务永远有神灵眷顾……
作者介绍 王喜春
毕业于中国人民大学,近十年运维开发经验,先后在YY、唯品会工作。现任唯品会运维开发经理一职,负责整个运维系统的建设,在监控、持续集成和自动化运维领域有较深刻的理解。
经平台及作者同意授权转载
来源:唯技术 订阅号
如果字段的最大可能长度超过255字节,那么长度值可能…
只能说作者太用心了,优秀
感谢详解
一般干个7-8年(即30岁左右),能做到年入40w-50w;有…
230721