如果远程服务器的物理距离很远,我该如何提高响应时间

How can I improve response time if the remote server is located very far physical distance

我想知道在这种情况下如何物理构建服务器。

假设我的服务在美国提供。

而且我的生意相当成功,所以我想扩大我在亚洲的业务范围。

但我不想本地化服务,所以我在亚洲弄了一些API服务器来提供服务,只是使用位于总部的API,但我的主要组件是还在美国。

但问题是我位于亚洲的 API 需要调用位于美国的 head-quater API,并且由于物理距离太远,响应通常很慢距离。

所以遇到这种情况,我该如何克服呢?

在我看来,我得到了一些用于静态内容的 CDN。但我不知道如何改善源自物理距离的 API 响应时间问题。

如果这是一个愚蠢的问题,请理解,我是架构师的新手。

编辑: 另外,在这种情况下如何构建数据库复制。
如果我得到一个从美国复制到亚洲的复制,我认为复制性能很差,因为物理距离。
亚马逊或任何全球服务如何构建它?

复制性能可能很差。了解有多少数据正在发生变化很重要,这样您就可以估算所需的带宽并了解您的复制是否可以跟上。

亚马逊和其他全球服务通过结合复制、edge-caching (CDN) 和其他使数据更接近消费者的方法来解决这个问题。

作为第一步,您可能还想看看如何让 API 更 coarse-grained。您必须进行的调用越少,性能就越高(因为问题很可能是延迟,而不是带宽)。看看您是否可以批量处理而不是处理它们 one-at-a-time。

您也可以批判性地看待缓存。与其一直调用 read-only API,不如引入一些 cache-control headers 来指定请求的可接受年龄。很多数据都是非常静态的,比如用户数据、部门、product-info 等......其中一些数据可以利用缓存层来提高性能。

如果您想使用 AWS 并希望在特定区域托管主要组件,那么您可能会考虑自己在您选择的区域的 EC2(s) [作为源服务器] 中托管它并使用 Cloudfront ( CDN)在全球范围内提供内容。 AWS 采用自己的高速 Backbone 网络,通过减少网络跳数来减少相距遥远的位置之间的延迟。

从缓存的角度来看,正如 Rob 所说,Cloudfront 对热 objects、温 objects(edge-caching、regional-caching)执行不同的缓存机制;此外,源服务器可以通过 HTTP Headers 发送最短过期时间和最长过期时间来定义缓存 TTL。

但是,如果您不想利用高速 Backbone 网络的优势,则应考虑端点的应用程序设计和将延迟作为约束的功能;并使用适当的 TTL 缓存 objects 并定义适当的缓存策略,同时牢记应用程序的 R/W 比率。