2

在亚马逊失败并阅读了许多关于冗余/分布式在实践中意味着什么的文章之后,DNS 似乎是弱点。例如,如果 DNS 设置为数据中心之间的循环,并且其中一个数据中心发生故障,那么似乎许多浏览器会缓存该 DNS 并继续命中故障节点。

我了解生存时间 (TTL),但当然这可能会设置为很长一段时间。

所以我的问题是,如果浏览器没有收到来自 IP 的响应,是否足够聪明地刷新 DNS 以希望被路由到另一个节点?

4

1 回答 1

1

循环 DNS 是每个浏览器的事情。这就是 Mozilla 的做法

单个主机名可以解析为多个 ip 地址,每个地址都存储在成功查找后返回的主机实体中。Netlib 保留 dns 服务器返回 IP 地址的顺序。如果在连接期间的任何时候,当前用于主机名的 ip 地址失败,netlib 将使用存储在主机实体中的下一个 ip 地址。如果那个失败,则查询下一个,依此类推。NET_FinishConnect() 函数中完成了通过可用 IP 地址的这一进程。在一个 url 加载被认为完成之前,因为它的连接出错,它的主机实体被咨询以确定是否应该为给定的主机尝试另一个 IP 地址。一旦某个 IP 地址失败,它就会消失,从缓存中的主机实体中删除。

至于亚马逊的失败,在亚马逊停机期间 DNS 没有任何问题。DNS 服务器正确报告了 IP 地址,并且浏览器使用了这些 IP 地址。搞砸了在亚马逊这边。他们将流量重新路由到不堪重负的集群。DNS 已死机,但集群本身无法处理巨大的流量负载。

亚马逊自己说得最好

EC2 提供了两个非常重要的可用性构建块:区域和可用区。按照设计,区域是我们基础设施的完全独立部署。区域彼此完全隔离,并提供最高程度的独立性。许多用户利用多个 EC2 区域来实现极高水平的容错。但是,如果您想在区域之间移动数据,则需要通过您的应用程序来完成,因为我们不会代表我们的用户在区域之间复制任何数据。

换句话说,“还记得我们告诉你我们拥有的所有高可用性吗?是的,这仍然取决于你。” 由于他们自己的笨拙,他们将集群中的主节点和辅助节点都取出,并且没有任何东西可以进行故障转移。然后当他们把它全部带回来时,突然出现了“重新镜像风暴”,因为节点试图同时同步,导致更多的拒绝服务。DNS 与它无关。

于 2011-04-30T01:54:22.507 回答