IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> HTTPDNS -> 正文阅读

[系统运维]HTTPDNS

HTTPDNS

传统DNS存在的问题

1.域名缓存问题

服务商为了节约流量计算的成本,会将一些经常访问的域名以及IP的映射在本地进行缓存。当有其它相同的请求时,会直接返回这个缓存数据。

另外,有的运营商会把一些静态页面,缓存在本运营商的服务器中,这样用户的请求就不用再通过其它运营商的服务器访问静态资源。在域名解析的时候,不会将用户导向真正的网站,而是指向这个缓存的服务器。

这些缓存都存在更新不及时问题,导致无法获取最新的数据,第一种情况还可能会导致全局负载均衡失败。

2.域名转发问题

假如你是运营商A的客户,当你发送请求到运营商A,A却将请求转发给运营商B,然后B去解析,然后返回一个在B运营商的网站地址。这样就会导致你每次访问都要跨运营商,速度就会很慢。

运营商转发用户请求可能会导致每次客户访问的时候都要跨运营商,速度就会很慢。

3.出口NAT问题

在局域网中的机器使用NAT地址转换访问外部网络时,权威的DNS服务器无法通过转换地址来判断客户端到底是来自哪个运营商,并且可能会导致误判运营商,导致跨运营商的访问。

4.域名更新问题

有的本地DNS服务器会忽略域名解析结果的TTL时间限制,在权威DNS服务器解析变更的时候,可能会导致解析结果在全网生效的周期非常漫长。

例如,双机房部署的时候,跨机房的负载均衡和容灾多使用DNS来做。当一个机房出问题之后,需要修改权威DNS,将域名指向新的IP地址,但是如果更新太慢,那很多用户都会出现访问异常。

5.解析延迟问题

DNS的查询过程需要本地DNS服务器迭代遍历多个DNS服务器,才能获得最终的解析结果,这会带来一定的时延,甚至会解析超时。

其实归结起来就是两大问题。一是解析速度和更新速度的平衡问题,二是智能调度的问题,对应的解决方案是HTTPDNS的缓存设计调度设计

HTTPDNS的工作模式

HTTPNDS其实就是,不走传统的DNS解析,而是自己搭建基于HTTP协议的DNS服务器集群,分布在多个地点和多个运营商。当客户端需要DNS解析的时候,直接通过HTTP协议进行请求这个服务器集群,得到就近的地址。

HTTPDNS主要适用于手机APP解析域名,因为它必须要通过客户端SDK去实现。

大致流程

  • 获取HTTPDNS服务器IP(这个IP一般不会变,可以在客户端写死。也可以通过传统DNS方式获取IP):在客户端的SDK里动态请求服务端,获取HTTPDNS服务器的IP列表,缓存到本地。随着不断地解析域名,SDK也会在本地缓存DNS域名解析的结果。

  • HTTPDNS服务器解析域名:如果本地没有相同的请求,就需要请求HTTPDNS的服务器,在本地HTTPDNS服务器的IP列表中,选择一个发出HTTP的请求,会返回一个要访问的网站的IP列表。

    请求的方式是这样的。

curl http://106.2.xxx.xxx/d?dn=c.m.163.com
{"dns":[{"host":"c.m.163.com","ips":["223.252.199.12"],"ttl":300,"http2":0}],"client":{"ip":"106.2.81.50","line":269692944}}
  • HTTPDNS服务器进行负载均衡:手机客户端自然知道手机在哪个运营商、哪个地址。由于是直接的HTTP通信,HTTPDNS服务器能够准确知道这些信息,因而可以做精准的全局负载均衡。
  • 客户端访问目标IP:客户端拿到最优IP后,就去访问对应的应用服务器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-osRGYIPA-1662859878231)(C:\Users\25405\AppData\Roaming\Typora\typora-user-images\image-20220911090634045.png)]

当然,当所有这些都不工作的时候,可以切换到传统的LocalDNS来解析。

HTTPDNS的缓存设计

HTTPDNS就是将解析速度和更新速度全部由客户端SDK控制:

  • 一方面,解析的过程,不需要本地DNS服务递归的调用一大圈,一个HTTP的请求直接搞定,要实时更新的时候,马上就能起作用;
  • 另一方面为了提高解析速度,本地也有缓存,缓存是在客户端SDK维护的,过期时间、更新时间,都可以自己控制。

HTTPDNS的缓存设计策略分为客户端、缓存、数据源三层。

也就是手机客户端、DNS缓存、HTTPDNS服务器。

解析可以同步进行,也就是直接调用HTTPDNS的接口,返回最新的记录,更新缓存;也可以异步进行,添加一个解析任务到后台,由后台任务调用HTTPDNS的接口。

更新也可以使用同步更新优点是实时性好,缺点是如果有多个请求都发现过期的时候,同时会请求HTTPDNS多次,其实是一种浪费;也可以使用异步更新,可以将多个请求都发现过期的情况,合并为一个对于HTTPDNS的请求任务,只执行一次,减少HTTPDNS的压力。同时也可以进行缓存的预加载。

HTTPDNS的调度设计

客户端嵌入了SDK,因而就不会因为本地DNS的各种缓存、转发、NAT,让权威DNS服务器误会客户端所在的位置和运营商,而可以很方便的拿到客户端的真实信息。

客户端:可以知道手机的地址、服务商等信息,HTTPDNS服务端可以根据这些信息,选择最佳的服务节点返回。

如果服务端返回多个IP,就需要客户端使用HTTPDNS返回的IP访问业务应用。客户端的SDK会收集网络请求数据,如错误率、请求时间等网络请求质量数据,并发送到统计后台,进行分析、聚合,以此查看不同的IP的服务质量。并选择最优IP进行访问。

服务端:应用可以通过调用HTTPDNS的管理接口,配置不同服务质量的优先级、权重。HTTPDNS会根据这些策略综合地理位置和线路状况算出一个排序,优先访问当前那些优质的、时延低的IP地址。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FiaaUoNf-1662859878233)(C:\Users\25405\AppData\Roaming\Typora\typora-user-images\image-20220911092755615.png)]

参考:极客时间《趣谈网络协议》

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:56:34  更:2022-09-13 11:57:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:06:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码