vivo HTTPDNS 端到端体验优化实践

作者:来自 vivo 互联网运维团队- Zhang Qianqian

在信息时代,用户的手机应用访问量日益增多,DNS 解析作为连接互联网的关键环节,也被提出了更高要求。这一背景下,HTTPDNS 域名解析服务凭借防劫持、精准调度、实时解析生效等特性,逐渐成为行业主流解决方案。我们构建了 vivo HTTPDNS 端到端的一体化解决方案,通过对 HTTPDNS SDK、HTTPDNS 服务端、统一调度网关和全链路监控4大模块的能力及架构优化,显著提升了端侧业务的访问体验,支撑业务高效、稳定开展。

一、vivo HTTPDNS 技术背景

1.1 为什么要建设 vivo HTTPDNS 端到端一体化解决方案

伴随业务的高速发展,应用的访问量也越来越大;用户对手机终端应用的访问体验的要求也越来越高。但是我们在访问互联网业务的过程中可能会出现访问被劫持到非法的资源;访问的资源无法正常展示;资源打开比较慢,用户等待的时间比较长;运营商的 DNS 解析不精准,影响用户访问的体验;想要解决以上的问题,行业比较通用的方案是使用 HTTPDNS。

在这样的背景下,vivo 在2017年开始 HTTPDNS 探索和使用;但是,在落地的过程中遇到以下几个问题:

  • 一是 HTTPDNS 作为备用 DNS 的情况下无法解决域名误封禁的问题;

  • 二是各业务没有统一的接入方案,接入的成本比较高;

  • 三是客户端的网络框架不统一,业务适配比较困难;

  • 四是行业商业化 HTTPDNS 的成本比较高,业务无法大范围使用;

  • 五是缺乏统一的用户全链路监控,无法实时监控端侧 DNS 解析情况。

  • 为了解决以上落地过程中的难题,我们需要建设 vivo HTTPDNS 端到端的一体化解决方案。

1.2 HTTPDNS 如何解决核心问题

建设一套 HTTPDNS 一体化解决方案,解决以上核心问题,助力业务的发展;我们主要从以下几个方面切入:

  • 第一是统一 SDK 能力建设,解决封禁问题、降低业务接入成本、提升用户体验;核心能力主要是域名解析优化,业务建连优化以及统一接入方案;

  • 第二是 HTTPDNS 服务端能力建设,降低业务使用 HTTPDNS 的成本,减小 DNS 访问时延;核心能力是服务端的智能调度和多级缓存策略;

  • 第三是全链路监控能力的建设,实现用户访问的统一监控;核心能力是提供端到端的用户访问全链路的监控能力。

基于以上的建设思路,那下面看我们具体是如何实现的。

二、vivo HTTPDNS 平台实践

2.1 vivo 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 优化

SDK 为我们承载 HTTPDNS 一体化解决方案的核心能力;在架构上主要提供底层网络协议的支持,支持 HTTP1.X、HTTP2.0 和 QUIC 传输协议,同时也支持 TLS1.1、TLS1.2 和 TLS1.3 等加密协议;同时,在 TLS 协议的基础上支持 Session Ticket 等优化策略;服务层提供 DNS 解析、DNS 缓存、业务建连、DNS 策略管控等功能;应用层提供接口、下载、上传等能力;同时也提供全链路的网络监控。

基于 SDK 的能力和使用场景,我们确定了 SDK 三个重点优化方向:

  • 一是域名解析优化,通过解析策略优化和缓存优化,提升 DNS 解析成功率和降低 DNS 解析时延;

  • 二是业务建连优化,通过网络诊断、网速检测、长连接优化、最佳路由、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 解析IP地址进行缓存,缓存时间也是提前设置的固定值;

  • 第二个阶段是动态缓存策略,基于域名加网络信息的缓存策略,不同的网络缓存不同的地址,同时缓存时间支持动态配置;

  • 第三个阶段是乐观缓存的策略,对于解析的结果,如果缓存已经过期,先将结果返回给客户端发起建连,再异步进行 DNS 解析,将异步解析的结果重新进行缓存。

固定缓存策略的核心策略是 DNS 解析之后将解析的结果进行缓存,下次客户端解析直接使用缓存的地址发起建连,以达到减少 DNS 解析时延的优化效果;缓存设置固定的过期时间,缓存过期之后进行 DNS 解析,如果解析成功,则重新进行缓存。此策略主要存在以下几个问题:

  • 第一是用户切换网络会导致缓存的结果出现跨网访问的情况;

  • 第二是缓存时间固定,无法及时对缓存进行干预,出现异常会延长故障时间;

  • 第三是无法针对异常IP缓存进行优化,导致异常的时间较长。

基于以上的问题和痛点,我们实现了动态缓存策略;核心策略是针对缓存跨网、缓存时效性和异常IP缓存进行优化:

  • 针对缓存跨网,缓存中记录用户网络标识信息,使用缓存时需要同时匹配域名加网络标识信息,避免出现缓存跨网的情况。

  • 时效性优化是缓存设置过期时间,过期时间支持动态可配置,提升了缓存的灵活性。

  • 异常IP缓存优化是在用户建连异常是清空对应的缓存,建连异常时切换 DNS 进行重试解析。

基于以上的优化策略,DNS 解析时延整体下降超过30%,优化效果显著。

在动态缓存策略的基础上,我们做了进一步的优化,提供了乐观缓存的策略;一般情况下,缓存的结果过期之后都还是可以继续使用的;对于解析的结果,如果缓存已经过期,我们乐观判断缓存是有效的,先将缓存返回给客户端建连,再异步发起 DNS 解析并重新缓存;此策略能够进一步降低客户端的 DNS 解析时延,提升用户访问体验。

以上就是我们在域名解析优化方面针对域名解析策略和域名缓存逻辑做的探索和实践。

2.2.2 业务建连优化

下面我们介绍在业务建连方面的优化,首先介绍网络诊断的能力,网络诊断的核心原理是通过网络联通质量检测模块,提供网络连通性、认证 WiFi、信号强度、系统联网策略、DNS、 ping 等检测能力;诊断当前用户是否有网,网络类型,网络强度,是否限制联网和访问的域名是否可以 ping 通,为上层应用建连访问优化提供数据支撑。

网络诊断主要使用的场景是为视频播放、浏览器网页访问提供网络检测功能;诊断出用户有网但是无法连接的问题原因;根据问题原因,做出用户提示与问题修复,提升 vivo 手机终端用户的使用体验。

建连优化的第二能力是网速检测,其核心原理是读数据场景对各个请求进行数据统计,计算全局网速以及单个请求的网速,以达到监控网络质量的目的。例如接入方在该时间点想知道近x秒内的全局速度;则可以逆序重组采集到的网络质量数据信息,将此时间段内的多个请求的数据进行分段求和,算出在x秒内传输 y kb 的数据,用数据除以时间则为该时间段内用户的全局网络速度。

网速检测在视频点播场景,可以根据检测的网速对播放视频的清晰度进行智能切换,保证视频播放的流畅度,减少视频播放的卡顿率。

建连优化的第三点是 DNS 最佳路由策略;核心逻辑是对多个 DNS 策略解析的IP地址选择最好的地址发起建连访问。主要的流程是 SDK 将运营商 LocalDNS、HTTPDNS、公共 DNS、IP直连等策略下的 DNS 解析结果进行汇聚;获取对应网络状态下的IP地址,结合历史行为库中网络ID相同的数据;按照访问成功率和访问耗时的智能算法对IP进行排序,对排序后的IP地址依次建连。

使用最佳路由模型能够提升短视频播放的成功率和浏览器网页打开的成功率。

建连优化的第四点是 HTTP2 长连接优化;HTTP2 中的连接复用可以提高网络性能和减少延迟,但在实际应用过程中,也发现了一些缺点,比如在长时间不使用某条连接,此时这条连接就有一定的概率会被网络链路中的设备丢弃,并且部分设备不会按照协议标准通知客户端当前连接已被关闭。这就会导致客户端在下次请求时,依然会去复用连接,但此时由于中间链路或者服务端丢弃了当前链接,因此会出现访问超时异常。

针对以上的问题,我们做了以下优化策略:

  • 第一种是长连接复用的被动检测,当出现长连接超时的异常时,SDK 会强制从缓存池中移除此连接,这样业务重试时,SDK 就会新建连接,避免出现访问超时的异常。

  • 第二种优化策略是长连接复用的主动探测:在连接复用时,同步发起 ping 帧请求,并在2秒后去检查 ping 的结果,如果没有收到 ping 帧且当前连接上近2s内没有数据传输,则主动断开连接并在 sdk 内部进行重试;被动检测需要先产生一次超时异常才会命中相关策略,主动探测也需要先花费2秒进行检测。因此我们需要一种更加智能的方式来判断连接是否复用,以减少异常对业务的时延影响。

  • 第三种优化策略是端侧的智能预测,预测长连接不可用的时间,提前做出是否新建长连接的抉择。

端侧智能预测的核心策略是针对当前生命周期,对用户请求的相关历史数据进行收集,包括网络类型、请求时间、请求域名、连接空闲时间和异常信息等;根据历史请求数据,不断缩小可能出现复用超时问题的数据区间;之后对收集到的数据进行清洗,丢失异常数据和进行数据特征提取,形成数据集;根据数据集中的相关数据进行综合判断,形成是否复用当前连接或者新建连接的结论。

建连优化的第五点是 QUIC 建连竞速;SDK 支持 QUIC 建连竞速,当开启 QUIC 建连竞速,用户发起访问时,如果 QUIC 竞速胜出则使用 QUIC 建连,HTTP  竞速胜出则使用 HTTP 建连,从而提升端侧访问的成功率。

QUIC 建连竞速在视频播放场景,对播放失败率、播放卡顿率、慢起播场景都有比较明显的优化;在弱网场景下,QUIC 协议的性能优势尤为明显。

以上就是 vivo 在建连优化策略方面做的探索和实践。

2.2.3 统一接入方案

下面我们介绍统一接入方案方面的优化,第一点是实现了HTTPDNS 调度网关,SDK 的所有配置都是通过调度网关进行管理和下发,包括 DNS 解析策略、缓存策略,建连策略,都是通过配置网关进行管理,SDK 的配置和策略变更客户端不需要重新发版,调度网关极大的提升了 SDK 的灵活性;并且调度网关通过域名的方式访问,同时也避免IP被封禁的情况。

第二点是网络框架适配,vivo 手机应用使用多种网络框架,包括 OkHttp、Volley、HttpURLConnection、Glide 等网络框架,vivo HTTPDNS SDK 对这些网络框架都做了适配,满足各类业务的接入需求,降低了业务接入的成本。

2.3 HTTPDNS 服务端优化

下面我们介绍 vivo HTTPDNS 服务端的架构,HTTPDNS 服务端主要提供高性能 API、缓存库、代理网关等能力;高性能API提供智能解析、鉴权、缓存查询等能力;缓存库提供多级缓存、懒更新等能力;代理网关提供 EDNS、智能调度、IP探测等能力。通过这些能力给 vivo 用户提供高可用,低时延的HTTPDNS 解析服务。同时,也提供 HTTPDNS 管理后台,支持 DNS 管理、系统管理、调度策略管理、鉴权管理、接入管理等能力。

服务端最核心的能力主要分为智能调度和多级缓存,服务端智能调度是获取多个合作方的解析结果,通过异步IP探测等策略,取最优的结果进行缓存,SDK 从服务端获取最优的IP地址进行业务访问。多级缓存将缓存结果由同步刷新优化为基于 TTL 过期时间的自动异步刷新一级缓存和二级缓存,极大的提升服务端的性能,同时也降低了 HTTPDNS 的使用成本。

2.4 HTTPDNS 可视化监控

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 总结与展望

3.1 vivo HTTPDNS 建设总结

vivo HTTPDNS 平台的诸多实践,没有全部详细描述,业务的优化方面也将持续建设。

  • 在域名解析优化方面,得益于DNS自适应解析策略和IP优先/兜底策略的优化,DNS 解析成功率有显著的提升。

  • 在缓存优化方面,动态缓存和乐观缓存策略进一步降低 DNS 解析时间,优化链路访问时延时延,整体 DNS 解析时延下降30%+。

  • 建连优化方面,依托于端侧网速检测、最佳路由、长连接预测模型、QUIC 建连竞速等策略,客户端成功率提升到2%。

  • 统一调度网关作为 vivo HTTPDNS 平台实践 SDK 与服务端的桥梁,使得端到端的优化策略得以串联。

  • 服务端智能调度提升 vivo HTTPDNS 的解析成功率,服务端解析成功率达到99.9%,进一步助力端侧业务的访问体验。

  • 全链路监控为 vivo HTTPDNS 平台提供端到端的全链路监控能力,为业务的发展提供数据支撑。

3.2 vivo HTTPDNS 未来展望

最后,是我们对未来的一些展望,未来我们将持续聚焦端侧优化的前沿技术;在网络加速方面探索多通道加速和端侧调度优化方案;

在多通道加速方面探索双移动网络、双 WiFi 或者移动网络加 WiFi 的加速方案。

在端侧调度方面利用端侧就近调度、智能寻址和专用低时延网络加速方案,进一步提升端侧用户的体验。

体验优化是 vivo 用户导向最核心的体现,用户访问成功率的提升需要我们不断的投入和持续的优化;我们将会与行业一起继续探索体验优化的新技术和新方案。

posted @   vivo互联网技术  阅读(170)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
历史上的今天:
2023-02-20 vivo版本发布平台:带宽智能调控优化实践-平台产品系列03
2020-02-20 浅谈移动端过长文本溢出显示省略号的实现方案
点击右上角即可分享
微信分享提示