我的 Spring Boot 后端应用程序可以确定哪个 CDN 代理服务器距离客户端最近吗?

问题描述 投票:0回答:1

我有一个 Spring Boot 后端应用程序,它作为 docker 容器托管在我的 Linux 服务器中。

我有一个用户访问我的网站并打开产品目录的情况。产品目录包含大量图片。

  1. 用户的浏览器向后端服务器发送http请求,以获取该产品目录网页所需的所有数据。
  2. 后端从前端(用户的浏览器)获取此http请求, 处理这个请求(在后端,从数据库中检索数据(在我的例子中是 Postgresql))。
  3. 然后后端以json的形式返回http响应 其中包含有关该产品目录中每个产品的信息, 包括产品图片的链接(例如
    http://cdn.example.com/images/product1.jpg
    )。
  4. 前端使用这个url地址
    http://cdn.example.com/images/product1.jpg
    下载产品图片。
  5. 在此步骤中将进行 DNS 查找。 DNS 尝试确定与该域名相关的特定物理地址
    http://cdn.example.com/images/product1.jpg

那么接下来会发生什么?我的理解很差。

我刚刚听说后端可以在数据库中存储一些有关用户的数据,以确定哪个CDN代理服务器距离客户端最近。

我想知道我的 Spring Boot 后端应用程序如何完成此任务?或者应该由系统的其他部分来完成?

java spring spring-boot backend cdn
1个回答
0
投票

我认为明确区分“最近的 CDN 节点”和“最近的后端 API”问题很重要。

CDN 背后的主要思想是,为了使我们的系统在分布式加载方面更加可靠和高性能,我们引入了隐藏原始应用程序(CDN 边缘节点)的分布式代理和缓存。在此过程中,我们添加一条指向 CDN 边缘节点 IP 地址的 DNS 记录。可能会存储具有此域的 URL。在幕后,CDN 代理节点向我们的源服务器发出请求并缓存结果。如果源服务器中断,由于边缘缓存,我们的静态数据可能仍然有效。那么,下一个问题是如何找到最好(最近)的 CDN 边缘节点?

任播 DNS

Anycast DNS 是一种流量路由算法,允许将一个 IP 地址分配给多个节点。该方法具有有益的优点:

  • 高可用性,得益于多个冗余节点共享相同的 IP 地址
  • 降低延迟,因为流量被路由到地理位置最近的服务器
  • 通过添加新节点进行扩展

好的,我们最近的 CDN 节点具有相同的 IP,并且由于 Anycast,路由器将选择它作为最近的节点。目前还不清楚这如何保证我们不会穿越世界去寻找最近的节点? IXP 将帮助我们回答如何避免长号效应(低效的查询网络路径)。

IXP Internet 交换点 (IXP) 是一个物理位置。互联网服务提供商和 CDN 提供商共享基础设施,以建立最有效的跨网络通信。 IXP 表现为一栋或多栋实体建筑,根据特定需求,免费连接网络或某些会员可能收取服务费会很有帮助。因此,CDN 的边缘节点最接近特定客户端 IXP,该客户端与其他网络(尤其是与 CDN 提供商)连接良好。可以在那里找到 IXP 地图。 https://www.internetexchangemap.com/

因此,让我们想象一下,我们有带有图片的 CDN 并可以有效地获取它们,但是为特定客户端找到最近的后端 API(返回图片的元数据)还存在另一个问题。 GeoDNS 登场。对于您的 API 服务器的同一域,GeoDNS 会根据客户端的 IP 返回不同的 IP 地址,因此您位于德国的服务器只会处理来自法国的用户的请求,因为 GeoDNS 服务器认为法国比美国更近。

总而言之,您的 Spring Boot 应用程序并不能决定谁距离您的客户最近。它是 IXP + 安装的 CDN 节点 + 缓存常规响应的 Anycast DNS 和用于自定义服务器 API 的 GeoDNS 的组合

值得一读: https://www.cloudflare.com/learning/dns/what-is-anycast-dns

© www.soinside.com 2019 - 2024. All rights reserved.