一、 理解HTTPDNS的概念和优势
1.1 DNS是什么
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
因特网上的节点都可以用IP地址唯一标识,并且可以通过IP(ipv4,ipv6)地址被访问
但是IP地址太难记
因此,人们发明了域名(Domain Name),域名可将一个IP地址关联到一组有意义的字符上去。用户访问一个网站的时候,既可以输入该网站的IP地址,也可以输入其域名,对访问而言,两者是等价的
1.2 DNS域名解析过程
● 当一个客户端要访问www.37.com.cn时,需要将域名转为ip,所以请求本地DNS解析器。
● 本地DNS解析器查看是否有本地缓存这个记录,如果有则直接使用
● 如果没有,请求本地的DNS服务器。
● 本地的DNS服务器一般部署在你的数据中心或所在运营商的网络中,本地DNS服务器需要查看本地是否有缓存,如果有则返回。
● 若无,本地DNS需要递归的从根DNS服务器,查到顶级域名服务器,最终查到权威DNS服务器,返回给本地DNS服务器。
1.3 DNS存在的问题
1. 域名劫持
DNS域名劫持,就是通过破化DNS查询过程来阻止用户获取可靠的IP地址,比如A网站的IP是A,B网站的IP是B,那假如你输入的A网站域名,但是他给你B的IP,出现dns劫持的原因有很多:1. 客户端被入侵,修改了dns服务器配置 2. 更改了路由器的dns配置 3. local dns服务被入侵
正常解析过程:
DNS发生劫持时:
2. 域名缓存
DNS服务器递归解析,每层都有自己的缓存,且每个dns服务的缓存时间我们没办法控制,一般是几分钟,但是有些是一个小时甚至几天
此时我们游戏服务器出问题时,需要切换游戏入口ip时生效时间就会比较长,导致故障放大
3. 解析转发
运营商的LocalDNS还存在解析转发的现象。解析转发是指运营商自身不进行域名递归解析,而是把域名解析请求转发到其它运营商的递归DNS上的行为,此时可能会导致解析返回的ip不是最近的入口ip,导致游戏的请求访问速度变慢。
1.4 HTTPDNS的优势
HTTPDNS(HTTPS DNS)是一种通过HTTP协议(或者HTTPS协议)进行域名解析的技术。它是一种替代传统DNS(Domain Name System)的解析方式。传统的DNS解析是通过传输控制协议(TCP)或用户数据报协议(UDP)进行,而HTTPDNS则使用HTTP协议与DNS服务器进行通信,将域名解析为IP地址。
使用HTTPDNS的优势:
1. 解析准确性:HTTPDNS可以根据客户端的地理位置和网络环境来选择最佳的DNS服务器,从而提供更准确的域名解析结果。这有助于避免由于网络延迟和DNS缓存导致的错误解析。
2. 抗域名劫持:传统的DNS解析容易受到域名劫持的影响,导致用户被重定向到恶意或非法的网站。而HTTPDNS使用HTTPS加密通信,可以有效防止域名劫持,提高用户的网络安全性。
3. 高速响应:HTTPDNS将DNS解析过程与HTTP通信结合在一起,减少了整个请求过程中的延迟。同时,它可以利用CDN技术将DNS解析结果缓存在本地,提高用户的访问速度和体验。
4. 配置灵活性:HTTPDNS的解析结果可以根据用户的需求进行动态修改,以满足不同场景下的特殊需求。例如,可以根据用户位置选择最近的服务器,或者根据网络条件选择最快的IP地址。
二、HTTPDNS如何在37手游中落地
2.1 HTTPDNS服务端设计
37手游的HTTPDNS主要由三个模块组成
1. web模块,负责处理客户端单域名解析请求,多域名解析请求等 通过服务内存缓存,redis缓存等两层缓存,做到了单pod(1核1G规格)可承受2千的qps(压测数据),且p99小于15ms
2. 同步模块,负责定时同步腾讯云DNSPOD的解析记录,并存储到数据库,记录变更信息到日志表且同步变更记录到企业微信群。
3. 后台模块,主要由应用管理,域名解析管理,sdk 功能配置管理。
2.2 客户端网络请求流程
我们的设计目标是无论手游的httpdns出现任何故障,都不影响游戏的正常激活与登录,因此我们在客户端做了一套完善的请求设计,既能保证httpdns发挥它应有的价值,也能保证当httpdns服务端出现问题时,玩家在游戏正常的激活/注册行为完全无影响
这个请求流程主要有几大特点:
● 异步
● 懒加载
● 降级
● 全局开关
● 合理超时
● 激活预解析
2.3 配置选择与预解析策略
1. app启动,会异步去获取httpdns服务的配置,比如功能开关、降级策略、ipv6解析等
2. 接口下发会下发接下来要用到的域名,可提前批量预解析,刷新 ip 列表缓存,后续访问就可跳过域名解析过程,加快手游玩家的激活/登录速度。
三、 使用HTTPDNS的注意事项和建议
3.1 根据用户所在的不同地区返回就近ip
37手游旗下拥有多款知名的游戏产品,覆盖国内和海外市场,所以我们的玩家也算是遍布全球,因此我们需要根据用户的地区访问就近的一个入口IP,提升玩家网络连接质量和体验的游戏体验。那HTTPDNS是如何实现此功能的呢? 方式就是 1. 获取客户端的client ip 2. 根据client ip分析出用户的地理位置 3. 在从我们的入口ip库中查找出离此地位位置最近的入口IP返回给客户端 测试效果:
3.2 HTTPS下出现SNI场景
使用IP直连时,在https下,手游大部分为SNI场景(一个IP存在多个https证书),如何告诉服务端返回哪个证书 https 证书校验过程:
● 需要在第1步的发送client hello报文时,额外设置server name为域名,这样子服务端才能根据此信息返回对应的证书
● 在第5步证书校验时需要把ip替换回对应的域名去验证证书,此时才能完成正常的https证书校验
四、总结
目前手游智能DNS(HTTPDNS)功能已经覆盖的37手游的所有安卓与IOS游戏包,覆盖了游戏发行的所有业务场景,网页的webview场景,协助37手游解决了多起地区的域名劫持事故。 上线后,客户端的域名解析失败报错减少了99%,所有的业务请求成功率上涨了0.2~0.5%,实实在在的提升了37手游用户的游戏体验。
最后,再附上37手游的Slogan: “创新点亮梦想,分享成就未来,相信创造奇迹”
此文章来自于37手游——罗东就