我想这个问题可能很有趣,CDN在DNS级别上如何工作,但我真正的问题是我的公司在三大洲都设有数据中心,我们必须有europe.example.com us.example.com和asia.example .com
CDN通常会根据您的IP地址将您发送到本地数据中心。这一定是DNS事物,您在美国拥有DNS服务器会将您发送到美国数据中心以进行相同的example.com DNS查找?
我错了吗?如果我对此有误,如何在没有中央(非DNS)服务器的情况下有效地做到这一点?
我想这个问题可能很有趣,CDN在DNS级别上如何工作,但我真正的问题是我的公司在三大洲都设有数据中心,我们必须有europe.example.com us.example.com和asia.example .com
CDN通常会根据您的IP地址将您发送到本地数据中心。这一定是DNS事物,您在美国拥有DNS服务器会将您发送到美国数据中心以进行相同的example.com DNS查找?
我错了吗?如果我对此有误,如何在没有中央(非DNS)服务器的情况下有效地做到这一点?
Answers:
CDN的麻烦在于它们不会根据您自己的IP地址来定向您-它们会根据您的DNS服务器的IP地址来定向您...这可能是完全错误的。并阅读Paul Vixie的ACM文章,这真是物超所值。
无论如何,如果已经region.example.com
设置并运行,则可以考虑example.com
根据客户端的IP地址进行HTTP重定向到相关的Web服务器。
那几乎就是Google所做的,这就是我最终google.co.uk
输入的方式google.com
。
还请确保尽管您为客户提供了一种获取其他变化的方式。当客户被迫访问某个特定站点时,无论是由于地理数据库中的错误还是仅仅是因为他们实际上确实需要从其他地区查看该站点,他们都不喜欢它。
较新的CDN(Cloudflare,MaxCDN,fast.ly)对DNS和实际内容服务器都使用任播。这比尝试使用DNS查询的源IP和不断变化的映射数据库要好一些。
从理论上讲,对DNS和内容服务器都使用任播,网络本身就可以找到客户端的“最近”服务器。实际上,大多数情况下都是如此,但是由于ISP之间的对等关系不断变化,新加坡的人们将访问加利福尼亚而不是香港的边缘服务器,这是一些奇怪的情况。
Anycast 很难做好。
像Akamai和Limelight这样的较老的CDN通常使用Anycast将您带到最近的DNS服务器,但随后采取基于源IP猜测的方法。根据我的经验,这种方法不太适用,尤其是如果客户端使用的DNS服务器在网络拓扑方面实际上并不在附近。但是,像Akamai这样的庞大的已建立CDN具有数百个内容服务器位置,因此返回“足够接近”的答案会带来不错的用户体验。显然,拥有数百个站点非常昂贵,这就是为什么所有广播CDN都没有选择该路由的原因。因此,对于大多数同等服务,他们也不收取太多费用。
有很多方法可以解决此问题,但是它们都归结为找出IP地址在哪里,并相应地指出它。例如,您可以为北美指定一个IP范围,为欧洲指定一个IP。如果请求信息的IP(从DNS,您的Web服务器,您的内容服务器等)属于欧洲范围,则您的欧洲服务器应会收到请求。
如果您的网站托管在多个区域,则无需在DNS级别进行任何操作。您可以使用诸如http://ipinfo.io之类的API 来获取访问者的国家/地区,然后将其重定向到相应的URL。
如果我们不是在谈论网站或处理重定向的任何协议,则在DNS级别上有一些选择。您可以执行相同的IP国家/地区查询,然后返回与该区域匹配的记录(基于地理位置的DNS),或者可以绘制不同网络之间的延迟映射,并返回代表用户最低延迟的记录(延迟基于DNS)。亚马逊的Route53 DNS服务同时提供。