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手游------罗东就

相关推荐
山顶望月17 分钟前
ISO20000与IT运维和运营的关系
运维·it运营·iso20000
小沈同学呀2 小时前
创建一个Spring Boot Starter风格的Basic认证SDK
java·spring boot·后端
杰锅就是爱情2 小时前
OpenObserve Ubuntu部署
linux·运维·ubuntu
lllsure3 小时前
【Docker】容器
运维·docker·容器
方圆想当图灵4 小时前
如何让百万 QPS 下的服务更高效?
分布式·后端
凤山老林5 小时前
SpringBoot 轻量级一站式日志可视化与JVM监控
jvm·spring boot·后端
凡梦千华5 小时前
Django时区感知
后端·python·django
Jtti5 小时前
新加坡服务器连接速度变慢应该做哪些检查
运维·服务器
huangjiazhi_5 小时前
在Linux上无法访问usb视频设备
linux·运维·服务器
xixingzhe25 小时前
jenkins脚本触发部署
运维·jenkins