我有一个 Spring Boot 后端应用程序,它作为 docker 容器托管在我的 Linux 服务器中。
我有一个用户访问我的网站并打开产品目录的情况。产品目录包含大量图片。
http://cdn.example.com/images/product1.jpg
)。http://cdn.example.com/images/product1.jpg
下载产品图片。http://cdn.example.com/images/product1.jpg
。那么接下来会发生什么?我的理解很差。
我刚刚听说后端可以在数据库中存储一些有关用户的数据,以确定哪个CDN代理服务器距离客户端最近。
我想知道我的 Spring Boot 后端应用程序如何完成此任务?或者应该由系统的其他部分来完成?
我认为明确区分“最近的 CDN 节点”和“最近的后端 API”问题很重要。
CDN 背后的主要思想是,为了使我们的系统在分布式加载方面更加可靠和高性能,我们引入了隐藏原始应用程序(CDN 边缘节点)的分布式代理和缓存。在此过程中,我们添加一条指向 CDN 边缘节点 IP 地址的 DNS 记录。可能会存储具有此域的 URL。在幕后,CDN 代理节点向我们的源服务器发出请求并缓存结果。如果源服务器中断,由于边缘缓存,我们的静态数据可能仍然有效。那么,下一个问题是如何找到最好(最近)的 CDN 边缘节点?
任播 DNS
Anycast DNS 是一种流量路由算法,允许将一个 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