前言
通过分布式系统 - DNS域名设计与实践(上)我们了解:
- DNS的含义和域名解析流程
- DNS协议
- DNS应用场景
- DNS劫持原因分析
- 如何快速检测是否被劫持与商务解决方案
今天我们主要介绍:
- 如何通过技术手段解决DNS域名劫持
- DNS的配置策略与应用
- CDN系统的技术分析与应用实践
DNS优化方案
- 客户端直连IP
用户直接通过ip访问到服务端,绕过DNS解析。
实现方式:
服务节点拓展后需要更新客户端的服务器节点ip文件,客户端通过http拉取服务器IP列表。可以通过版本号判断是否更新服务器节点ip文件
方案优点:
- 不需要每次请求做DNS解析,节省时间
- 不需要每次请求做nginx转发,节省时间
- 不需要每次拉取ip-list,节省流量
- DNS被劫持时仍可以使用本地ip
ps:获取服务器列表时,此时dns已经被劫持,通过http拉取,这里还得通过dns解析吗?
- 使用HttpDNS
实现原理:绕过DNS协议请求,解决运营Local DNS劫持;将UPD协议->HTTP协议即用80端口取代53端口
实现方式:
通过访问HttpDNS接口,绕过LocalDNS,同时基于容灾考虑,保留次选使用运营商LocalDNS的域名解析方式。客户端使用获取到的IP地址,法师业务协议请求。
方案优点:
- 根治域名解析异常
- HttpDNS能直接获取到用户IP
- 拓展性强,可实现更精细化的流量调度
阿里云、腾讯云、百度云、新浪等都有HttpDNS
综上,高可用的DNS设计,应用方面可用HttpDNS和基于IP地址直连。同时监控治理加强,进行实时监控,发现问题后及时推动解决。
DNS配置策略与应用
- 业务域名使用CNAME
- 配置一条A记录指向最终IP(A记录域名指向CNAME)
配置CNAME可以是多个域名对应一个IP,同时也方便接人CDN
域名配置策略基本应用
如下图,www.baidu.com. 配置业务域名www.com的CNAME记录。
通过CNAME配置A记录,指向最终的真实IP
域名配置策略高级应用
- 异地多中心隔离
普通域名解析是通过DNS轮询,即每次请求对应的IP不一样,这样可能会由于跨网或者跨地区导致访问速度慢,体验较差的结果。我们更希望的是域名可能就近解析,即将用户请求定向到最近节点。那么就需要GSLB.
全局负载均衡(GSLB): 对服务器和链路进行综合判断来决定由哪个地点的服务来提供服务,实现异地服务器集群服务质量保证。
关键技术点
- 将用户请求定向到最近节点
- 就近性判断
- 更加服务器的负载
下图中通过Local DNS可以判断检测与数据中心的联通性,连接那个快则就用那个
基于以上场景的解决方案为智能DNS。
- 智能DNS: 除了具备基本的DNS解析功能外,还可以自动识别DNS请求发送者来源,并将域名智能解析到不同IDC中的IP.
主要功能: 监控检查、调度策略、保证资源高可用
可选产品和方案:
DNSPod、GTM(Global Traffic Manager)、阿里智能解析等 - 智能解析原理
- 智能解析域名
- 近性表项
- 返回延时(Round Trip Time)
- 返回响应最快的站点
具体描述:如下图ww.xx.com首先访问Local DNS,查看 本地近性表项是否有解析过ip,如有直接返回。若没有向DNS服务器发起探测,比较RTT值,RTT小的认为是比较快的返回。
- 智能DNS应用:
如下图:CNAME配置CDN域名,真实IP由CDN返回
CDN系统技术分析与实践
CDN(Content Delivery Network):
内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负 载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和 命中率。
CDN原理:
- 当终端用户(北京)向www.a.com下的某资源发起请求时,首先向Local DNS(本地DNS)发起域名解析请求。
- Local DNS检查缓存中是否有www.a.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。
- 当授权DNS解析www.a.com时,返回域名CNAME www.a.tbcdn.com对应IP地址。
域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。 - Local DNS获取DNS返回的解析IP地址。
- 用户获取解析IP地址。
- 用户向获取的IP地址发起对该资源的访问请求。
- 如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,例如,图中步骤7和8,请求结束。
- 如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点,例如,图中的北京节点,并返回给用户,请求结束。
CDN网络拓扑图:
用户通过智能解析,获得最近或者最搞笑的访问边缘节点集群
引入CDN优点
- 改善访问体验
- 减轻服务器压力
- 预防单点(单机房带来的单点问题)
- 解决突发流量的问题
- 合理利用互联网资源
- 解决网络互联互通
CDN适合缓存哪些数据?
页面、图片、流媒体、样式脚本等
CDN专业术语
- 回源:
当有用户访问某一个URL的时候,如果被解析到的那个CDN节点没有缓存响应内容或者缓存已经过期,就会回源站去获取(CDN产会收费回源流量费) - 回源域名
采用回源域名方式进行回源,解决源站IP变更问题 - CDN回源率
回源请求数比:指边缘节点对于没有缓存、缓存过期(可缓存)和不可缓存的请求占全部请求记录的比例。越低则性能越好。
回源流量比:回源流量是回源请求文件大小产生的流量和请求本身产生的流量。所以回源流量比=回源流量/(回源流量+用户请求访问的流量),比值越低,性能越好。 - CDN产品的衡量指标可参考阿里云-CDN的衡量指标
CDN系统技术分析
-
内容路由:将用户的请求分配到CDN中的最佳节点
通过DNS全局负载均衡找到响应最快的边缘节点集群
通过本地负载均衡(LLB)找到边缘节点集群中最好的节点
可以通过节点探测和应用层与传输层实现重定向来实现内容路由 -
内容分发:源内容到CDN节点的Cache过程
PUSH: 热点数据通过主动分发
PULL::用户请求按需分发
这里需要考虑回源问题,可以通过缓存时间、URL设计、缓存预热等方式优化解决 -
内容存储
源站存储:由于访问量大,可以用OSS或者其他分布式存储。同样需要合理设计注意流量费用问题
CDN节点存储:
需要考量存储支持的 数据格式、缓存命中率、可靠性、稳定性等方面;流媒体可以通过分片拉取 -
内容管理
本地内容索引
本地内容拷贝
本地内容访问状态信息收集
使用CDN数据一致性和高可用保障
- 合理设计缓存失效时间
- 设置数据版本号,
- 主动分发,避免数据不一致性问题
- 错峰发布和版本号控制提高系统高可用性