domain-name-system – 多个数据中心和HTTP流量:DNS Round Robin是确保即时故障转移的唯一方法吗?

指向同一域的多个A记录似乎几乎专门用于实现DNS Round Robin作为廉价的负载平衡技术.

针对DNS RR的常见警告是它不利于高可用性.当1个IP关闭时,客户端将继续使用它几分钟.

负载均衡器通常被认为是更好的选择.

两种说法都不完全正确:

>当流量为HTTP时,如果前一个记录关闭,大多数HTML浏览器都能够自动尝试下一个A记录,而无需新的DNS查找.阅读here chapter 3.1here.
>当涉及多个数据中心时,DNS RR是分配流量的唯一选择.

那么,对于多个数据中心和HTTP流量,使用DNS RR是确保一个数据中心出现故障时即时故障转移的唯一方法吗?

谢谢,

华伦天奴

编辑:

>当然,每个数据中心都有一个带热备份的本地负载均衡器.
>为即时故障转移牺牲会话亲和力是可以的.
> AFAIK是DNS建议数据中心而不是另一个数据中心的唯一方法是仅回复与该数据中心关联的IP(或IP).如果数据中心无法访问,则所有这些IP也都是不可访问的.这意味着,即使智能HTML浏览器能够立即尝试另一个A记录,所有尝试都将失败,直到本地缓存条目到期并完成新的DNS查找,获取新的工作IP(我假设DNS自动建议到新的数据中心,当一个失败).因此,“智能DNS”无法确保即时故障转移.
>相反,DNS循环允许它.当一个数据中心发生故障时,智能HTML浏览器(大多数)立即尝试将其他缓存的A记录跳转到另一个(工作)数据中心.因此,DNS循环不保证会话亲和力或最低RTT,但似乎是确保客户端是“智能”HTML浏览器时即时故障转移的唯一方法.

编辑2:

>有人建议使用TCP Anycast作为最终解决方案.在this论文(第6章)中解释了Anycast故障转移与BGP收敛有关.因此Anycast可以使用15分钟到20秒完成.
在为此优化拓扑的网络上,可以使用20秒.
可能只有CDN操作符可以授予这种快速故障转移.

编辑3:*

>我做了一些DNS查找和traceroutes(也许一些专家可以仔细检查)和:

>使用TCP Anycast的唯一CDN似乎是CacheFly,其他操作符如CDN网络和BitGravity使用CacheFly.似乎他们的边缘不能用作反向代理.因此,它们不能用于授予即时故障转移.
> Akamai和LimeLight似乎使用地理感知DNS.但!他们返回多个A记录.
来自traceroutes似乎返回的IP位于同一数据中心.所以,当一个数据中心出现故障时,我很困惑他们如何提供100%的SLA.

解决方法

当我使用术语“DNS Round Robin”时,我通常意味着在“廉价负载平衡技术”的意义上,正如OP所描述的那样.

但这并不是DNS可用于全球高可用性的唯一方式.大多数时候,具有不同(技术)背景的人很难沟通.

最好的负载平衡技术(如果钱不是问题)通常被认为是:

> Anycast的全球“智能”DNS服务器网络,
>和一组全球分布的数据中心,
>每个DNS节点实现Split Horizo​​n DNS,
>以某种方式监控“智能”DNS节点的可用性和流量流,
>以便用户DNS请求通过IP Anycast流向最近的DNS服务器,
>此DNS服务器通过“智能”水平分割DNS为该最终用户分发最近/最佳数据中心的低TTL A记录/ A记录集.

使用Anycast for DNS通常很好,因为DNS响应是无状态的,几乎非常短.因此,如果BGP路由发生变化,则极不可能中断DNS查询.

Anycast不太适合更长和有状态的HTTP对话,因此该系统使用水平分割DNS.客户端和服务器之间的HTTP会话保持在一个数据中心;它通常无法在不中断会话的情况下故障转移到另一个数据中心.

正如我在“A A Records”中指出的那样,我称之为“DNS Round Robin”的东西可以与上面的设置一起使用.它通常用于将流量负载分散到每个数据中心的多个高可用负载平衡器上(这样您可以获得更好的冗余,使用更小/更便宜的负载平衡器,而不是压倒单个主机服务器的Unix网络缓冲区等).

So,is it true that,with multiple data centers
and HTTP traffic,the use of DNS RR is the ONLY
way to assure high availability?

不,这不是真的,如果通过’DNS Round Robin’,我们只是意味着为一个域分发多个A记录.但巧妙地使用DNS确实是任何全球高可用性系统中的关键组件.以上说明了一种常见的(通常最好的)方法.

编辑:在我看来,Google论文“Moving Beyond End-to-End Path Information to Optimize CDN Performance”在全球负载分配方面是最先进的,可以获得最佳的最终用户性能.

编辑2:我阅读了OP链接到的文章“Why DNS Based .. GSLB .. Doesn’t Work”,这是一个很好的概述 – 我建议看一下.从顶部读取它.

在“浏览器缓存问题的解决方案”一节中,它提倡DNS响应,其中多个A记录指向多个数据中心,作为即时故障转移的唯一可能解决方案.

在靠近底部的“浇水”一节中,它显而易见,如果他们指向多个大洲的数据中心,则发送多个A记录是不冷却的,因为客户端将随机连接,因此经常会变得“缓慢” DC在另一个大陆上.因此,为了使其工作得非常好,需要在每个大陆上安装多个数据中心.

这是一个与我的步骤1 – 6不同的解决方案.我不能提供一个完美的答案,我认为需要来自Akamai或Google之类的DNS专家,因为大部分原因归结为实用技术诀窍今天部署的DNS缓存和浏览器的局限性. AFAIK,我的步骤1-6是Akamai用他们的DNS做的事情(任何人都可以证实这一点吗?).

我的感觉 – 来自在移动浏览器门户(手机)上作为PM工作 – 是因为浏览器的完全破坏的多样性和水平令人难以置信.我个人不相信需要终端用户终端“做正确的事”的HA解决方案;因此,我认为,如果不打破会议,全球瞬时故障转移在今天是不可行的.

我认为上面的步骤1-6是商品技术中最好的步骤.此解决方案没有即时故障转移.

我很喜欢来自Akamai,Google等的DNS专家之一来证明我的错.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


HTML代码中要想改变字体颜色,常常需要使用CSS样式表。CSS是一门用来描述网页上样式的语言,通过编写CSS代码可以实现网页中各元素的大小、颜色、字体等各种样式的控制。那么如何在HTML代码中应用CSS样式来改变字体颜色呢?这里为大家介绍一下。 首先,在HTML代码...
HTML代码如何让字体盖住图片呢?需要使用CSS的position属性及z-index属性。 img { position: relative; z-index: -1; } p { position: absolute; to...
HTML代码字体设置 在HTML中,我们可以使用标签来设置网页中的文字字体。常用的字体标签是font和style,下面我们来学习如何使用这些标签。 1. font标签 使用font标签可以改变文字的字体、颜色和大小。它有三个属性font-family、color和...
在网页设计中,HTML代码的字体和字号选择是非常重要的一个环节,因为它们直接关系到页面的可读性和视觉效果。 要指定文本的字体和字号,可以使用HTML中的样式属性。使用样式属性设置字体和字号,如下所示: <p style="font-family: Aria...
HTML(Hypertext Markup Language,超文本标记语言)是一种用于创建网页的标准语言。它由许多标签(一对尖括号包围的关键字)组成,这些标签告诉浏览器如何显示内容。使用HTML代码,我们可以轻松地创建各种类型的图像和图形,如太极图。 在HTM...
外链是指在一个网页中添加一个指向其他网站的链接,用户可以通过这个链接直接跳转到其他网站。在HTML中,实现外链的方法很简单,只需要使用标签就可以了。 <a href="http://www.example.com">这是一个外链,点击跳转到www.ex...
HTML代码是实现网页界面的基础,而网页中的各种表单则是用户和网站进行交互的重要方式之一。下面我们来介绍如何使用HTML代码实现一个简单的报名表格。 <form action="submit.php" method="post"> &lt...
HTML是一种标记语言,用于开发网站和其他互联网内容。字体是网站设计中的关键元素之一,它可以决定网站的整体风格和呈现效果。HTML提供了字体编辑器,使网站设计变得更加容易。 <font face="Arial"> 这里是Arial字体 &...
HTML代码中,字体样式是开发者们必备的一部分。在HTML中,我们可以通过特定的标签和属性设置字体的样式、颜色和大小,以达到更好的排版效果。 <p style="font-size: 14px; color: #333; font-family:...
HTML中的字体可以设为粗体,以强调文本信息。我们可以通过使用一些标签来实现这一功能。其中,常用的标签包括: 1. 标签:该标签会把文本加粗显示,语法如下: 这是一段加粗的文本 2. 标签:与标签作用相同,但语义更强,表示该文本内容的重要性。语法如下:...
HTML代码可以实现文件的上传和下载,在网页开发中相当常见。通过使用<input>标签和<form>标签,我们可以轻松创建一个文件上传表单。 <form action="upload.php" method="post" enct...
HTML代码非常常见于网页设计中。在一些需要处理时间相关数据的场景下,可能需要将时间戳转换为实际时间,这时候就需要使用一些特定的HTML代码。 function timeStamp2Time(time){ var date = new Date(time...
HTML是一种用于创建网页的标记语言。在HTML中,我们可以使用超链接标签实现下载文件到本地的功能。 具体实现步骤如下: <a href="文件的URL" download="文件名">下载文件</a> 其中,href属性是文件...
在HTML代码中,对于字体靠左对齐有各种方法。其中最简单的方式之一是使用pre标签。 使用pre标签可以保留一段文本中的空格和换行符,从而使代码排版更加整齐。下面是一个例子: <p>这是一个段落。</p> &lt...
HTML代码字典是一本解释HTML标记和属性的参考文献。这本字典中包含了最常用的HTML代码以及它们的属性和值的详细描述。 例如,以下是HTML代码字典中的一部分内容: <a href="url">link text</a> 在...
在网页开发过程中,遇到一些需要用户复制的内容,我们通常都会提供复制按钮,让用户更方便地复制所需内容。下面我们来介绍如何使用html代码实现一键复制的功能。 var copyBtn = document.querySelector('#copy-bt...
用户登录 欢迎来到公司登录界面,请输入用户名和密码登录 用户名: 密码: 代码解释: 第1行:定义了一个 HTML 文档 第2行:开始了 HTML 头部 第3行:定义了...
HTML 代码是用来创建网页的语言,它包含了许多不同的元素和属性,让我们可以在网页中添加各种不同的元素和内容,如文字、图片、链接等等。在编写 HTML 代码时,我们可以使用各种不同的样式来美化我们的网页,例如更改字体、颜色、大小等等。 font-family:...
HTML代码中的字体转移 在编写HTML代码时,我们经常会使用各种字体来增强页面的可读性和视觉效果。但是,有些字符或特殊符号可能会在HTML中具有不同的含义,这就需要使用字体转义转换成HTML可以正常显示的字符。 在HTML中,使用"&"符号表示一个特殊字符将要被转...
HTML 编程语言中,你可以使用字体属性来更改文本的字体大小、颜色和样式。其中,字体颜色是最常用的样式更改。在 HTML 中,你可以使用 "color" 属性来更改文本的颜色。下面是一个使用 "pre" 标签的代码示例,演示如何使用 "color" 属性来更改字体颜色...