什么是“任播”,它有什么用处?

直到几秒前我读到“ 什么是一些很酷或有用的服务器/networking技巧? ”我从来没有听说过任播。

维基百科的“ 任播 ”上的文章是相当正式的,并不真正唤起如何使用的心理图景。

有人可以用一些非正式的句子来解释“anycast”是什么,你是如何configuration的(就一般意义而言),它的好处是什么(它是什么使它更容易)?

    Anycast是networking技术,其中从多个位置通告相同的IP前缀。 networking然后基于路由协议成本以及可能的广告服务器的“健康(health)”来决定将用户请求路由到哪个位置。

    Anycast有几个好处。 首先,在稳定状态下,Anycast服务的用户(DNS是一个很好的例子)将始终连接到“最接近”(从路由协议的angular度来看)DNS服务器。 这样可以减less延迟,并提供一定的负载平衡(假设您的用户均匀分布在您的networking中)。

    另一个优点是易于configurationpipe理。 您不必根据服务器/工作站的部署位置(亚洲,美洲,欧洲)configuration不同的DNS服务器,而是在每个位置configuration一个IP地址。

    根据Anycast的实现方式,它也可以提供一个高可用性级别。 如果任播路由的广播是以某种健康状况检查为条件的(例如,在本例中是一个众所周知的域的DNS查询),那么一旦服务器出现故障,它的路由就可以被删除。 一旦networking重新聚合,用户请求将无缝转发到下一个最近的DNS实例,而不需要任何手动干预或重新configuration。

    最后的优点是水平缩放; 如果您发现一台服务器正在被过载,只需在另一台服务器上部署一个服务器即可。 同样,由于不需要客户端configuration,所以可以很快完成。

    经常让我理解“选播”的事情之一是,虽然这是一个高层次的术语,但在实际实施中,通常可以归结为两个例子:

    1. 路由器使用BGP通过多个ASpath通告相同的IP块,作为将用户引导到“更近的”站点的粗略方式。 同时,通过从陷入困境的网站中撤回路由,可以为其他站点提供接近透明的故障转移。 这几乎可以用于任何协议,尽pipe显然它引发了大量的后端数据同步问题。

    2. 在您自己的networking中从多个点(通过静态路由 , OSPF , EIGRP或其他)发布相同的服务IP。 如果路由权重不同,则作为故障转移机制。 如果路由均衡加权,则可以利用大多数名牌厂商路由器的每个数据包或每个数据stream的负载平衡function。 你必须小心, 应用层协议是适应这个的,这就是为什么你几乎总是听说与DNS一起使用,其中一个请求总是一个数据包,一切都是无状态的。 就个人而言,我认为这是因为DNS和适当的负载均衡器的组合几乎总是一个更好的解决scheme,这是对networking层的应用层问题的一种骇人的入侵。

    主要用于基于UDP的服务,如DNS。 基本上,您在全球多个数据中心中宣布了相同的路线。 这样,您的客户将被发送到基于BGP路由的“最好”和“最接近”的数据中心。 我把“最好”和“最接近”放在引号中,因为networking提供商可以以不同的方式玩游戏和路由来自特定networking的stream量。 一般情况下,事情与任播最好的,但它不是一个保证。

    例如,将您的DNS服务器列为1.2.3.4和1.2.3.5。 你的路由器会在多个数据中心中公布一个1.2.3 / 24的路由。 如果你在日本,有一个数据中心,那么你很有可能会到达那里。 如果你在美国,你会被发送到你的美国数据中心。 同样,它是基于BGP路由而不是实际的地理路由,但通常情况下是如何分解的。

    根据我最初的回应,我刚刚在我的博客上发表了两篇文章,题为:Anycast DNS – 第3部分,使用RIP和Anycast DNS – 第3部分,使用RIP(续)。 后者更详细,但在www.netlinxinc.com/netlinx-blog.html中,您将find关于如何使用RIP为Anycast DNSconfigurationCisco路由器和基于Open Source Quagga主机的路由软件的实际配方。

    我目前正在编写系列文章的第四篇文章。 这将提供接收方如何使用OSPF部署Anycast DNS。 在本系列的最后,我将展示使用BGP部署Anycast DNS的食谱。

    任播DNS – 第1部分,概述

    任播DNS – 第2部分,使用静态路由

    任播DNS – 第3部分,使用RIP

    Anycast DNS – 第3部分,使用RIP(续)

    鉴于目前主要是DNS

    非正式地,通过允许您在全球多个地点使用相同的地址设置相同的服务,它使您的服务更具弹性,更好的networking访问/延迟/速度。 当有人查询这个地址时,他们会得到最近的/最好的路线。

    从服务器的angular度来看:

    如果单播是一个人,多播是几个,广播是所有人,那么任播是schitzophrenic和具有多个个性最适合每个人的个性与他们连接。 嗯。 不是最好的比喻。

    Anycast的一个非常有趣的用途是DNS。 您可以将5个不同的DNS服务器放置在不同的物理位置和networking位置,但共享一个(有时也包括主要和次要DNS)地址。 根据来源的位置,它们被路由到最近的节点。 这做一些stream量平衡加上它提供冗余,如果DNS服务器死亡。

    据我的一位同事说,它也可以用作DoS攻击缓解技术,因为人们只能攻击“最近的”任播IP地址,所以如果美国有大量的zombine,那么你的Euro网站将会是大多不受影响,因为它们实际上不能将数据包发送给它。

    如果它们显然来自某个不太可能在B​​GP中作为正确路由被公布的地方(例如,当ASN指示N个美国人时进入欧洲的分组),则它可能被用作(有些天真地)过滤欺骗分组的方式块)。

    同样值得注意的是,Anycast对于某些TCP连接来说不是好的或者可靠的,这些连接不能在重置或者长时间的通话中存活。

    使用BGP的任播IP告诉互联网,有2个,3个或更多的path到一个特定的HOST ,但实际上它们不是相同的主机 ,它们是通过多个数据中心通告的主机的精确副本,以实现更低的延迟连接。

    例如,我有3个服务器为198.251.86.133做301非wwwredirect,如果你ping这个主机,你可能会得到DUPLICATE响应有时,甚至下降,取决于你的位置,因为我的服务器是美国东,美国西欧和欧元。 对于短时间连接(如浏览器caching的301),这可以使最近数据中心的本地服务器进行快速响应。

    从冗余的angular度来看,没有任何内置的任播,你仍然需要在每个站点独立冗余,因为IP(典型场景)总是指向那些数据中心。