HTTPDNS:畅享游戏的无障碍之道

一、 理解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发生劫持时:

  1. 域名缓存

DNS服务器递归解析,每层都有自己的缓存,且每个dns服务的缓存时间我们没办法控制,一般是几分钟,但是有些是一个小时甚至几天

此时我们游戏服务器出问题时,需要切换游戏入口ip时生效时间就会比较长,导致故障放大

  1. 解析转发

运营商的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%,所有的业务请求成功率上涨了02~0.5%,实实在在的提升了37手游用户的游戏体验。 最后,再附上37手游的Slogan: "创新点亮梦想,分享成就未来,相信创造奇迹"

此文章来自于37手游------罗东就

相关推荐
2401_8581205315 分钟前
古典舞在线交流平台:SpringBoot设计与实现详解
java·spring boot·后端
IChen.16 分钟前
解决centos 删除文件后但空间没有释放
linux·运维·centos
赐你岁月如歌27 分钟前
如何使用ssm实现基于web的网站的设计与实现+vue
java·后端·ssm
多恩Stone1 小时前
【vs code(cursor) ssh连不上服务器】但是 Terminal 可以连上,问题解决 ✅
运维·服务器·ssh
S hh1 小时前
【Linux 】文件描述符fd、重定向、缓冲区(超详解)
linux·运维·服务器
碳治郎AI1 小时前
Bolt.new:终极自动化编程工具
运维·自动化
朝九晚五ฺ2 小时前
【Linux探索学习】第三弹——Linux的基础指令(下)——开启新篇章的大门
linux·运维·学习
潘多编程2 小时前
Spring Boot微服务架构设计与实战
spring boot·后端·微服务
2402_857589362 小时前
新闻推荐系统:Spring Boot框架详解
java·spring boot·后端
2401_857622663 小时前
新闻推荐系统:Spring Boot的可扩展性
java·spring boot·后端