作者:来自 vivo 互联网运维团队- Zhang Qianqian
在信息时代,用户的手机应用访问量日益增多,DNS 解析作为连接互联网的关键环节,也被提出了更高要求。这一背景下,HTTPDNS 域名解析服务凭借防劫持、精准调度、实时解析生效等特性,逐渐成为行业主流解决方案。我们构建了 vivo HTTPDNS 端到端的一体化解决方案,通过对 HTTPDNS SDK、HTTPDNS 服务端、统一调度网关和全链路监控4大模块的能力及架构优化,显著提升了端侧业务的访问体验,支撑业务高效、稳定开展。
一、vivo HTTPDNS 技术背景
1.1 为什么要建设 vivo HTTPDNS 端到端一体化解决方案
伴随业务的高速发展,应用的访问量也越来越大;用户对手机终端应用的访问体验的要求也越来越高。但是我们在访问互联网业务的过程中可能会出现访问被劫持到非法的资源;访问的资源无法正常展示;资源打开比较慢,用户等待的时间比较长;运营商的 DNS 解析不精准,影响用户访问的体验;想要解决以上的问题,行业比较通用的方案是使用 HTTPDNS。
vivo HTTPDNS 平台为业务提供一体化的 HTTPDNS 解决方案,整体架构主要包括四大模块;分别是 HTTPDNS SDK,HTTPDNS 服务端、统一调度网关和全链路监控。
HTTPDNS SDK 主要提供 DNS 解析和业务建连优化;
HTTPDNS 服务端提供 HTTPDNS 高性能 API、缓存库、代理网关等能力;
HTTPDNS 调度网关提供 DNS 解析策略和 DNS 调度能力;
统一监控提供客户端监控、服务端监控、质量监控、地域监控等能力。
基于 HTTPDNS 平台能力,我们核心的流程是 vivo 手机应用集成 HTTPDNS SDK,SDK 首先向 HTTPDNS 调度网关请求获取 DNS 策略等配置;获取配置后向首选 DNS 发起域名解析,当首选 DNS 出现解析失败、建连失败、域名封禁、域名劫持等问题时向备选 DNS 发起域名解析请求,获取正确的解决结果,发起建连请求,同时也会对解析的结果进行缓存与建连优化。
2.2 HTTPDNS SDK 优化
二是业务建连优化,通过网络诊断、网速检测、长连接优化、最佳路由、QUIC 建连竞速,提升业务访问的成功率和降低业务访问时延,提升我们 vivo 手机用户的使用体验;
三是统一接入方案,通过调度网关和多网络框架适配,降低业务接入的成本。
2.2.1 域名解析优化
首先介绍在解析策略优化方面的探索;DNS 解析是用户访问 vivo 互联网业务的第一步;传统的 DNS 解析是使用运营商的 LocalDNS 进行域名的解析,在这个过程中经常会出现解析失败或者解析的地址不精准的问题;针对解析失败和解析地址不精准的问题,我们对 DNS 解析的优化主要分为以下三个阶段:
第一个阶段是重试解析策略,DNS 解析失败使用备选 DNS 重试解析;
第二个阶段是自适应解析策略,支持自适应的 DNS 解析失败或者建连失败的重试解析;
第三个阶段是IP优先/兜底策略,基于业务场景的IP优先或者兜底的解析策略。
首先,我们看一下重试解析策略,核心逻辑就是 DNS 解析失败之后切换 DNS 方案重试解析,vivo 目前首选的 DNS 是运营商的 LocalDNS,LocalDNS 解析失败或者解析超时使用 HTTPDNS 重试解析,这样可以在提升解析的成功率的同时极大的降低 HTTPDNS 的使用成本。但是此策略无法解决建连失败的场景;同时,DNS 解析的灵活性比较低,变更策略需要业务升级 SDK。
为了解决以上的问题,我们上线了自适应解析策略;自适应解析策略就是在重试解析策略的基础上增加建连失败的场景下切换 DNS 方案重试解析和建连访问的策略;同时支持动态配置 DNS 策略,可以动态调整首选和备选 DNS,自适应解析策略场景进一步提升了用户的访问成功率;重试解析策略和自适应解析策略上线后,DNS 解析成功率提升2%。
自使用解析策略之后是否可以进一步优化呢?如果备选 DNS 解析或者建连失败我们应该如何处理?针对用户访问时延要求比较高的场景是否可以优化掉 DNS 解析过程呢?
基于以上的问题,我们对解析策略进一步做了优化,针对业务访问时延越短越好的冷启动场景我们使用IP优先的策略,提前动态下发IP地址给客户端建连,优化掉 DNS 解析过程,进一步缩短用户访问的时延;在成功率提升场景我们在备选 DNS 解析失败之后使用IP兜底的策略,动态下发IP地址给业务建连,进一步提升用户访问的成功率。
基于以上的优化方案,IP优先场景 DNS 解析时间下降80%,IP兜底场景业务成功率进一步提升0.2%~0.4%。
在动态缓存策略的基础上,我们做了进一步的优化,提供了乐观缓存的策略;一般情况下,缓存的结果过期之后都还是可以继续使用的;对于解析的结果,如果缓存已经过期,我们乐观判断缓存是有效的,先将缓存返回给客户端建连,再异步发起 DNS 解析并重新缓存;此策略能够进一步降低客户端的 DNS 解析时延,提升用户访问体验。
下面我们介绍在业务建连方面的优化,首先介绍网络诊断的能力,网络诊断的核心原理是通过网络联通质量检测模块,提供网络连通性、认证 WiFi、信号强度、系统联网策略、DNS、 ping 等检测能力;诊断当前用户是否有网,网络类型,网络强度,是否限制联网和访问的域名是否可以 ping 通,为上层应用建连访问优化提供数据支撑。
网络诊断主要使用的场景是为视频播放、浏览器网页访问提供网络检测功能;诊断出用户有网但是无法连接的问题原因;根据问题原因,做出用户提示与问题修复,提升 vivo 手机终端用户的使用体验。
建连优化的第二能力是网速检测,其核心原理是读数据场景对各个请求进行数据统计,计算全局网速以及单个请求的网速,以达到监控网络质量的目的。例如接入方在该时间点想知道近x秒内的全局速度;则可以逆序重组采集到的网络质量数据信息,将此时间段内的多个请求的数据进行分段求和,算出在x秒内传输 y kb 的数据,用数据除以时间则为该时间段内用户的全局网络速度。
网速检测在视频点播场景,可以根据检测的网速对播放视频的清晰度进行智能切换,保证视频播放的流畅度,减少视频播放的卡顿率。
建连优化的第三点是 DNS 最佳路由策略;核心逻辑是对多个 DNS 策略解析的IP地址选择最好的地址发起建连访问。主要的流程是 SDK 将运营商 LocalDNS、HTTPDNS、公共 DNS、IP直连等策略下的 DNS 解析结果进行汇聚;获取对应网络状态下的IP地址,结合历史行为库中网络ID相同的数据;按照访问成功率和访问耗时的智能算法对IP进行排序,对排序后的IP地址依次建连。
使用最佳路由模型能够提升短视频播放的成功率和浏览器网页打开的成功率。
下面我们介绍 vivo HTTPDNS 服务端的架构,HTTPDNS 服务端主要提供高性能 API、缓存库、代理网关等能力;高性能API提供智能解析、鉴权、缓存查询等能力;缓存库提供多级缓存、懒更新等能力;代理网关提供 EDNS、智能调度、IP探测等能力。通过这些能力给 vivo 用户提供高可用,低时延的HTTPDNS 解析服务。同时,也提供 HTTPDNS 管理后台,支持 DNS 管理、系统管理、调度策略管理、鉴权管理、接入管理等能力。
vivo HTTPDNS 平台提供全链路的可视化监控能力;能够监控用户从 DNS 解析到整个请求全部结束的所有阶段的耗时与请求;根据监控可以高效定位网络请求的各个阶段的异常;同时也提供省份运营商维度的区域性监控和异常预警的能力;解决了业务访问链路无监控的难点。根据省份运营商维度的区域性监控,可以针对不同地区的网络访问环境制定对应的优化方案,预警能力能够及时发现异常并及时进行优化。
2.5 HTTPDNS 业务效果
经过以上的优化实践,截止当前,vivo HTTPDNS 平台已经覆盖 vivo 手机100+的业务,HTTPDNS 的解析次数达到了15亿次每天;客户端的解析时延由平均180ms下降到115ms,下降幅度36%,优化效果显著;服务端解析成功率达到99.5%,给业务提供稳定可靠的解析服务;服务端响应时间约4ms,达到行业领先水平;服务端缓存命中率达到90%,降低 HTTPDNS 的成本的同时缩短 DNS 解析的响应时间。
在成功率提升方面,DNS 解析成功率由优化前的97%提升到优化后的99.85%,基本解决了全部 DNS 相关的问题;客户端访问成功率也由优化前的97%提升到优化后的99%,优化效果显著,经过优化,vivo 终端应用的用户体验有非常明显的提升。
在防劫持方面, 2023年2月 i音乐域名某地区被劫持,通过监控发现域名被劫持到国外地址;vivo HTTPDNS 平台监控发现域名使用 HTTPDNS 解析正常,域名成功率和连通率均正常;CDN 监控业务流量正常,未出现任何异常。
在域名误封禁方面, 2023年4月 .com.cn 根域在某地区电信&移动网络下被误封禁,DNS 解析地址返回127.0.0.1;vivo浏览器、短视频等接入 vivo HTTPDNS 平台业务未受到影响,提升了 vivo 服务的可用性、品牌形象和口碑。
以上就是 vivo HTTPDNS 平台的探索和实践,以及业务接入之后的具体表现。
三、vivo HTTPDNS 总结与展望