2011-04-30 32 views
2

在亚马逊失败并阅读了许多关于实践中冗余/分布式方法的文章之后,DNS似乎成了一个弱点。例如,如果将DNS设置为数据中心之间的循环,并且其中一个数据中心出现故障,则似乎许多浏览器都会缓存该DNS并继续点击失败的节点。当页面加载失败时,浏览器是否重新尝试DNS?

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

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

回答

1

循环法DNS是一个浏览器的东西。 This is how mozilla does it

单个主机名可能会解决多个IP地址,每个存储在 主机实体成功后,查找返回。 Netlib保留dns服务器返回IP地址的顺序。如果在连接期间的任何时候,当前用于主机名称的IP地址 失败,netlib将使用存储在主机实体 中的下一个IP地址。如果那个失败了,下一个被查询,依此类推。这个通过 可用的IP地址的进展是在NET_FinishConnect()函数中完成的。在url加载 被认为是完整的,因为它的连接发生了犯规,它的主机实体被咨询到 确定是否应该为给定主机尝试另一个ip地址。一旦IP地址失败,它就会出现,从缓存中的主机实体中删除。如果 中的所有IP地址主机实体出现故障,则netlib会发出“服务器未响应”错误,以备份呼叫 链。

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

Amazon says it best themself

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

换句话说,“记得我们告诉过你的所有高可用性吗?是的,这真的取决于你。”由于他们自己的笨拙,他们拿出了集群中的主要节点和次要节点,并且没有什么可以故障转移到。然后,当他们把这一切都带回来时,随着节点试图同步同步,突然出现“重新映射风暴”,导致更多的拒绝服务。 DNS与它没有任何关系。

相关问题