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昆仑探测工具):


1596439367655-271c3325-5eb4-440d-8044-b975ec5cd082.png1596439367520-e6256c0b-4005-4014-8bd6-31a41b444521.png




探测的客户端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商业化产品。




钉钉搜索35248489,加入阿里云云原生应用研发平台EMAS技术交流群,探讨最新最热门的应用研发技术和实践。(或钉钉扫码加入)


image.png


相关文章
|
7月前
|
存储 弹性计算 应用服务中间件
阿里云服务器武汉地域收费价格:CPU内存、带宽和存储费用标准
阿里云武汉地域(华中1)提供本地节点,含ECS云服务器、按量及包月计费模式。1M带宽23元/月,流量0.8元/GB。支持ESSD多种存储,推荐就近选杭州、上海等地享受爆款优惠,如2核2G低至38元/年。价格仅供参考,具体以官网为准。
941 3
|
7月前
|
弹性计算 人工智能 大数据
阿里云最新优惠券种类与领取入口汇总:先领券在购买,价格更实惠
为助力各位新老用户降低选购云服务和其他云产品的使用成本,阿里云推出多类型优惠券体系,涵盖老友专属福利券包、学生无门槛券、通义万相优惠券、算力补贴等。有部分用户不知道具体入口和相关领取和使用规则,本文问大家介绍阿里云优惠券的具体领取路径、规则解析和使用教程,实现云服务成本的有效控制,以供参考。
|
10月前
|
域名解析 缓存 网络协议
DNS更新后不生效?快速排查攻略
本文介绍了修改DNS后不生效,其主因是DNS传播延迟。TTL值、ISP缓存及服务器位置影响传播速度。提前调小TTL、清除本地缓存、更换公共DNS可加速。通过nslookup、Dig或Myssl工具可检测全球解析状态,确保更新完成。
1692 1
|
容器
OOP 中的组合、聚合和关联
【8月更文挑战第22天】
495 0
|
消息中间件 Kafka 测试技术
消息队列 MQ 性能大揭秘
本文对比了RabbitMQ、RocketMQ、Kafka和Pulsar四款消息队列的性能。RabbitMQ的吞吐量为万级,延迟在低吞吐量时可低至微秒级;高吞吐量下延迟显著上升。RocketMQ官方宣称支持万亿级吞吐量,实际测试中可达百万级TPS,延迟为毫秒级。Kafka和Pulsar的吞吐量均为百万级,Kafka延迟低至2ms,Pulsar延迟约10ms。总体来看,Kafka在高吞吐量下表现最优,而RabbitMQ适合对速度与可靠性要求高的低吞吐量场景。
1581 0
消息队列 MQ 性能大揭秘
|
网络协议 JavaScript API
深入浅出 WebSocket:实现实时 web 通信
在现代Web应用中,实时通信至关重要。WebSocket通过单个TCP连接实现全双工通信,允许服务器主动向客户端发送消息。本文介绍了WebSocket的核心概念、实现方法及其优势。WebSocket建立了持久连接,支持实时数据传输,减少服务器负载,并提供双向通信。通过JavaScript API可轻松建立连接、发送接收消息及处理异常。使用WebSocket,开发者能构建更动态的Web应用。
|
Linux 应用服务中间件 nginx
内网环境下 - 安装linux命令、搭建docker以及安装镜像
内网环境docker镜像的安装,以及内网环境如何安装linux命令
2913 3
内网环境下 - 安装linux命令、搭建docker以及安装镜像
|
存储 Kubernetes 监控
在K8S中,集群可以做哪些优化?
在K8S中,集群可以做哪些优化?
|
存储 Java
JAVA中String长度限制解决超出字符长度
JAVA中String长度限制解决超出字符长度
535 1
|
域名解析 Kubernetes Linux
Kubernetes 外部 HTTP 请求到达 Pod 容器的全过程
Kubernetes 外部 HTTP 请求到达 Pod 容器的全过程
923 4