在手机 APP 初始化配置了域名 A 和域名 B ,如果域名 A 访问慢,切换到域名 B 访问,我们是根据 ping 值,或者无法访问作为一个判断的依据。
这样有没有问题,请教诸位大神,或者有更好的思路不吝赐教。
![]() |
1
gaobh 5 天前 via iPhone
500 就切换,以防万一逻辑可以做在客户端,再另外配置域名拉域名名单,每个域名再配置拉最新名单
|
![]() |
2
eas 5 天前
这个不是应该在 dns 负载那头动脑筋嘛?
|
3
tunggt 5 天前 via Android
就像楼上说的 dns 负载均衡,或者你分区域分运营商解析。
要么直接用 cdn 。 不过你这访问响应,能根据用户的 ping 值? |
![]() |
4
GeekGao 5 天前
直接用腾讯云 DNS 解析,付费就能开通 IGTM 做故障监测自动切换,不需要理解高深的 HA 架构、不需要改动代码解决。
|
![]() |
5
falcon05 5 天前 via iPhone
这个有点类似翻墙软件的负载均衡,选择最快的节点,可以定时检测,使用一条 URL 检查响应时间
|
6
hefish 5 天前
根据 ping 值切换是不是有些草率了?
|
7
codegenerator 5 天前 via Android
可以用一个简单接口代替 ping ,其他都没有问题
|
![]() |
8
xhwdy26 OP 各位,关键问题是 A 域名是天朝,B 域名是某国,这些都无效,这些 DNS 可能无法用上
|
![]() |
10
ETiV 5 天前 via iPhone
如果你是个正经的 app ,就不要在国内上架能访问海外的,反之亦然
|
11
hzplszl 5 天前
搞个小文件放到两个域名,客户端在网络切换或者其他有必要的场景下,去下载文件竞速,选择更快的域名
|
12
yinmin 5 天前 via iPhone ![]() 正统的做法是用一个域名做智能 dns ,国内用户返回国内 ip ,国外用户返回国外 ip 。
如果你要做竞速,建议别用 ping ,直接用 tcp/https 发起第一个请求,看哪个请求先有回复就用哪个。因为有些网络环境(例如 fakeip )是没法 ping 的。 |
13
chi1st 5 天前
楼上正解,智能 DNS
|
14
yinmin 5 天前 via iPhone ![]() 接#12 为什么不要用 ping ,因为有些网络环境,例如 fakeip 环境解析出的 ip 地址是假 ip (常见 198.18.x.x ),ping 是毫无意义的,另外某些网络防火墙可能会屏蔽 icmp 或者 tcp 包,出现 ping 不通但 tcp 通 或者 ping 通但是 tcp 不通的情况。
如果你需要多服务器竞速,可以专门做一个 api 接口简单返回“OK”数据包,在 app 启动/网络切换/连接出错时,同时对多个服务器发起这个 api 请求,看哪个先返回就优先哪个。 |
15
jinliming2 5 天前
用户的网络情况可能是很复杂的,即便是在没有防火墙的国家,也可能会遇到比如连接了需要登录的 Wi-Fi 之类的情况,所有域名解析都会被拦截并跳转到 Wi-Fi 登录页面,所以 ping 、tcp ping 、普通 http 请求都是不可靠的。
所以 #12/#14 正解,但是服务器竞速比较常用的方法是提供一个 http 的 /generate_204 接口(/generate_204 属于事实上的标准,虽然没有定义标准,但大部分网站选择遵守),这个接口没有任何逻辑,仅返回 HTTP 状态码 204 ,且没有 body 。业务需要判断接口返回的状态码是 204 而非其他。 在 /generate_204 正常返回之前,都属于网络未连接的状态,应当以一定时间间隔(通常时间间隔越来越大)重试,直到最先返回的就是最快的。后续定期检查更新网络状态。 |
![]() |
16
xhwdy26 OP 谢谢各位 V 友的解答,各位新年快乐!
|
![]() |
17
sujin190 4 天前 via Android
@xhwdy26 而且手机似乎会在网络变化 dns 服务器变更的时候 dns 记录自动失效,已经建立的连接也会断开,这样分区解析会自动更新,毕竟手机是移动的
|
![]() |
18
jim9606 4 天前
一般来说,负载均衡是优先在服务器侧做的,对外入口是负载均衡网关,网关做健康监测和转发。
在此之上客户端做的是 fallback ,这个一般用连接超时和响应异常,不推荐用 ping ( icmp echo ),而且很多环境只管 tcp udp 能不能通的。 |
19
jeesk 4 天前 via Android
参考 bilibili 请求一个接口,返回这个地域可用的 api ip 即可。。
bilibili 很多接口都没 https 直接抓包能看到不少东西 |
20
jeesk 4 天前 via Android
{
"dns":[ { "host":"app.bilibili.com", "client_ip":"58.19.1.96", "ips":[ "221.15.71.67", "221.15.71.66", "221.15.71.65", "61.240.206.10", "221.15.71.64", "61.240.206.13", "112.83.140.13", "112.83.140.12", "61.240.206.11", "61.240.206.12", "112.83.140.11", "112.83.140.14" ], "type":1, "ttl":52, "origin_ttl":90 } ] 这是 bilibili 请求 http://203.107.1.34:80/191607/resolve?host=app.bilibili.com&query=4 你说他是怎么做的?。特殊地区返回特殊 ip |