App如何实现就近接入?如何改善调度不准问题?

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 所谓调度精确,指的是调度系统准确地将客户请求调度到就近服务器。移动开发场景下调度不精确的问题比较突出,文章中分析了调度原理,给出了调度不精确的案例,并分析了调度错误的原因,最终给出了改善调度精确性的三种方法。

一、常规DNS调度策略原理

以CDN系统为例(其他业务系统大多采用类似的策略),来说明一下多地域部署服务如何实现用户访问请求调度的。

Step 1:客户端(假设IP地址为IP1)向Local DNS(假设IP地址为IP2)发出域名解析请求(假设请求的域名为www.taobao.com)
Step 2:Local DNS代理客户端向权威服务器发起域名解析请求
Step 3:权威服务器根据域名(www.taobao.com)和IP2(对应的地域和ISP)进行调度并返回对应的解析结果。
Step 4: 客户端根据调度返回的IP发起业务访问请求。

二、调度精确性问题

2.1 问题描述

从上面的调度过程可以看出,业务系统会根据客户端的local dns IP来判断客户所处地域和运营商,并根据该地域和运营商来调度到就近的服务节点。

可以看出,当客户的Local DNS与客户的地域和运营商不匹配时,此时按照Local DNS来调度就会出现调度不精确的问题。

下面看几个来自客户的反馈(探测结果来自AliCDN昆仑探测工具):
596f0c463d1f6e2c3f3b06e421683442d7441636 6a63fbf7d20dd0447f21a905a126aa1eaaabad6d

探测的客户端IP和Local DNS IP以及对应的地域,运营商如下所示:
客户端IP

220.249.84.**

220.249.84.**

客户端归属 武汉联通 武汉联通
Local DNS IP

183.61.13.**

222.73.134.**

Local DNS 归属 珠海电信 上海电信

很容易看出,Local DNS地域和运营商与客户端都不匹配,此时按照Local DNS IP调度会对用户体验造成非常大的影响(国内跨运营商的访问延迟和带宽都存在非常大的问题,相信大家有深刻体验)。

2.2 问题影响面

根据我们的经验,影响的客户端占比在3%-7%之间。

2.3 原因

无线场景下主要由于以下两个方面因素导致:
(1)国内三大运营商Local DNS布点不足且不均匀,大量流量集中在2000个以内的Local DNS上,大的Local DNS对应的流量超过5Gb
(2)很多手机(尤其是山寨机)Local DNS配置不准确

如果扩展到全网(含有线访问请求),还需要考虑一个因素:
(3)公共DNS(如google 8.8.8.8,阿里的223.5.5.5,223.6.6.6)导致调度系统无法识别Local DNS的具体位置。

三、解决办法

业界当前常见的解决思路都是通过获取客户端的IP来精确定位客户端地域和运营商,实现上,有三种方式:
(1)HTTPDNS
客户端通过HTTP请求向httpdns服务器发出域名解析请求,此时httpdns服务器可以拿到客户端的精确IP,并基于客户端IP进行调度。
(2)edns client subnet
通过dns包中加入客户端IP信息,使得DNS调度系统可以拿到客户端IP并进行调度。
(3)http 302跳转
当调度系统给出的调度结果不准确时,业务服务器仍然可以根据客户端IP来判断调度是否合理,并且在必要时通过302跳转来实现重定向进而实现精确调度。

三种方式的优缺点对比如下:

客户端修改 Local DNS修改 权威DNS修改 系统开销 使用范围
HTTPDNS
最广
edns client subnet 需支持edns client subnet 需支持edns client subnet
中等
http 302 有(需支持302跳转)
最差

HTTPDNS综合来看是最优的解决方案,当前阿里云已经推出了 HTTPDNS商业化产品。
目录
相关文章
|
Kubernetes 监控 JavaScript
Sentry 10 K8S 云原生架构探索,Vue App 1 分钟快速接入
Sentry 10 K8S 云原生架构探索,Vue App 1 分钟快速接入
203 0
|
移动开发 搜索推荐 大数据
移动开发前沿 | 厂商和App快速接入统一推送UPS指南
什么是统一推送?统一推送的意义和价值在哪里?为何统一推送标准得以被纳入到CMS中?开发者又该如何接入统一推送?
562 0
移动开发前沿 | 厂商和App快速接入统一推送UPS指南
|
JSON iOS开发 数据格式
iOS App接入Facebook登录实践
接入Facebook登录真的好方便,不需要像微信登录那样还要做开发者资质认证。参考下面这两篇文章就可以搞明白怎么操作。 1. [在iOS工程中集成facebook第三方登录](http://www.jianshu.com/p/043974c1b081) 2. [iOS集成facebook实现自动登录](http://www.jianshu.com/p/4186c54c13b1) 总结
5316 0
接入高防后为什么有一些网站,APP等会出现延迟,打开速度慢等问题?
我们常见的一些网站,APP等用户在接入高防后,会出现延迟,打开速度慢等问题,假如出现这样的情况请大家不要惊慌失措,短暂的时间内出现延迟,打开速度慢是正常的。
|
开发工具 Perl 安全
APP怎么免费接入MobPush
1、获取AppKey 申请Appkey的流程,请点击 http://bbs.mob.com/thread-8212-1-1.html?fromuid=708192、下载SDK下载解压后,如下图: 目录结构 (1)Sample:演示Demo。
1509 0
|
Android开发
Android 连麦Demo App 接入指南
本文旨在帮助您,通过简单接入步骤,快速搭建阿里云直播连麦,Android 移动端,体验连麦带给您的飞一般的感觉
2803 0
|
22天前
|
编解码 Java Android开发
FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流
RTMP Streamer是一款开源的安卓直播推流框架,支持RTMP、RTSP和SRT协议,适用于各种直播场景。它支持H264、H265、AV1视频编码和AAC、G711、OPUS音频编码。本文档介绍了如何使用Java版的RTMP Streamer,建议使用小海豚版本的Android Studio (Dolphin)。加载项目时,可添加国内仓库加速依赖下载。RTMP Streamer包含五个模块:app、encoder、rtmp、rtplibrary和rtsp。完成加载后,可以在手机上安装并运行APP,提供多种直播方式。开发者可以从《FFmpeg开发实战:从零基础到短视频上线》获取更多信息。
53 7
FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流
|
19天前
|
数据可视化 数据处理 Swift
Swift开发——简单App设计
SwiftUI教程概述:简化App设计,通过代码展示了如何创建一个计算两个数之和的界面。工程`MyCh0902`包含`ContentView.swift`,其中定义了`ContentView`和`MyView`结构体。`MyView`负责界面布局,使用`VStack`和`HStack`组织元素,如`TextField`和`Button`。点击`Button`调用`calc`方法处理输入并更新结果。界面设计可在Xcode的Inspector窗口中可视化配置。推荐将界面逻辑移到单独的`MyView.swift`文件中以清晰分离视图设计。
187 1
Swift开发——简单App设计