我在本地(印度)有一台 Web 服务器,它连接到 Amazon RDS(美国)。在这种情况下,响应速度太慢,因为印度的 Web 服务器从美国 Amazon RDS 获取数据。
但当我去美国并从同一个本地盒子访问同一个 RDS 时。它的工作方式就像从本地数据库获取数据一样。
两个 ISP(印度和美国)的速度均为 10 Mbps。据我了解,距离并不重要,因为电子可以瞬间传输。在全国网络和国际网络之间切换需要时间吗?
基本上,我想了解为什么速度会根据 Web 服务器位置而有所不同?将 RDS 移至印度位置是否有助于提高速度?
答案1
电子不会“瞬间移动”。你需要阅读潜伏延迟与带宽同样重要。延迟会有效降低带宽,尤其是在 TCP 网络上。
数据包可能会通过各种机制到达目的地。电子通过铜线以太网,光通过光纤等。到达目的地需要经过许多跳,经过许多路由器。这些路由器会增加路径的额外时间。
基本上,数据包从印度到美国需要 100-200 毫秒,返回也需要 100-200 毫秒。建立 TCP 连接需要几次往返。这就是为什么靠近数据库时速度会更快的原因。
如果将 RDS 迁移到印度,您很可能会通过降低延迟获得更好的应用程序性能。您能获得多少好处,这在一定程度上取决于您的应用程序。
答案2
你对光速的理解有点偏差。你对将数据包从地球的一端发送到另一端的复杂性的理解也有点偏差。
因此,玻璃中的光速做在数据包延迟方面发挥了一定作用,但更重要的是路由器、交换机和数据包在传输过程中经过的其他设备引起的链路争用和延迟。除了将两台服务器拉近一点之外,您绝对无法采取任何措施来改善这种性能。
因此,是的,将数据库托管在印度可能会提高性能,但也可能不行。您应该对此进行测试以找出答案。
但总体而言,将应用服务器与数据库分开是一种糟糕的做法,原因有很多。如果可能的话,你应该将它们放在一起。
答案3
将数据库移动到与 Web 服务器相同的区域肯定会提高性能。电子沿着电线传输,速度不是光速,但非常快,问题是您发送的数据包在经过国家/ ISP 时必须在多个路由器和防火墙上进行处理。这个问题很复杂,因为在传输任何信息之前必须来回进行几次旅行。
如果您无法将 RDS 数据库移动到同一区域,则可以选择在印度区域设置缓存服务器。如果 AWS 服务 Elasticache 在印度区域可用,您可以启动一个集群(如果不可用,您可以启动自己的运行 memcached 的服务器来执行相同操作),这将长途往返美国,并将数据的副本存储在内存中,以便您的 Web 服务器可以快速访问。这只会改善常见的读取请求,所有写入请求仍然需要发送到美国。
另一个选择可能是在印度地区启动另一个 RDS,并建立多主解决方案,两个数据库将相互同步。它们相距太远,这有点冒险,但只要请求量较少,应该没问题。然而,多主数据库的设置和管理并不是一件容易的事情。
如果您有能力将 Web 服务器迁移到美国(取决于您提供的内容类型),您可以在印度地区使用 CloudFront 设置内容分发,这样印度的客户将能够以更低的延迟访问您的内容(但客户写入请求仍需长途跋涉)。此外,在将服务器迁移到美国时,请注意《爱国者法案》以及它对您确保存储数据机密性的能力可能产生的影响(不过我猜如果您的数据库已经在美国,这不是问题)。