【问题标题】:Update DNS for domain name in AJAX request在 AJAX 请求中更新域名的 DNS
【发布时间】:2014-06-04 21:36:32
【问题描述】:

我们设置了 DNS 故障转移,TTL 为 180 秒。当服务器出现故障时,它会将 A 主机记录上的 IP 地址更新为工作服务器的 IP 地址。目前,我们的网站使用 AJAX 请求进行间隔刷新。当其中一台服务器发生故障时,DNS 会更新并故障转移,因此如果您 p​​ing 域,它具有正确的 IP。但是由于某种原因,在浏览器内部,并且在 TTL 过期很久之后,AJAX 请求仍然保留分配给域名的旧 IP 地址(注意页面不能在浏览器中重新加载)。在阅读其他问题时,我知道您无法强制刷新客户端上的 DNS 缓存。我的问题是,你们中的任何人都知道使用 javascript 或 AJAX 实现此目的的另一种方法或技巧吗?谢谢。

【问题讨论】:

  • 对我来说似乎是 X/Y 问题;您之所以处于这种情况,是因为您的基础设施存在缺陷……浏览器因保留 DNS 而臭名昭著,可能是出于性能原因,所以除非我的工作受到威胁,否则我不会走这条路 :)
  • 归结为高可用性解决方案。我们有两台服务器通过 ajax 请求提供数据。由于 Web 应用程序是客户端,因此不会在浏览器中刷新。 AJAX 会定期刷新,并且 ajax 中的域名将保持不变,但是当服务器出现故障时会更新 IP。如果没有办法做到这一点,您知道我如何重新设计站点/ajax 请求以实现高可用性,并由两台服务器处理请求吗?谢谢
  • 只是一些一厢情愿的想法:如果您要向另一台始终运行且从不更改其 IP 的服务器发出请求,然后从该服务器执行 cURL(或类似的)并返回响应?那么,您将the-always-up-server 用作某种路由器?
  • 嗨,哪里可以放置一个永远在线的服务器?纽约?西海岸?中国?嫁接到海底电缆上?

标签: javascript jquery ajax dns


【解决方案1】:

我不会尝试这个客户端,我会使用网络负载平衡器或其他一些服务器端虚拟 IP 地址。

要按照您的请求进行客户端操作,将要求您的 AJAX 调用以避免浏览器安全性或完全符合跨域请求的方式进行。如果您愿意进行这些更改,那么这里有一些 JavaScript DNS 库,这些库可用于将 DNS 名称解析为 IP 地址或 CName,使用返回的 IP 地址或 CName 来调整您的 AJAX url,并刷新 AJAX每当 AJAX 调用失败时使用新的 DNS 查找的 url。

我不想自己做这个

【讨论】:

  • 不必跨域,因为名字的A Host记录不止1条。基本上,命名的 1 域是循环配置的,当服务器出现故障时,循环只是保持发送相同的 ip。谢谢
  • en.wikipedia.org/wiki/Same-origin_policy 提供详细信息。要使该方法正常工作,您将不得不停止使用浏览器 DNS 解析并自行控制,因为浏览器仍然停留在旧的死 IP 地址上。因此,在服务器未死时加载的页面以及对新数据的 ajax 请求将被视为不同的来源。
  • 你能提供一些指向这些库的链接吗?
【解决方案2】:

使用两个(或更多)子域。例如。 data1.example.com 和 data2.example.com 对应物理服务器。

但是,要跨域工作,您需要设置document.domain 允许域之间的通信:

document.domain = "example.com";

然后,您需要您的脚本手动在不同服务器之间进行故障转移。这是我知道的唯一方法,并且在许多安装中都取得了成功。

【讨论】:

    【解决方案3】:

    我会:

    • 编码 ajax 以访问服务器 primary.mycompany.com ,如果失败,则切换到 secondary.mycompany.com ,如果失败,返回主服务器。
    • 最好让故障转移设置接管故障主机的“服务 ip”。对此有很好的解决方案。

    对于 linux google 诸如心跳和虚拟 ip 之类的东西。

    【讨论】:

    • 这是我过去使用过的解决方案,也是唯一可靠的解决方案(除了拥有更可靠的网络基础设施)。我尤其记得黑莓,它是出了名的固执。使用两个公共名称并让 ajax 请求自动故障转移到另一个。
    【解决方案4】:

    使用浏览器 Firefox,dns.resolve() 方法可以解析给定域的 DNS。

    参考:https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns/resolve

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 2014-05-13
      • 2019-01-10
      • 1970-01-01
      相关资源
      最近更新 更多