Networking 如何将网络请求分派到(地理上)最近的服务器

Networking 如何将网络请求分派到(地理上)最近的服务器,networking,tcp,load-balancing,latency,Networking,Tcp,Load Balancing,Latency,我是一名Java程序员,不太熟悉网络的工作原理(除了基本的UDP/TCP连接) 假设我在美国、亚洲、拉丁美洲和欧洲的机器上运行服务器。当用户请求服务时,我希望他们的请求转到离他们最近的服务器 我是否可以拥有一个地址:mycompany.com,并以某种方式将请求路由到相应的服务器?显然,当有人访问cnn.com时,他们会从附近的服务器接收图片、视频等。坦率地说,我不明白这是怎么回事 顺便说一句,我的服务器不提供网页,它们提供其他服务,如股票市场数据……以防万一 由于我是一名程序员,我很想知道如何

我是一名Java程序员,不太熟悉网络的工作原理(除了基本的UDP/TCP连接)

假设我在美国、亚洲、拉丁美洲和欧洲的机器上运行服务器。当用户请求服务时,我希望他们的请求转到离他们最近的服务器

我是否可以拥有一个地址:mycompany.com,并以某种方式将请求路由到相应的服务器?显然,当有人访问cnn.com时,他们会从附近的服务器接收图片、视频等。坦率地说,我不明白这是怎么回事

顺便说一句,我的服务器不提供网页,它们提供其他服务,如股票市场数据……以防万一


由于我是一名程序员,我很想知道如何在软件中做到这一点。由于这只不过是一个无聊的好奇心,指向商业产品或服务的指针对理解这个问题不会有太大帮助:)

一个简单的方法是查看进入UDP DNS请求的IP地址的第一个字节(A类),然后基于此,您可以提供正确的地理位置IP

另一种方法会稍微复杂一些。您可以使用对该用户具有最低延迟的服务器,而不是使用地理位置最接近该用户的服务器

较低的延迟将提供更快的传输速度,同时比地理位置更易于计算

要获得更详细的信息,请查看这篇关于CDN的文章(请注意技术部分):


这些是大型网站用于通过网络分发其内容的网络类型(Akamai是一个流行的示例)。正如你所看到的,CDN拥有自己的专有协议等等,事情很快就会变得非常复杂。

更新:我没有看到原始帖子末尾关于商业解决方案的免责声明。我将把这个留给那些可能感兴趣的人

--

看一看。像这样的托管DNS服务可能正是您完成所需的

亚马逊,福布斯,甲骨文,都在使用它们

引自:

UltraDNS流量管理解决方案提供了一组工具,允许IT管理员为位于一个或多个地理位置的内容服务器定义负载平衡配置。流量管理解决方案通过动态更改对DNS请求的响应来管理定向到服务器的流量。负载平衡是基于从主机服务器获得的动态指标在持续监视的基础上执行的。UltraDNS流量管理解决方案不是一个单一的应用程序,而是结合了多个现有UltraDNS系统的功能来控制流量、管理站点故障和优化web内容系统


如Jeff所述,一种方法是使用IP地址:

根据我的经验,这是精确到最近的相对较大的城市(至少在美国)。有几个开放的数据库可以帮助实现这一点(请参见wiki链接)。然后,您可以根据这些信息生成图像标签和下载链接等


至于查找最近的服务器,我相信您可以想出一些方法。例如,如果你能得到的最佳回报是主要城市,你可以在纬度/经度列表中查找该城市,并根据该城市计算最近的服务器。

因此,假设客户机C向我的“代理”服务器p发出请求,我注意到服务器X离C最近,所以我将他的请求转发给X。但这不意味着所有流量都进入代理P,然后我将其路由到最近的服务器吗?如果P在纽约,这是否意味着东京的流量到达纽约,然后纽约将每个数据包转发到北京最近的服务器?代理如何告诉东京与北京对话,然后退出循环?C第一次想要连接到您的服务器时,他将对其本地DNS进行DNS查询。他的本地ISP的DNS服务器将没有IP地址,因此ISP的DNS将向您的名称服务器发送UDP DNS请求。为简单起见,假设他的ISP的DNS离他很近。然后,根据DNS查询的源IP地址,决定为其DNS查询发回哪个特定IP。这是一次一个会议的事情。从那时起,客户端直接连接到IP。不需要转发。Jeff的第二个答案(带有DNS信息)与我想理解的最接近。我并不是什么都懂,但我有一些与谷歌更相关的关键词。我显然不能标记非家长的评论。谢谢下面的securitynow()播客片段可能有助于了解正在发生的事情以及此解决方案的工作原理:25、26、155和157