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

简介: 所谓调度精确,指的是调度系统准确地将客户请求调度到就近服务器。移动开发场景下调度不精确的问题比较突出,文章中分析了调度原理,给出了调度不精确的案例,并分析了调度错误的原因,最终给出了改善调度精确性的三种方法。


一、常规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商业化产品。

相关文章
|
11月前
|
关系型数据库 MySQL 数据库
vertx 的http服务表单提交与mysql验证
本文介绍了如何使用Vert.x处理HTTP服务中的表单提交,并通过集成MySQL数据库进行验证,包括项目依赖配置、表单HTML代码和完整的Vert.x服务代码。
99 2
|
11月前
|
安全 网络安全
Kali渗透测试:使用Armitage扫描网络
Kali渗透测试:使用Armitage扫描网络
179 3
|
9月前
|
Linux Go iOS开发
怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
本文介绍了如何在 VSCode 中禁用点击 Go 包名时自动打开浏览器跳转到 pkg.go.dev 的功能。通过将 gopls 的 `ui.navigation.importShortcut` 设置为 "Definition",可以实现仅跳转到定义处而不打开链接。具体操作步骤包括:打开设置、搜索 gopls、编辑 settings.json 文件并保存更改,最后重启 VSCode 使设置生效。
305 8
怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
|
9月前
|
人工智能 编解码 机器人
NVILA:英伟达开源视觉语言大模型,高效处理高分辨率图像和长视频
NVILA是英伟达推出的视觉语言大模型,旨在高效处理高分辨率图像和长视频,同时保持高准确性。该模型通过“扩展-压缩”策略和多种优化技术,在多个领域如机器人导航和医疗成像中展现出广泛的应用潜力。
321 13
NVILA:英伟达开源视觉语言大模型,高效处理高分辨率图像和长视频
|
Docker 容器
docker compose logs 常用指令
`docker compose logs`命令用于查看容器的输出日志。该命令提供多种选项,如以纯文本形式输出(`--no-color`)、隐藏日志前缀(`--no-log-prefix`)、显示时间戳(`-t, --timestamps`)等。用户可以指定时间范围(如`--since "2024-08-06T13:11:10"`和`--until "2024-08-06T13:11:15"`)或最近几分钟内的日志(如`--since 5m`)。使用`-f, --follow`可实时跟踪日志输出。注意:参数-h已废弃,应使用--help。
|
11月前
|
人工智能 搜索推荐 语音技术
人工智能与未来教育:重塑学习方式的双刃剑
在21世纪,人工智能(AI)技术正以前所未有的速度发展,深刻影响着社会的各个方面,其中包括教育领域。本文探讨了AI如何改变传统教育模式,提出其既带来积极影响也伴随着挑战的观点。通过分析具体案例和数据,文章旨在启发读者思考如何在保留人类教师不可替代价值的同时,有效利用AI技术优化教育体验。
|
12月前
|
自然语言处理
统一transformer与diffusion!Meta融合新方法剑指下一代多模态王者
【9月更文挑战第22天】该研究由Meta、Waymo及南加大团队合作完成,提出了一种名为Transfusion的新多模态模型,巧妙融合了语言模型与扩散模型的优点,实现了单一模型下的文本与图像生成和理解。Transfusion通过结合下一个token预测与扩散模型,在混合模态序列上训练单个Transformer,能够无缝处理离散和连续数据。实验表明,该模型在图像生成、文本生成以及图像-文本生成任务上表现出色,超越了DALL-E 2和SDXL等模型。不过,Transfusion仍面临计算成本高和图像理解能力有限等挑战,并且尚未涵盖音频和视频等其他模态。
249 2
|
Ubuntu Linux 网络安全
群晖搭建网页版Linux Ubuntu系统并实现远程访问
群晖搭建网页版Linux Ubuntu系统并实现远程访问
248 1
|
缓存 JSON 负载均衡
http请求grpc服务的最终解决方案
所有的rpc协议遵守着一个万变不离其宗的定律:调用方与服务提供方有一套约定的报文解析格式。nodejs做代理,http报文组装成grpc报文,必须依赖.proto文件中定义的消息体
2154 0
http请求grpc服务的最终解决方案
|
JavaScript 程序员
input框输入中文时,输入未完成触发事件。Vue中文输入法不触发input事件?
input框输入中文时,输入未完成触发事件。Vue中文输入法不触发input事件?
1058 1

热门文章

最新文章