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

相关推荐
江畔柳前堤5 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
nxb5566 小时前
haproxy算法,ip透传,自定义haproxy错误页面
运维·服务器
陈随易7 小时前
moon,apt和yum之外linux系统命令安装新选择
前端·后端·程序员
AKAMAI7 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
码事漫谈8 小时前
当单库日增 4.5TB,异构实时同步还能稳得住吗?
后端
Dxy12393102168 小时前
Linux 编译安装 Python 3.12.10(多版本共存,不破坏系统Python)
linux·运维·python
技术深耕者9 小时前
AI Agent从演示到生产:企业进入“自动化层”时代
运维·人工智能·自动化
IT_陈寒10 小时前
SpringBoot自动配置的坑,这次真踩疼我了
前端·人工智能·后端
shengjk110 小时前
AI Engineering 五代演进史:Prompt、RAG、Agent 到 Graph 的架构革命
后端
子兮曰10 小时前
AI 浏览器 Agent 的安全困局:当自动化工具可以偷走你的登录态
前端·人工智能·后端