使用远程数据库网站响应非常慢

Leo*_*eoZ 5 networking remote

我希望两个相同的网站共享一个数据库。一台服务器位于亚洲,托管网站和数据库。另一台服务器位于美国,通过远程数据库托管相同的网络。然而,美国的网络响应速度很慢,但是当将数据库移动到本地服务器(美国服务器)时,网络响应速度很快。如何加快美国服务器与亚洲数据库的连接速度?

我使用的是Centos7+Nginx+MySQL。

vid*_*rlo 28

如何加快美国服务器与亚洲数据库的连接速度?

你可能不能。美亚距离很远,并且存在延迟。简而言之:光的速度是有限的。

您可能应该考虑查询远程数据库的替代方案,例如在多个位置缓存资产、使用 CDN 或使用数据库复制方案,以便您可以拥有数据的本地副本。

  • 副本将是这里的方法,但我认为这取决于数据库的设置方式是否可以读写或只读。 (7认同)
  • 绝对地。如果它大部分是只读的,那么简单的 CDN 可能是更简单的路径。 (4认同)

Pet*_*des 14

您的 Web 应用程序是否进行多个单独的数据库查询?一个查询是否依赖于前一个查询,或者是否存在可以并行运行以重叠其延迟的独立查询?

如果是后者,请确保这实际上发生在您使用的任何编程语言中,而不是不必要地序列化您的查询。

如果这还不够或不可能,您需要以某种方式减少 Web 服务器和数据库之间的往返延迟,或者通过复制数据库以便您可以拥有本地副本,缓存其中一些不重要的“热”部分经常更改,或各种其他事情,例如缓存 Web 服务器的最终输出或 CDN 可以执行的其他操作(请参阅 vidarlo 的答案)。

  • 赞成提及查看代码本身及其数据库查询模式。我可以轻松想象一系列查询,这些查询在本地数据库上执行得足够好,在高延迟数据库上运行缓慢,但可以统一/并行化。 (2认同)

Cri*_*gie 6

你无法提高光速。{需要引用}

您可能需要研究 MySQL 提供的任何复制,而不是洲际查询。您需要在亚洲拥有一个网络服务器和一个数据库服务器,并在每个地点(美国、欧盟、非洲、中东等)复制。当网络服务器写入时,本地数据库立即更新,然后该更新由 MySQL 内部推送到远程数据库服务器。

优点:

  • 用户的会话可以从一个站点切换到另一个站点,并且他们的数据库记录将保持一致。
  • 您只需要备份一台数据库服务器即可获得该批次。
  • 可以通过主站点来增加冗余和容错能力,如果主站点出现故障,则可以故障转移到远程站点。
  • 可以在每个站点水平扩展网络服务器,以便进行更新/重启等停机维护
  • 您甚至可以在每个站点本地拥有一个备份数据库服务器,再次允许冗余而无需故障转移

缺点:

  • 增加了复杂性
  • 更多资源的成本增加

归根结底,这是一个基础设施设计问题,而不是真正的网络服务器问题。

  • “...然后推送到远程数据库服务器”不,MySQL 数据库以复制客户端获取的方式工作。 (3认同)
  • 通过长距离链接进行数据库复制只是另一种令人讨厌的蠕虫病毒。如果您使用同步复制,那么在网络分区的情况下,写入速度会很慢,并且会导致完全停机。如果您使用异步复制,那么由于滞后,您将在副本之间出现数据不一致,并且您将无法如此轻松地在站点之间翻转会话。 (2认同)
  • *用户的会话可以从一个站点切换到另一个站点,并且他们的数据库记录将保持一致。* 呃,不。不是在写入后直接进行。通过复制,您**将**必须处理向主服务器写入的用户,以及在复制写入之前从从服务器获取的应用程序。 (2认同)