• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cdring
V2EX  ›  程序员

请教多域名请求问题

  •  
  •   cdring · Oct 25, 2024 · 6102 views
    This topic created in 738 days ago, the information mentioned may be changed or developed.
    各位大神,后台 api 配置了多个域名。前端如何检测这些域名,哪个延迟低拿哪个域名请求后端 api 。这多个域名是存数据库后端返回给前端。还是直接写到 json 文件,前端请求 https://xx.com/domain.json 获取。哪个方案比较好,有没有其他更好的方案,谢谢。
    44 replies  •  2024-10-28 09:39:21 +08:00
    proxytoworld
    proxytoworld
    Oct 25, 2024
    1
    为什么不是后端监测哪个延迟低就用那个, 你这样配多个域名,还得多域名解析,检测
    InDom
    InDom
    Oct 25, 2024
    2
    不要一直切换,发现失败或延迟高的时候再切换。

    不经常换就 json ,存数据库静态回到文件,或者重写 json url 到程序也一样,这里根本不是问题。
    chengran630
    chengran630
    Oct 25, 2024
    3
    第一次的时候测试+设置里 手动切换
    cdring
    cdring
    OP
    Oct 25, 2024
    4
    @proxytoworld 设计到海外用户,每个 api 域名套了不同厂商的 cdn 加速,所以每个国家的访问 api 域名延迟都不一样。直接前端请求域名延迟比较好吧。
    cdring
    cdring
    OP
    Oct 25, 2024
    5
    @lcy630409 太麻烦了,还是自动方便些
    cdring
    cdring
    OP
    Oct 25, 2024
    6
    @InDom 打开前端页面就检测哪个域名延迟低,然后就拿这个延迟低的域名请求后端。这样不好吗
    DesnLee
    DesnLee
    Oct 25, 2024
    7
    每次请求都同时全部请求,拿第一个返回的结果,其他丢弃
    webszy
    webszy
    Oct 25, 2024
    8
    @DesnLee 厉害,有道理
    cdring
    cdring
    OP
    Oct 25, 2024
    9
    @DesnLee 万一第一个返回的域名延迟高呢。导致访问很慢
    spritecn
    spritecn
    Oct 25, 2024
    10
    这个事前公司做过,通过自研壳浏览器做到的
    wangyongbo
    wangyongbo
    Oct 25, 2024
    11
    @cdring DNS 可以根据 用户的 IP 所属的地域 , 把域名解析到不同的 IP. 这个功能满足不了你们的需要吗?
    jenson47
    jenson47
    Oct 25, 2024
    12
    看具体需求,按道理 cdn 在某个地方应该是比较稳定的,或者说我们就认为心跳的响应时间在多少之内是 ok 的。
    第一次或者当超过响应时间,就触发一次选择 api ,前端并发的去请求,就用第一个回来的,其他都废弃,或者保留前三,轮着来?
    freemoon
    freemoon
    Oct 25, 2024
    13
    你后来 多数据库的一致性问题呢
    liuliancao
    liuliancao
    Oct 25, 2024
    14
    这个原始需求是希望用户使用最快的 cdn 链接吗 这个肯定在前端做好点 不过最好是自己搞一个域名 做一下区域 dns 不要写进代码里面 这个是可以测试的 不同区域哪个 cdn 好
    8355
    8355
    Oct 25, 2024
    15
    这个 cdn 和云厂商都有相关的业务吧
    比如说阿里云叫全球加速
    yplam
    yplam
    Oct 25, 2024 via Android
    16
    如果这个 JSON 请求同时用作测速的话用静态文件好点,不然你后端还要保证在不同 QPS 下响应速度一致
    cdring
    cdring
    OP
    Oct 25, 2024
    17
    @spritecn 自研壳浏览器,你们公司厉害
    cdring
    cdring
    OP
    Oct 25, 2024
    18
    @jenson47 这也是一种办法
    cdring
    cdring
    OP
    Oct 25, 2024
    19
    @lasuar 不设计到多数据库
    cdring
    cdring
    OP
    Oct 25, 2024
    20
    @8355 是的。
    cdring
    cdring
    OP
    Oct 25, 2024
    21
    @yplam 目前是计划用静态资源做,我过来请教看有没有更好的方案
    8355
    8355
    Oct 25, 2024
    22
    @cdring #20 除了自动加速以外主要是用二级域名指向不同的区域节点,比如欧洲/美国等等通常是为了某些业务的特殊性比如说欧洲的 GDPR 等等可以强制根据某些业务层面地址或者其他定位信息进行划分强制走某二级域名。
    cdring
    cdring
    OP
    Oct 25, 2024
    23
    @8355 好的,谢谢
    ounxnpz
    ounxnpz
    Oct 25, 2024
    24
    如果是网页的话,可以用同一个域名,用 DNS Geolocation 之类的方法(具体取决于 DNS 服务商)实现不同区域解析到不同的 IP
    sunchuo
    sunchuo
    Oct 25, 2024❤️1
    25
    哎。这个项目感觉不太对劲。🤦
    2I0Mto2kjm0c0B9i
    2I0Mto2kjm0c0B9i
    Oct 25, 2024
    26
    刚好昨天做了这个需求,在前面先 ping 所有节点,哪个快就存到本地,记录一个时间戳我们是 1 小时,下次对比时间戳再重新 ping
    perfectlife
    perfectlife
    Oct 25, 2024 via Android
    27
    智能 dns 呢,同一个域名不同国家地区解析到不同的地址
    kaf
    kaf
    Oct 25, 2024
    28
    后端开一个延迟检查接口,客户端定时访问所有域名的延迟时间,请求时读取延迟最小的。这样吗
    SenLief
    SenLief
    Oct 25, 2024
    29
    我觉得你在做微信,自己内置 dns ,不走系统 dns ,哈哈。
    xiaochena
    xiaochena
    Oct 25, 2024
    30
    正常的逻辑应该是同一个 api 域名套用多个不同厂商的 cdn 加速吧。哪有加一个国家加一个 api 域名的道理。。。emmm
    shakaraka
    shakaraka
    Oct 25, 2024
    31
    Promise.race 解君愁
    wuhunyu
    wuhunyu
    Oct 25, 2024
    32
    看描述,服务器应该是分别部署在不同的国家地域了。我比较好奇的是,如果前端根据延时来判断走哪个区域的服务,特殊情况下,一会儿访问这个国家的服务器,一会儿访问另一个国家的服务器,不同区域的数据是怎么同步的,跨地域的数据同步成本会比较,而且势必会存在数据不一致的问题,好奇你们的后端是怎么处理的。像是阿里云,他们的许多产品都是分地区的,比如上海,广州。而且很多时候不同区域的产品产生的数据他也不提供转区的服务。按我理解,区域 1 的前端最好就是访问区域的 1 的服务端,不然可能因为数据同步延迟导致一些奇怪的问题。如果是同一个区域的话,我又觉得没啥必要给同一个区域多个域名吧
    cdring
    cdring
    OP
    Oct 26, 2024
    33
    @kaf 后端不开检测延时接口,前端自己检查延时
    cdring
    cdring
    OP
    Oct 26, 2024
    34
    @SenLief 不是的
    cdring
    cdring
    OP
    Oct 26, 2024
    35
    @iapplebear 需求和我这很接近
    cdring
    cdring
    OP
    Oct 26, 2024
    36
    @perfectlife 还用不上智能 dns ,因为就是想多个域名做高可用,域名挂了就切换
    cdring
    cdring
    OP
    Oct 26, 2024
    37
    @xiaochena 是这么回事,我之前没说清楚
    cdring
    cdring
    OP
    Oct 26, 2024
    38
    @wuhunyu 没有这么复杂,服务器就在一个区域,就是为了解决这个域名访问不了,换个域名在请求
    cdring
    cdring
    OP
    Oct 26, 2024
    39
    @wunonglin 没听过,我了解下,谢谢大神
    yinmin
    yinmin
    Oct 26, 2024 via iPhone
    40
    很简单啊,拿了 domain.json 后,对所有域名同时发起异步 api 请求,记录下第一个收到结果的,就用这个。
    yinmin
    yinmin
    Oct 26, 2024 via iPhone
    41
    话说回来,大厂都是用智能 dns ,你们这个方案就是个小聪明
    DesnLee
    DesnLee
    Oct 26, 2024
    42
    @cdring #9 直接拿着所有域名并发请求,谁先返回就用谁的结果。Promise.race
    mytsing520
    mytsing520
    PRO
    Oct 26, 2024
    43
    用 CDN+TCP 优化来处理,成本相较而言最低。
    wuhunyu
    wuhunyu
    Oct 28, 2024
    44
    @yinmin 这样做前端是简单了,后端服务器压力平白无故多做很多无用功。我觉得每隔几分钟主动 ping 一次,取最快的那个域名,如果最快的那个域名也超时,就主动 ping 一次,更新域名列表,再用最快的域名尝试一次,还是超时就提示用户服务不可用吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5539 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 985ms · UTC 02:59 · PVG 10:59 · LAX 18:59 · JFK 21:59
    ♥ Do have faith in what you're doing.