哈Ha! 以下是Evgeny
error2407 Bogomazov(网络研发工程师)和Dmitry
h8r Shemonaev(NOC负责人)过去UPTIMEDAY所做报告的抄录。 帖子末尾的视频。

今天,我们想谈谈构建任播网络时出现的问题。 我们为什么要涉足这一领域以及我们在做什么。

在Qrator Labs,我们建立了自己的任播网络,以解决不同于“普通”电信运营商的特殊问题。 因此,我们在这些地区都有据点-我们只是忘了在此处添加俄罗斯。 这意味着我们有很多关于如何做和不应该做的故事。 今天我们将与您分享其中的一些。

考虑到这个话题最初很庞大,我们要说些什么? 起初,我们只想进行问答(问题和答案),但仍然要求我们阅读该报告。 因此,如果我们什么也没说,但是我们绝对没有时间,那我们就待在后面。
作为计划的一部分,我们将尝试讨论使用DNS和BGP进行平衡之间的区别。 如何选择新站点以及您需要注意什么以避免以后的痛苦。 如何支持所有这一切以及德米特里将要讲的这项艰巨任务。

首先,让我们确定您对该主题的熟悉程度。
-有多少人知道什么是任播,以及为什么需要它? (大约有三分之一的人举起大厅)
-谁熟悉DNS和配置服务器? (大约相同的手数)
-和BGP(框架中的两只手)
还有很多。
-好,最后一个问题-谁熟悉NOC? 谁与供应商有问题,谁试图解决? (系统管理员Habr的手在框架中可见)
太好了 在这种情况下,我希望我们能告诉您的是。

在继续进行任播之前,让我们看看为什么需要它。 您有一个要用来处理客户请求的应用程序。 您被托管在某个地方-尽管您没有特别考虑。 购买DNS名称,将其解析,依此类推。 然后签署证书,因为是HTTPS。 您的应用程序正在增长。

首先,您必须处理负载。 如果您的应用程序同时“触发”-也就是说,它变得非常流行,那么会有更多的用户来找您。 您必须购买铁并平衡铁的负载。
此外,特别苛刻的客户可能会出现这样的字眼:“伙计们,您应该随时随地都可以得到这种钱!” 这导致这样一个事实,即您不仅要为高峰负载的处理而放置计算资源的冗余,而且还要作为备用资源。
此外,今天它已经在其他地方提到过,您不能将密封圈放在一个数据中心中-可能会发生自然灾害,这意味着应用程序将进入停机状态,这将造成财务和其他损失。 因此,如果您的应用程序已经足够扩展,那么您应该已经位于多个数据中心中,否则会很糟糕。

问题有另一面-如果您的应用程序对时间敏感,例如在财务分析或交易中,则对您而言,尽快将请求发送给用户很重要。 两点相连的臭名昭著的等待时间。 第一种-如果您想尽快提出请求,则为此,请求和响应的数量应尽可能少。 同样,事实是,当用户第一次与您建立联系时,一切都无法正常进行,他被迫穿越地狱的各个角落。 第二点是光速。 从西欧到俄罗斯的包裹不能超过一定的毫秒数,因此无可奈何。

有必要将其放置在多个数据中心中,因为我们需要冗余并且需要与潜在客户保持更近的距离。 例如,如果您的主要客户区域是美国,那么您将把设备放置在美国,这样流量就不会流到其他国家和地区。
事实证明,从某个时候开始,您将不得不出现在世界各地的不同地点。 而且这还不是任天堂。

因此,您需要一些站点。 您需要以某种方式选择它们,这些都是最初的,并且了解它们的扩展能力-在过载期间,您将不得不购买其他硬件。
如果您已经有多个站点,则需要学习如何在它们之间分配用户。 有两个主席:BGP和DNS。

从两点开始,我们将从最后一点开始。 还有两种主要方法。 首先,您拥有不同的站点,这些站点具有不同的IP,因此,当用户提出请求时,他会获得特定站点的IP并在其上进行映射。
我们在这里决定什么? 我们希望来自某个区域的用户访问位于相同区域的站点。 最简单,最愚蠢的解决方案是使用GeoDNS。 您已经了解了前缀所在的区域-您将这些数据,将其推送到DNS服务器中,如果源IP来自正确的前缀,则将用户映射到正确的站点。 但是有一个问题-解析器。 大约有15-20%的请求来自解析程序-也就是说,源IP为8.8.8.8。 放在哪里?
为此,有EDNS,它允许在请求的框架内传输来自其的原始客户端子网。 如您所知,2019年2月1日发生了DNS卖旗日-从那天起,所有DNS服务器都必须支持此扩展。
在此示例中,您可以拥有一个或多个站点来映射用户的DNS服务器,并且服务器本身可以分布在世界各地。 并且已经在DNS框架内有使用Anycast的机会-我们稍后再讨论。
在一般方案中,您将用户映射到最接近他的站点,并提供该特定站点的地址。 它的使用频率较低。
第三种方法与以下事实有关:即使用户来自站点所在的同一区域,也并不意味着延迟问题已得到解决。 将用户转移到另一个站点可能更有利可图,因为如果有其他路由可用,该区域可能会超载。 使用它会很好吗? 不幸的是,目前几乎没有解决方案来做类似的事情。 Facebook不知何故显示了他这样做的报告-但是没有框,所有事情都必须用自己的双手完成。

DNS有什么功能?
优点是可以为不同的用户分配不同的地址,并且可以将特定用户发送到严格定义的站点-也就是说,您可以与单个用户一起工作。 好吧,DNS易于配置。
不利之处是什么? 如果进行细微调整,则配置会快速增长,这是无法用手支撑的。 需要自动化。 如果自动化处理不正确,那么一切都会崩溃-如果DNS存在,则该应用程序将无法访问。
另一方面,如果执行DNS平衡,则用户将映射到特定站点,并且其IP将变得容易受到攻击。 这就是为什么我们不在家中使用DNS平衡的原因,因为在这种情况下,所有攻击流量都可以精确地在某一点流动,从而将其禁用。
并且如前所述,DNS不支持开箱即用的延迟平衡。 而自己做是非常困难的。

最后,让我们深入探讨BGP Anycast。
这正是我们的情况。 有什么意义? 所有站点都具有相同的IP,或者,它们声明相同的前缀。 用户映射到该站点的“最近”站点。 从BGP的角度来看,“最近”是这样的前缀:它是使用各种路由来宣布的,如果运营商有多个到达广告站点的路由,那么他通常会选择最短的路由。 再次从BGP的角度来看。 很快我们将解释为什么这很糟糕。
BGP还可以使用前缀的可用性,因此您始终在子网中运行,并且无法操作单个IP。
结果,由于从所有站点宣告了相同的前缀,因此来自同一区域的所有用户将被定向到同一站点。 攻击者无法将负载从一个区域转移到另一个区域,因此您需要在每个地方获得与选择此路线的操作员所需的功率一样多的功率。 即使您没有得分,也仍然可以受到保护。
宣布了相同的前缀-哪个更容易? 但是也有问题。
首先,由于需要在全球范围内宣布相同的前缀,因此您不得不购买独立于提供商的地址,而价格昂贵了几倍。
第二个原因归结为这样一个事实,即来自某个地区的用户如果突然间某些非法行为或目的是通过使用其他站点来分散攻击流量,则它们可能会被简单地扔入另一个地区。 没有这样的笔。
第三个问题是,在BGP框架内,选择“错误”站点和“错误”提供程序非常容易。 在您看来,您具有冗余性和可用性,但实际上两者都不存在。

您有几个要分散用户的站点。 限制特定区域并将用户吸引到特定站点的处理方法是什么?
有地理社区。 他们为什么呢? 让我提醒您-您从BGP的角度选择最近的路由。 您有一个Tier-1运营商,例如Level3,它在世界各地都有自己的后备箱。 如果您直接连接到Level3客户端,那么您有两个希望。 还有一些本地运营商-三分。 因此,来自美国的运营商会比来自俄罗斯或欧洲的运营商更靠近您,因为从BGP的角度来看,事实是如此。
使用地理社区,您可以限制一个如此庞大的国际运营商宣布您的路线的区域。 问题还在于它们并不总是可用(地理社区)。
关于我们自己,有几种情况。 昏暗?
(德米特里·谢莫纳耶夫(Dmitry Shemonaev)发言)

开箱即用,许多运营商没有提供此功能,而是说,我们不会为网络中立性,自由性等限制任何东西。 我们必须向运营商解释很长时间,我们是谁,为什么我们想要它,为什么它对我们如此重要,还必须教育为什么这不适用于他们所想到的中立性。 有时这可行-有时不可行,并且我们只是拒绝与可能感兴趣的运营商合作,因为这种合作将导致我们服务运营的进一步痛苦。
同样,我们经常遇到这样的事实,即Eugene已经提到了许多运营商-这些是Tier-1,它们不会从任何人那里购买流量,而只会在它们之间交换流量。 但是,除了他们之外,至少还有几十个不是Tier-1的运营商-他们购买流量,但同时他们还在全球部署了网络。 您不必走太远-离我们最近的是Rostelecom或ReTN,再远一点的地方还有很棒的台北电信,中国联通,新加坡电信等。
在亚洲,我们经常会遇到这样的情况:从该地区的角度来看,我们似乎在亚洲有多个业务点,并且与数个相当大的运营商建立了联系。 但是,我们一直面临着这样的事实,即来自亚洲的交通量会通过欧洲到达我们的站点或进行跨大西洋旅行。 从BGP的角度来看,这本身就很正常,因为它没有考虑延迟。 但是应用程序也会在这样的条件下遭受它的用户的痛苦-通常,每个人都会遭受痛苦,但是从BGP的角度来看,一切都很好。
而且您必须用手做出一些改变,对该操作员或该操作员的路线安排进行反向工程,有时会进行协商,询问,乞求,跪下。 通常,请采取任何措施来解决这些问题。 因此,我们的NOC面临令人羡慕的规律性。
通常,运营商可以满足他们的需求,并且在某些情况下愿意提供特定的服务。但是,总的来说,那些在社区级别使用BGP的人能举手吗? (笑)太好了! 也就是说,运营商准备提供一些社区经理,以便例如降低某个地区的本地偏好,或者添加前缀,或者不好好宣告或其他。
因此,有两种方法可以平衡BGP中的负载。 首先是如何将其写在幻灯片上,即所谓的 准备。 我们可以将BGP的路径想象成一小行,列出了自治系统,从发送者到接收者的数据包路径通过该自治系统。 您可以在该路径上添加第n个自治系统,结果,该路径将被扩展并且变得不太优先。 这是一种正面方法,并不适用于所有方法-如果添加前置符号,则它不是很精细的,也就是说,每个人都会在执行此操作的运算符的视锥中看到它。
另一方面,还有一个BGP社区,它们是标记社区,以便了解该前缀或前缀来自何处,相对于运营商而言(即宴席,客户或上游),以及前缀在何处以及以此类推。 还有一些社区管理员,他们将路由器转到运营商,而他使用此前缀执行某些操作。
大多数运营商都有限制性社区。 以抽象的俄罗斯操作员为例,它真空连接到许多俄罗斯操作员。 它们中的一些具有对等关系,这意味着流量的奇偶交换,而另一些则购买它们。 因此,它们通过扩展AS路径或不宣布或更改本地偏好来提供社区,以朝这个方向倾斜。 如果您使用BGP进行操作-请查看社区并了解申请人可以做些什么来成为您的供应商。 有时,社区是隐藏的,您必须与操作员经理或技术专家进行交流,才能向我们展示某些受支持的设备。
默认情况下,在欧洲地区,RIPE DB中描述了社区。 也就是说,您请求谁是自治系统的号码,并且“备注”字段通常会说出操作员在标记和管理社区方面所拥有的内容。 并非每个人都拥有此功能,因此通常您必须寻找其他有趣的地方。
实际上,一旦开始运行BGP,您就说网络是应用程序的一部分,而不是抽象的东西,因此您必须考虑风险。
例如,我们有一家拉脱维亚金融机构的案例,如果通过我们的网络将其前缀包括在内,那么在拉脱维亚的一半地区就无法使用该前缀。 尽管似乎没有什么改变-在欧洲,我们在Tier-1运营商中宣布了相同的前缀,但似乎一切都在这里,包括冗余。 但是我们甚至无法想象,大约有一半的拉脱维亚运营商将其无法消化全部视图(整个BGP路由表)作为边界设备,而当时该视图只有65万个前缀。 他们站在那里,好吧,如果有人知道Catalyst 3550是什么,它正好在那里站着,它只能有12,000个前缀。 好吧,他们从IX'a获得了一定数量的前缀,当然,在这些前缀上没有默认值。 与此同时,来自另一家运营商-拉脱维亚电视台,其第IX位的前缀不是/ 24,而是/ 24所在的/ 22。
结果,他去了一个他不知道将其路由到哪里的地方,所有的东西都飞进了管道。 为了解决此问题,我们花了大约两天的时间,并与拉脱维亚运营商保持了长期联系,直到他们向我们展示了其边界设备的输出,并且我们仅注意到那里的主机名。 大家好,有时候很好玩。
有很多操作员用旧铁。 许多运营商对网络的工作方式都有奇怪的理解。 现在,如果您要使用BGP,这也是您的问题。 好吧,最后,许多运营商都是一条腿(一个出色的连接提供商),因此他们有自己的拐杖。

(Evgeny Bogomazov继续)

如您所见,即使这个主题可以开发很长时间,也很难保持在40分钟之内。
因此,您有想要限制区域的笔。 现在,让我们弄清楚您需要看什么,以及要容纳在新站点上时需要考虑的重要因素。
最好的情况不是购买硬件,而是同意托管上的云。 然后,已经可以与他达成协议,您将独立连接到某些提供商。
另一方面,如果您仍然沿着这条路走,则应该大致了解哪个区域(带或不带手柄)将被拉到该站点。 为此,您需要建模,或者更确切地说,您需要了解,如果有来自不同站点的多条路由,则将选择哪一条为最佳。 为此,您应该对BGP如何工作以及路由在当前情况下如何流通有一些了解。
两个要点是路径的长度(受前缀和本地偏好的影响),这表示从客户的路由比从其他位置的路由更可取。 原则上,这两点足以了解哪个区域将被拉在一起以及从哪里起床。
除其他事项外,还有几件事情要考虑,即您的供应商具有什么样的连通性,另外,一些供应商之间不会进行通信(对等战争),即使您连接到第1层区域,这也不意味着所有本地用户都会看到您。经常被遗忘的另一件事是,IPv4和IPv6中的连通性是完全不同的,不能相互移植。
. : « ?» . — IX . , , , , , , IX' . , IX' , , — .
— , . — , , , IX'.
, , , ?
( )
. , . - , , , BGP anycast — .
该企业与技术同事共同决定,从符拉迪沃斯托克(Vladivostok)到莫斯科(Moscow),RTT很大,这很不好,即不好。假设我们将留在莫斯科,结束新西伯利亚,一切都会好起来,RTT当然会下降。言归正传。这就提出了一个设备站点的问题,但这超出了我们今天的讨论范围,但是选择操作员的问题却相当多。, — «», . , , — , IGP , , . , — , , .
, «» , SDN , . . , SDN-, (CenturyLink) . - . NOC . - .
— .
, , — . — «», — «» ( ). , , «». , , . , , , -, , . - .
. community, NOC. , , , - - - DE-CIX . blackhole community.
, , . , , , - , - , . , . , — NOC , NOC , . . .
让我们回到NOC。网络运营中心-网络管理中心,这是从事网络运营,网络运营等工作的公司部门。回答有关网络收到的许多票证。您要添加什么?在这个房间的爱知县总和中长大的专家们可能知道监视的所有好处。这真的很重要。在某些情况下,非常具体的事情将必须受到监控。
一些用户可能会抱怨“一切都不好”,无法提供开始工作以纠正这种情况所需的诊断信息。有一个坏信号-不清楚什么地方。在这种情况下,我们尝试与该用户所在客户区中的操作员的NOC进行交互。如果无法解决问题,那么我们看一下相关性是什么-圆锥体内有RIPE Atlas项目节点的可能性。总的来说,我们会尽力而为。我们已准备好他们无法总是给我们的东西。community , . : , . , , . , , - community, . , - — community . community, . , , . community , . 这是什么意思? latency — . - , , .
— 10 , , Ansible, Chef, Puppet, . ? BGP : « BGP-, ». .
我个人有一个案例,当我在萨马拉运营商中将所有对等点从一个边界转移到另一个边界时,我们不会命名。我与一家主要的内容提供商(一家在线电影院)建立了联系,并且与Rostelecom的本地女儿建立了联系。仅在内容管理器中,我有一个千兆字节的连接,而我的女儿则有一个100 MB的连接。作为一个令人愉快的人,我在晚上忍受了所有这些-我看了一下图形,在百兆位的连接处思考:“哦,怎么了!”然后我看-那个在军团里,一个在军团里,我想(打在额头上)-我忘了做过滤器。这与他们的行动是格格不入的,因为其他所有人都接受的三连击,只需要通过自动化来保护。自动化是坏人的敌人,也是好人的朋友。那你真是,振亚。
(Evgeny Bogomazov继续)因此,我们讨论了所有初始要点。但是,随便什么,一切都不会结束;除了他以外,您还需要跟踪其他其他事情。
让我们看看还有什么。您需要查看应用程序与发行版的集成程度如何-如果有多个站点,则需要能够分散这些站点上的内容。如果这不可能,那么无论您的系统如何分布,所有用户都将转到该应用程序实际所在的站点。而RTT则无法保存。, , — . , anycast , — .
- — - , , . . anycast , — - , .
, - , , , . - , - - , , , — .

, — . — , — . , , BGP . , - , , .
, . — , DNS — . SDN' - , , , .

— DNS. Dyn — , 2016 , . DNS , . DNS- , , IETF , , DNS-.
, DNS. , , . RTT, , DNS- , , - . — DNS.
anycast DNS , DNS- .

? , latency, , .
正如我们已经提到的,自然仍然存在。部分由于这个原因,您需要放置在不同的位置。尽管风险似乎很小,但不应忘记这一点。还有一个人和一个机会因素。因此,您应该使所有操作尽可能自动化,测试注入的配置并监视更改。即使您采取了某些措施,也可以在本地快速进行更改,这将是一件好事。这是90%的情况。但是剩下的10%-如果竞争对手决定淘汰您。在这种情况下,您将遇到严重的问题。为什么“保留”以单独的大字体突出显示?如果您决定投放,则您的网站上将需要大量的渠道,这意味着您需要与大量的提供商进行协商。否则,按照目前的平均攻击水平,您根本无法做到。
, . , anycast , , . — . , .
, . .
谢谢你 ?